(Disclaimer: I work at gridscale.)
Since OpenBSD 6.4 was released the other day I wanted to give it a shot on our platform. Especially since we offer nested virtualization support (as a beta) I wanted to see how well the vmm(4) subsystem works on that.
Creating a new IaaS-Instance I run with the defaults - except for the
hardware profile set to Nested - activate Nested Virtualization
(BETA)
. This becomes visible when you open the advanced settings.
The OpenBSD install runs smoothly. Check the dmesg here.
Once OpenBSD is installed, we will go ahead and give vmd(8) a shot. We grab the install64.fs as well as the bsd.rd file.
$ ftp https://ftp.bytemine.net/pub/OpenBSD/6.4/amd64/install64.f
$ ftp https://ftp.bytemine.net/pub/OpenBSD/6.4/amd64/bsd.rd
Then we prepare the host machine. For outbound NAT to work (to NAT the
traffic from our guest vm running inside vmd), we add the following rule
to /etc/pf.conf
:
ext_if="vio0"
pass out on $ext_if from 100.64.0.0/10 to any nat-to $ext_if
And flip the sysctl responsible for ip forwarding: ip.forwarding sysctl:
doas sysctl net.inet.ip.forwarding=1
(and hardwire it in /etc/sysctl.conf
to make it stick through reboots)
$ doas /usr/sbin/vmd
(add vmd_flags=""
to /etc/rc.conf.local
to start vmd(8)
upon
booting)
Create the disk for our guest and then start the vm to install. The
-L
-option will enable the NAT’ed networking inside the vm. Since we
pass the -c
option, we will connect to the serial console.
This spins up a VM that boots into bsd.rd
, with 1 gigabyte of main
memory and two drives: the install media as well as the hard disk
created in the previous step.
$ doas vmctl create host.drive -s 8G
$ doas vmctl start "vm1" -c -b bsd.rd -m 1G -L -d host.drive -d install64.fs
The corresponding vm.conf
looks
like this:
vm "vm1" {
memory 1G
disk "/data/vms/host.drive"
local interface tap
}
Again we do a regular OpenBSD install. The dmesg within the vm is here.
As one can gather from this rather short post - getting a vm up and running with vmd(8) is a very nice experience. As usual for OpenBSD the default configuration is well thought through and now weird bells and whistles added.