Skip to main content

Virtualbox networking workarounds

Virtualbox networking setup is a tedious task to understand and implement the very first time. This is mainly because of the multiple network options that it provides and the different locations used to setup those networks. Please follow this virtualbox networking manual to learn about virtualbox networking options. This post builds on the above manual to demonstrate a custom case for setting up a local network of 4 virtual machines (VMs) with internet access and also give the host access to these machines.

The specific networking requirement was not addressed by any of the network options provided by virtualbox. Let's understand it through the table provided in the above manual:

ModeVM→Host VM←Host VM1↔VM2 VM→Net/LAN VM←Net/LAN
Host-only + + +
Internal +
Bridged + + + + +
NAT + Port forward + Port forward
NATservice + Port forward + + Port forward
Requirement + + + + Port forward

As can be seen, the requirement is to have host access the VMs seamlessly but do not allow the outside network to access the VMs without port forwarding. A workaround to fulfill this requirement is to set up two networks that together satisfy the requirements. From the above table, two networks can be:
  1. A host-only network and a NAT
    OR 
  2. A host-only network and a NAT service.
It was decided to setup a host-only network and a NAT service network. The setup is simple,

Host-only network

  1. Navigate to File -> Host Network Manager (This path may change based on virtualbox version.)
  2. Create a new network
  3. Go to "properties" tab and edit the properties of the network adapter. Apply the properties.

    NOTE: Make sure the IPv4 address doesn't include network address
    For example, in the settings shown in the image, the IPv4 address should not be 10.0.1.0/24 but 10.0.1.1/24 otherwise it causes issues.
  4. If you want DHCP managed IPs, tick the DHCP checkbox.
  5. Edit the DHCP server properties in the "DHCP server" tab. Apply the settings

Now edit the network settings for all the VMs and add a new adapter with host-only network as below.


 

NAT service network / NAT network

  1. To setup this network, navigate to Virtualbox -> preferences -> Network (This path may change based on virtualbox version.)
  2. Create a new network
  3. Navigate to preferences tab and configure necessary settings.

    In the image, the "Supports DHCP" checkbox is disabled. This is because the intention is to setup static IPs on all the VMs on the NAT network interface.

Again edit the network settings for all the VMs and add a new adapter with NAT network.


Test

(Re)start the VMs and check their network interfaces.


Apart from the loopback address, there are two other interfaces, enp0s3 on 10.0.1.1/24 host-only network and enp0s8 on 10.0.2.0/24 NAT network.


Conclusion

Even though virtualbox network modes may not cover all the networking requirements, a combination of multiple networking modes can be used to set up-to 4 network interfaces on the VMs to achieve the desired configuration.

Comments

Popular posts from this blog

True or False with Bash

One of the first rules that is taught in any programming course is that 0 means False and anything that is non-zero is considered True. But when you come to system programming in Unix environment, you need to completely forget this basic programming rule. In unix shells, this rule is flipped and 0 means true / success while anything non-zero means false / failure. Every executed command in unix shells returns an exit status according to this convention. Let's see some examples in bash We will use the echo $? to get the exit status for the previously executed command. (The detailed explanation of this command is out of the scope of this article) The first example is as always to print "Hello World!" There are two ways of printing "Hello World!" as shown above. In both the cases, the exit status is 0 as the printing is successful. Let's check the true and false variables. As you can see, false returns 1. Another example using conditionals. ...

Simple HTTP Server in Python

Have you ever come across a need to share a file over a local network to a number of machines? Have you ever felt the need to share output of a task in text files available at a web-endpoint? Often, there is a requirement to quickly setup a light-weight web-server for such requirements. Python provides the easiest way to setup a simple HTTP server for such use cases with a single command. Python comes pre-installed with Linux as many of the linux libraries use python in background. Therefore there is no extra overhead of installing python. With support for python2 getting stopped in April 2020, many of the newer versions of linux distros come with default python3. Therefore this post will focus on setting up an HTTP server using both python2 and python3. We will be using Ubuntu 16.04, however it will work for majority of the linux systems where python comes pre-installed. Preparation Steps to follow before starting the server: Make sure you are in the directory which you want ...

Programmer's Guide: The "set" command in bash

The "set" command in shell allows you to set various shell options and positional parameters. The purpose of this post is to highlight how much this command has been helpful to me in my bash programming. I would not go into much depth about all the possible flag, because you can find many posts and documentation on the internet, like this post by GNU, which cover all the possible options that the "set" command provides. I will mainly focus on two options, The " set -x " option:  This option allows us to print commands and their arguments, after they are expanded (interpolated) but before they are executed. Let us execute a simple hello world programme in bash.   When the programme is executed, we see the entire printf statement being printed before the actual "Hello World!" message is printed. This way, we can check the command that is being executed along with its output. Setting the flag also expands any variables or ar...