When using VirtualBox for my OpenStack development I always configure two network adapters for ease of development. The first is a NAT adapter that enables the guest VM connectivity to the Internet via the host. The second network adapter is a host-only Adapter that enables my host computer (aka my terminal windows) to SSH directly to the guest VM, or to access a web interface for example. This enables the use of tools like ssh, scp, rsync etc easily with multiple VMs without thinking of different ports.
Having the two adapters is very convenient, however when you install products such as devstack or RDO these require additional steps to manage the interface and configure the installation. These steps are relatively straightforward but they make the most simple instructions more complex.
There are alternatives to using the NAT only adapter and enable port forwarding. For example you can configure port forwarding of port 2222 to the guest 22 with (when VM is not running):
$ VBoxManage modifyvm "vm-name" --natpf1 "guestssh,tcp,,2222,,22" $ VBoxManage startvm "vm-name"
You can now connect to the guest VM via port forwarding on your host, in this case connecting to port 2222.
$ ssh user@localhost -p 2222
Personally I find this a disadvantage. You need to provide port forwarding for all ports you want to communicate on e.g. ssh (22), http (80) and keystone (5000). You need to do it in advance of using your VM, and you also need to do this for each VM.
However, depending on your needs and experience this is a valid alternative.
Ubuntu two adapter configuration
On Ubuntu, the following configuration file defines two DHCP network adapters.
$ cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet dhcp
You can verify adapter information (e.g. IP address) using ifconfig
.
$ ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:7f:a0:e2 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe7f:a0e2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:585 errors:0 dropped:0 overruns:0 frame:0 TX packets:455 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:129820 (129.8 KB) TX bytes:64215 (64.2 KB) eth1 Link encap:Ethernet HWaddr 08:00:27:66:8d:cb inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe66:8dcb/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:221 errors:0 dropped:0 overruns:0 frame:0 TX packets:152 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:28289 (28.2 KB) TX bytes:19443 (19.4 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:371 errors:0 dropped:0 overruns:0 frame:0 TX packets:371 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:90509 (90.5 KB) TX bytes:90509 (90.5 KB)
The ip
command is also available.
To configure an IP with a fixed address on the host-only adapter network which is useful for many machines, you would use:
auto eth1 iface eth1 inet static address 192.168.56.50 netmask 255.255.255.0 gateway 192.168.56.1
CentOS two adapter configuration
CentOS keeps a configuration file per interface. We start be determining the interface names.
$ ls -l /etc/sysconfig/network-scripts/ifcfg-* -rw-r--r--. 1 root root 310 Mar 30 16:53 /etc/sysconfig/network-scripts/ifcfg-enp0s3 -rw-r--r--. 1 root root 278 Mar 30 17:00 /etc/sysconfig/network-scripts/ifcfg-enp0s8 -rw-r--r--. 1 root root 277 Mar 30 16:53 /etc/sysconfig/network-scripts/ifcfg-enp0s8e -rw-r--r--. 1 root root 254 Sep 16 2015 /etc/sysconfig/network-scripts/ifcfg-lo
And then can review the per interface configuration with:
$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 TYPE="Ethernet" BOOTPROTO="dhcp" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" NAME="enp0s3" UUID="2c0bdd66-badc-449c-8db8-b2c85a716dab" DEVICE="enp0s3" ONBOOT="yes" $ cat /etc/sysconfig/network-scripts/ifcfg-enp0s8 TYPE=Ethernet BOOTPROTO=dhcp DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=enp0s8 UUID=4127685d-a7b9-4b8d-a399-6dcacdb3396d DEVICE=enp0s8 ONBOOT=yes
You can verify the network configuration using the ip
command.
$ ip addr 1: lo:mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:32:c0:4c brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 15876sec preferred_lft 15876sec inet6 fe80::a00:27ff:fe32:c04c/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:43:22:85 brd ff:ff:ff:ff:ff:ff inet 192.168.56.103/24 brd 192.168.56.255 scope global dynamic enp0s8 valid_lft 1056sec preferred_lft 1056sec inet6 fe80::a00:27ff:fe43:2285/64 scope link valid_lft forever preferred_lft forever
CentOS does not provide ifconfig
by default, it’s included in the net-tools
package (RDO for example installs this).
$ sudo yum install -y net-tools $ ifconfig enp0s3: flags=4163mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a00:27ff:fe32:c04c prefixlen 64 scopeid 0x20 ether 08:00:27:32:c0:4c txqueuelen 1000 (Ethernet) RX packets 437445 bytes 441847285 (421.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 142720 bytes 8897712 (8.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp0s8: flags=4163 mtu 1500 inet 192.168.56.103 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::a00:27ff:fe43:2285 prefixlen 64 scopeid 0x20 ether 08:00:27:43:22:85 txqueuelen 1000 (Ethernet) RX packets 14250 bytes 1708162 (1.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 15367 bytes 13061787 (12.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 0 (Local Loopback) RX packets 5706360 bytes 778262566 (742.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 5706360 bytes 778262566 (742.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[…] This will enable you to more easily access your VMs from your host computer as discussed in VirtualBox networking for beginners. […]