After a lot of farting around with different virtual network adapter types and use cases I finally settled on a networking configuration that works well for developing web apps inside a Debian Virtual Machine running inside Virtualbox on my Windows laptop.
The problem:
- VM needs to be accessible by the windows host even when laptop is “offline” so I can work on the plane.
- When laptop is “online”, VM can also access the internet
- VM should be accessed by host via a static IP address so that dev environment settings persist beyond a reboot
The Solution:
- Two virtual network adapters in the VM’s network tab in Virtualbox:
- Adapter #1: “NAT” / DHCP
- Adapter #2: “Host-only” / Static IP
The NAT adapter should already be set up by default when you do a fresh install of Debian in Virtualbox. It enables the VM to access the wider internet.
Meanwhile the Host-only adapter enables the host machine to see the VM and persists even when internet connectivity drops allowing you to carry on working.
- Set up the Virtualbox Host-only network.
Click File > Preferences > Network, then select “Virtualbox Host-only ethernet adapter” (or whichever host only adapter you selected in the VM’s host-only network adapter tab). Click the edit button which looks like a screwdriver. Enter an unused network in the 192.168.x.x Ip range. I’m using 213.1 because my router is on 192.168.0.1, but I could use anything in that 3rd octet except 0 I think. The netmask should be 255.255.0.0 but for some reason it still works with 255.255.255.0 – I’m still not quite sure why that is though.
Click the “DHCP server” tab and uncheck the ‘Enable Server’ checkbox – we don’t need DHCP because we’ll be using a static IP address.
- Configure the networking inside the VM
Log into the VM as root and edit /etc/network/interfaces – it should look like this:
# The loopback network interface
auto lo
iface lo inet loopback# The NAT virtual adapter
allow-hotplug eth0
iface eth0 inet dhcp# The Host-only virtual adapter
auto eth1
iface eth1 inet static
address 192.168.213.9 # this must match Virtualbox host-only network
netmask 255.255.255.0
- Reset the VM and you should now be up and running