Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

During our webdevelopment process, we often need to test the layout of our applications and websites in several browsers. Since running all of these browsers stand-alone is nearly imposible and applications such as IETester do not work flawlessly and cannot run on Windows 7, it would be nice to be able to run Virtual Machines for these browsers in order to have a "native" experience.

Currently, I am trying this using a Virtual Windows XP running IE7. My own setup is a Windows 7 RC1 64bit. Most of our websites and applications are developed on locally using mappings in the Windows hosts file.

The problem:

When navigating to http://mywebsite.localhost from within a Virtual Machine, the Virtual Machine's host file is queried instead of the actual OS on top of the Virtual Machine. Also, when the exact same mapping is added, the browser (obviously) still navigates to the "virtual localhost".

  • Is there a way to make the Virtual Machine query the Windows 7 hosts file?
  • Is there a way to make the Virtual Machine's localhost the same as the actual Windows 7 localhost?
share|improve this question

7 Answers 7

up vote 4 down vote accepted

Please read the whole instructions below before beginning them, and check what you would have to do to undo following them. This is from memory, I use a Mac now.

I assume you use VMware, and your VM [the usual abbreviation for Virtual Machine] in NAT networking mode.

I use the term host system for the operating system installation running VMware and guest system for the system running inside VMware, as per the usual VMware parlance.

Part I: Find the IP address of the host system on the NAT network that VMware simulates (normally, network 8):

Open a cmd.exe on the host machine and enter:

ipconfig /all

Note down the IP address for the VMware NAT interface

Part II: Making the hosts file uniform

Change the hosts file, %systemroot%\System32\Drivers\Etc\hosts, on your host system so that it uses the IP address of the VMware NAT adapter instead of 127.0.0.1 for the local web sites.

Make sure the web server listens on that IP address.

Part III: Making the hosts file available

On the host system, in the command line:

rmtshare \\name-of-host-system\hostspath=%systemroot%\System32\Drivers\Etc /grant Everyone:r

Make sure there is no sensitive information in that path.

Part IV: Fetching the hosts file

Make a batch file, c:\hostsfile\vm_hosts_copy.bat on the guest system, with these contents:

copy \\name-of-host-system\hostspath\hosts %systemroot%\System32\Drivers\Etc

Import this into your registry:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"CopyHostsFile"="c:\hostsfile\cm_hosts_copy.bat"


If all that is done, you should be able to work with the same hosts file on your host system and all guest systems. The hosts file on the guest systems will get updated on every reboot. You only have to change it at the usual location, %systemroot%\System32\Drivers\Etc\hosts, on your host system.

You can use that on all your Windows VMs, and analogous scripts with smbclient and /etc/rc.local on most Unix systems for multiplatform testing.

share|improve this answer

Sort of sideways, but if you're going to use alot of VM's for your testing, setup a DNS server on the host with a test zone which forwards to your regular DNS servers. Then change the host to use the local DNS server and the VM's should follow.

Anders

share|improve this answer

Since you have access to the Windows 7 filesystem from within the virtual machine, it seems like you could set up the VM so that it copies the Windows 7 hosts file to the VM's host file during startup. This is a theoretical rather than a practical answer, though, as I don't have Windows 7 available to try it with.

share|improve this answer
    
Thanks for the answer; this is indeed possible, but even if I'd copy the hosts file it would still not work. The VM's localhost is local only to the VM and cannot seem to access the localhost ran on my Windows7 install. –  Aron Rotteveel Jun 24 '09 at 9:07

You should somehow arrange for your VMs to "see" each other via DNS or lmhosts feature. I would also avoid using pc names with localhost in it, you can use no suffix at all or smth like mypc.local

The primary LMHOSTS file is always located in the %systemroot%\System32\Drivers\Etc directory. With Microsoft TCP/IP, you can include other LMHOSTS files from local and remote computers.

Users can import the LMHOSTS file from remote computers on the network by

  • using #INCLUDE statements in the LMHOSTS file
  • clicking Import LMHOSTS on the WINS Address tab of the Microsoft TCP/IP Properties dialog box.

See also this MS KB Article.

share|improve this answer

Is there a way to make the Virtual Machine's localhost the same as the actual Windows 7 localhost?

The above makes me think you may be hitting a conceptual speedbump. Your VM will not (and should not) think of its host as localhost. It's a different logical device on the network.

Localhost is a reserved term, of sorts, which will always point to 127.0.0.1. Attempting to subvert it seems a lot like breaking the head off a sledgehammer to make it into a walking stick (instead of just using a stick).

DNS and host files exist for exactly this reason.

share|improve this answer
    
Thanks for your reply; since you state that DNS and hosts files exists exactly for this reason, could you please eleborate? Although I understand your point, this does not actually help fix this specific issue. –  Aron Rotteveel Jun 24 '09 at 13:40
    
I guess it's not clear why you need to redirect localhost? Your specific issue is unclear. Using a host file or DNS server is far easier, so I'd need details about why changing localhost is the only solution that works in order to come up with additional options. –  Kara Marfia Jun 24 '09 at 15:03

Configure your VMs to use bridged networking instead of NAT (if not already done so). Now the VM is on the same network as the host.

Configure the guest VM's hosts file to be the same as your workstation (the VM host).

ie:
[IP of VM HOST] mywebsite.localhost

share|improve this answer

I would just put squid or another proxy on the host machine and have all the guests use that as the proxy so localhost would be the localhost of the host and the host's hosts file would be honored.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.