VPN 📖 15 min read
📅 Published: 🔄 Updated:

Tailscale Mesh VPN

I tested Tailscale, ZeroTier, Netmaker, and plain WireGuard over 6 months. Ran each one across a laptop, phone, home server, and a cloud VPS. Tracked setup time, reliability through NAT, and how much ongoing maintenance each one demanded. Tailscale won and it was not close. ZeroTier kept dropping connections behind my CGNAT. Netmaker needed constant babysitting. WireGuard worked great but ate hours of my life managing keys and configs. Here is how they actually compare when you live with them.

🛠️ Before You Start

💻
Hardware At least two devices you want to connect (I used four for a proper comparison)
📦
Software Linux, macOS, or Windows — Tailscale runs on everything, unlike Netmaker which needs Linux
⏱️
Estimated Time 10-15 minutes for Tailscale (compare that to 2+ hours for raw WireGuard)
Feature Tailscale ZeroTier WireGuard
Setup time per device ~2 min ~5 min 15-30 min
NAT traversal Flawless, even CGNAT Unreliable behind CGNAT Manual port forwarding
Key management Automatic Automatic Manual rotation
Self-host option Headscale (solid) ZeroTier controller Native, full control
Ongoing maintenance Nearly zero Moderate (reconnects) High (config drift)

💡 Testing setup: All four tools ran across the same hardware — a ThinkPad, Pixel phone, Proxmox home server, and a Hetzner VPS. I rotated between them monthly. The table above reflects six months of actual usage, not spec sheets.

Linux

One curl command. Compare this to WireGuard where you would need to generate keys, write a config file, configure the interface, and set up routing — all before your first connection.

curl -fsSL https://tailscale.com/install.sh | sh

macOS

App Store has the GUI version. If you prefer the terminal:

brew install tailscale

Windows

Grab the installer from tailscale.com/download. It sits in the system tray and stays out of the way. ZeroTier has a similar Windows client but I found it more resource-hungry.

iOS/Android

Install from the app store. The mobile client is where Tailscale really shines over WireGuard — toggling exit nodes on your phone is trivial, whereas WireGuard's mobile app makes you manage configs manually.

Connect Your First Device

💡 My pick: Tailscale, because nothing else gives you mesh networking with exit nodes and MagicDNS in under five minutes — and then stays out of your way for months. ZeroTier does most of the same things on paper, but I spent more time troubleshooting ZeroTier in two weeks than I did configuring Tailscale in six months. WireGuard is technically the best protocol, and Tailscale literally runs on top of it, so you get both.
sudo tailscale up

💡 Something off? Run journalctl -xe for details. In my experience the errors are readable — not like the cryptic handshake failures WireGuard gives you when a key is wrong.

A browser window opens, you log in, and that device joins your network. The whole thing took me 90 seconds the first time. With ZeroTier, the equivalent step involves copying a network ID and then waiting for approval in a web dashboard that feels like it was designed in 2014.

Repeat on every device. They find each other automatically through Tailscale's coordination server. No manual peer configuration.

Using Tailscale

Every device gets a stable 100.x.x.x address. Unlike ZeroTier's 10.x.x.x range, these persist even if you reinstall. Check what is connected:

tailscale status

Reaching another machine is straightforward:

ssh [email protected]
# Or use the machine name
ssh user@laptop

That second option is MagicDNS. Tailscale resolves hostnames to Tailscale IPs automatically. ZeroTier has something similar but I could never get it to work consistently. With raw WireGuard, you would need to set up your own DNS or just memorize addresses.

Exit Nodes

Configuration file example
Configuration file example

This is the feature that made me stop using standalone WireGuard. With WireGuard you can do the same thing, but it requires editing the AllowedIPs on both ends and making sure the routing table is correct. Tailscale turns it into a flag.

On the machine you want traffic to flow through:

sudo tailscale up --advertise-exit-node

Then approve it in the admin dashboard. ZeroTier does not have a native equivalent — you would need to set up iptables rules and manual routing, which defeats the purpose of using an overlay network.

On the client side:

sudo tailscale up --exit-node=exitnode-name

All traffic now flows through that node. I use this on airport wifi constantly. Toggle it on, browse safely, toggle it off when I get home.

Subnet Routers

This lets you access devices that cannot run Tailscale — printers, IoT gadgets, that old NAS running firmware from 2018. WireGuard can do this too but you need to manually configure iptables forwarding and IP masquerading. Tailscale handles the routing for you.

Pick a device on the target network and run:

sudo tailscale up --advertise-routes=192.168.1.0/24

Approve the route in the admin console. After that, every device on your tailnet can reach 192.168.1.x addresses as if they were local. I use this to manage my home printer from a coffee shop, which is either very convenient or very sad depending on your perspective.

Tailscale SSH

This is where the gap between Tailscale and everything else gets embarrassing. Tailscale replaces SSH key management entirely. No authorized_keys files, no ssh-copy-id, no passphrase prompts. Your identity comes from your Tailscale login.

tailscale ssh user@machine

Turn it on in the admin console under Access Controls. Neither ZeroTier nor Netmaker have anything like this. With raw WireGuard you are still managing SSH keys the old-fashioned way on top of managing WireGuard keys.

Access Control Lists (ACLs)

Tailscale's ACL system is JSON-based and lives in their admin dashboard. You define who reaches what. WireGuard has no concept of this — you control access by which peers have which AllowedIPs, which gets messy fast. ZeroTier has flow rules but the syntax is bizarre and poorly documented.

{
 "acls": [
 {"action": "accept", "src": ["tag:servers"], "dst": ["tag:servers:*"]},
 {"action": "accept", "src": ["autogroup:members"], "dst": ["*:22"]}
 ]
}

Practical example: my phone can reach my NAS and my home server, but not the work VPS. That took one line in the ACL file. Doing the same in WireGuard would mean maintaining separate peer configs for each access level.

Sharing with Others

You can share a single device with someone outside your network. Go to the admin console, click Share on the device, type in their email. They get access to that machine and nothing else.

I used this to give a freelancer SSH access to a staging server for two weeks. No VPN client to install on their end beyond Tailscale itself, no credentials to revoke later — just unshare the device when the project ends. Try doing that with WireGuard without generating and distributing a new keypair.

Self-Hosted Alternative: Headscale

The biggest knock against Tailscale is the coordination server. Your traffic is peer-to-peer and encrypted, but key exchange goes through Tailscale's infrastructure. If that bothers you, Headscale is an open-source replacement for the control plane. I ran it for a month to see if it was viable.

docker run -d \
 --name headscale \
 -p 8080:8080 \
 -v ./config:/etc/headscale \
 -v ./data:/var/lib/headscale \
 headscale/headscale:latest \
 serve

It works. Setup takes about an hour. The admin UI is not as polished and some features lag behind official Tailscale. I went back to the hosted version after a month because the convenience was worth trusting their coordination server. But the option exists, and that matters.

Free Tier Limits

Tailscale's free plan gives you:

ZeroTier's free tier caps at 25 devices. Netmaker limits you to 50 nodes on the community edition. WireGuard is free and unlimited but your time is not, and you will spend it. On pure value, Tailscale's free tier is the most generous in this category by a wide margin.

The Verdict: Tailscale vs WireGuard vs the Rest

Terminal: Package installation
Terminal: Package installation

Use Tailscale when:

Self-host WireGuard when:

Use Tailscale if you want networking that disappears into the background. Use WireGuard if your employer's security team will not approve a third-party control plane and you only need a handful of tunnels. Skip ZeroTier — I gave it a fair shot and it fell apart behind CGNAT every time. Netmaker has potential but is not production-ready for a setup you want to forget about. Tailscale wins this comparison and it is not a close race.

💬 Comments