About     Search     Feed

Nilesh D Kapadia


Music     Twitter     Github

VMWare Fusion: Assigning IP Addresses for NAT-Configured VMs via DHCP and Port Forwarding

In VMWare Fusion, when using NAT, you often times want the IP addresses for the VMs to always be the same, so that you can connect to them from the host using the same IP address every time (and probably assign an entry in your /etc/hosts file). You may also want to connect to the host from the guests using a constant IP address. And finally, with VMs that use NAT, you may want to setup port forwarding so that machines outside of the host can connect to services on your VM (and this relies on the IP addresses remaining the same).

Note: The instructions for VMWare Fusion 4 also apply to version 5

The configuration files for doing this reside in /Library/Preferences/VMware Fusion/vmnet8 for VMWare Fusion 4 and later, and /Library/Application Support/VMware Fusion/vmnet8/ for VMWare Fusion 3 and later (the NAT interface is called “vmnet8” hence why configuration for it is here). The files are specifically dhcpd.conf and nat.conf. These files may be read-only (even for root), so make sure to give root write permission before you edit them.

Note that any changes to these files requires a restart of the VMWare’s networking.

For VMWare Fusion 4 and later, simply restart the app.

For VMWare Fusion 3 and earlier, run this script:

sudo "/Library/Application Support/VMware Fusion/boot.sh" --restart

Assigning consistent IP addresses

As explained by this blog entry you can edit the dhcpd.conf file to configure VMWare Fusion’s DHCP server to assign specific IP addresses to a VM based on its MAC address. You should see something like this in your dhcpd.conf file:

subnet 192.168.87.0 netmask 255.255.255.0 {
    range 192.168.87.128 192.168.87.254;
    option broadcast-address 192.168.87.255;
    option domain-name-servers 192.168.87.2;
    option netbios-name-servers 192.168.87.2;
    option domain-name "localdomain";
    option routers 192.168.87.2;
}

For our IP address assignments, we want to pick an IP address that is outside of the range that is set above. So in my case I picked 192.168.87.100 and 192.168.87.101 for two VMs that I wanted to configure.

We also need to get the MAC addresses for the VMs. We can either get it from the VM’s .vmx file under the property ethernet0.generatedAddress or if the VM is currently running we can run ipconfig if it is UNIX/Linux or ipconfig /all if it is Windows.

So if we were to configure two VM’s to have fixed IP addresses, we would add something like this to the dhcpd.conf file:

host uvm {
    hardware ethernet 00:0c:29:02:00:f1;
    fixed-address 192.168.87.100;
}

host wvm {
    hardware ethernet 00:0c:29:44:57:46;
    fixed-address 192.168.87.101;
}

I put entries in my /etc/hosts to point to these, so I don’t have to remember IP addresses:

# Ubuntu VM
192.168.87.100        uvm
# Windows XP VM
192.168.87.101        wvm

Connecting to the host from the guests

Since the host acts as a router, we can use the router IP address as configured in dhcpd.conf to connect to the host from our VMs. From the above excerpt, this is the line that describes what the router IP address is:

    option routers 192.168.87.2;

And inside of the VMs, I add an entry to my /etc/hosts file so I don’t have to remember this IP address. Note that the VMs can see each other, so it’s a good idea to put IP addresses of other VMs in /etc/hosts as well if you are going to make connections between VMs.

For VMWare Fusion 4 and later, guests need to connect to x.x.x.1 instead of x.x.x.2, so this example would look like this for VMWare Fusion 4:

# As derived from the VMWare host's dhcp.conf (VMWare Fusion 4 and later)
192.168.87.1    vmhost
# Ubuntu VM
192.168.87.100    uvm

For VMWare Fusion 3 and earlier, we use the router address as it is:

# As defined in the VMWare host's dhcp.conf (VMWare Fusion 3 and earlier)
192.168.87.2    vmhost
# Ubuntu VM
192.168.87.100    uvm

Port forwarding

To make services in NAT-configured VMs available outside of the host OS, we need to set up port forwarding. To do this edit the nat.conf file. Add entries under [incomingtcp] if you are forwarding a TCP connection and under [incomingudp] for a UDP connection. There are examples in this file, but to go along with our above examples, we might do something like this:

[incomingtcp]
# Forward host port 2222 to SSH on Ubuntu VM
2222 = 192.168.87.100:22
# Forward Remote Desktop connections to Windows VM
3389 = 192.168.87.101:3389

[incomingudp]
# Forward Remote Desktop connections to Windows VM
3389 = 192.168.87.101:3389

Restarting VMWare services on host

Don’t forget to restart after we make any of the above changes.

For VMWare Fusion 4, we simply restart the app.

For VMWare Fusion 3 and earlier, we need to restart the VMWare services using this command:

sudo "/Library/Application Support/VMware Fusion/boot.sh" --restart

© 2013 Nilesh D Kapadia