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:
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:
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:
I put entries in my /etc/hosts to point to these, so I don’t have to remember IP addresses:
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:
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:
For VMWare Fusion 3 and earlier, we use the router address as it is:
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:
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: