I’m just a happy customer of OpenBSD Amsterdam. Mischa Peters runs the place. He donates €10 for every VM per year to OpenBSD Foundation.

Tested on OpenBSD 6.3 and 6.4

Deploy VM on OpenBSD Amsterdam

OpenBSD in Amsterdam is running dedicated vmd(8) servers to host opinionated VMs.

Send your name, email address, hostname, username, and public SSH key to OpenBSDAms via contact form, Twitter, or Mastodon, before you pay.

For example:

Roman Zolotarev
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIqh7BmO...

Please allow few hours for your VM to be started. You’ll get a IPv4 and IPv6 address as soon as your VM is deployed. Login to the VM (assuming your private SSH key is in its default location):

$ ssh username@XXX.XXX.XXX.XXX
OpenBSD 6.4-current (GENERIC) #358: Sat Oct 20 01:44:18 MDT 2018

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.


Get the password from ~/.ssh/authorized_keys and switch to root.

$ awk '{print$NF}' .ssh/authorized_keys
$ su -

Add your username to /etc/doas.conf:

# echo 'permit username' > /etc/doas.conf

Edit /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no

Verify the new config and restart sshd:

# sshd -t
# rcctl restart sshd

It has been reported by some users that IPv6 needs -soii in order to work properly. In that case you can edit /etc/hostname.vio0:

inet6 2a03:6000:9xxx::xxx 64 -soii

When you don’t want the IPv4 address to be provided by dhcpd you can change /etc/hostname.vio0 to:

inet 46.23.xx.xx
inet6 2a03:6000:9xxx::xxx 64 -soii

When you do, make sure to edit /etc/mygate:


Reinitialize the network:

# sh /etc/netstart vio0

Add to your crontab:

# crontab -e

These are workarounds for known issues. Replace with your default gateway from /etc/mygate.

*/15 * * * * /usr/sbin/rdate pool.ntp.org > /dev/null
*/5 * * * * /sbin/ping -c3 > /dev/null

Update /etc/pf.conf, test, and load it:

# echo 'pass in quick proto { icmp, icmp6 } all' >> /etc/pf.conf
# pfctl -nf /etc/pf.conf
# pfctl -f /etc/pf.conf
# pfctl -sr
block return all
pass all flags S/SA
block return in on ! lo0 proto tcp from any to any port 6000:6010
block return out log proto tcp all user = 55
block return out log proto udp all user = 55
pass in quick proto icmp all
pass in quick proto ipv6-icmp all

Check 6.4 errata and apply available patches.

# syspatch
Relinking to create unique kernel... done.
# reboot
Connection to XXX.XXX.XXX.XXX closed.

Now you may want to setup a web server.

Thanks to Mischa Peters for reading drafts of this, to Mike Larkin, Bryan Steele, h3artbl33d, and Jeff Neitzel for tips and hints.