I love running Tailscale. It lets me do magic things without opening up holes in my networks. All of my devices appear to be on the same subnet no matter where they are in the world.
Installation on OpenBSD is easy these days:
$ doas pkg_add tailscale$ doas rcctl enable tailscaled$ doas rcctl start tailscaled$ doas tailscale up
However, I ran into a slight issue with tailscaled hitting high CPU usage and bringing the machine to a crawl. Checking /var/log/daemon I found messages like this:
CreateEndpoint error for 100.107.92.68:30367 -> 100.100.100.100:53: connection was refused
dns udp query: request queue full
It turns out the culprit is MagicDNS, which lets Tailscale find machines on magic hostname.domainname.ts.net hostnames. This doesn't work out of the box under OpenBSD because Tailscale can't automatically setup the DNS resolver.
In this broken configuration tailscaled just spins and spins trying to look up ts.net hosts.
The simple fix is to just disable MagicDNS on the OpenBSD host. This works for me because I don't really use it for anything outbound on this machine, but the inbound openbsd.whatever.ts.net still works.
$ doas tailscale set --accept-dns=false$ doas rcctl restart tailscaled
The less simple fix is to configure unbound(8) to handle ts.net DNS queries. That's for another day!