Affiliate disclosure — This post contains Contabo affiliate links. If you grab a VPS through them, we earn a commission at no extra cost to you. We only document what we actually run in production on our own VPS.
Mesh VPN exploded in 2026. WireGuard became the de-facto standard, Tailscale crossed 5 million active devices, and the self-host community pushed Headscale to a maturity level that leaves no excuse for staying locked into a SaaS when sovereignty matters. If you are searching "tailscale vs headscale", you are probably torn between managed convenience and total control — this comparison makes the call, based on a real Headscale deployment on a Contabo VPS Frankfurt since February 2026, and 14 months of parallel Tailscale use before migration.
The data plane is identical in both cases: WireGuard. All the difference lives in the control plane — who orchestrates keys, ACLs, NAT traversal, and who holds the metadata for your mesh. That nuance changes everything: cost, latency, vendor lock-in, and compliance posture.
Tailscale: managed architecture
Tailscale is a SaaS control plane layered on top of WireGuard. When you install the client, it does three things:
- Authenticates against the Tailscale coordinator (login.tailscale.com).
- Fetches the list of authorized peers + their WireGuard public keys.
- Attempts a direct peer-to-peer WireGuard connection. If NAT blocks it, falls back to a DERP relay (TCP/443) managed by Tailscale Inc.
The SaaS coordinator
The coordinator is the orchestrator. It never sees your WireGuard private keys — they are generated locally and stay local. It only distributes public keys and IP mappings. Real attack surface: if the coordinator is compromised, an attacker can inject a phantom peer into your mesh. Tailscale publishes a detailed threat model and undergoes regular audits.
DERP — Designated Encrypted Relay for Packets
When two peers behind symmetric NATs cannot establish a direct tunnel (roughly 5–10% of cases in residential/4G production), Tailscale relays encrypted traffic through a globally distributed network of DERP servers (official DERP list). This is still end-to-end encrypted WireGuard; Tailscale Inc. cannot decrypt it. But the network metadata (who talks to whom, when, how much) transits through their infrastructure.
MagicDNS, ACLs, MFA SSO
- MagicDNS:
machine.your-tailnet.ts.netresolution everywhere in the mesh, no manual DNS config. - Declarative JSON ACLs: who can talk to whom, on which ports. Compiled into iptables rules.
- MFA + SAML/OIDC SSO on Premium and Enterprise plans (Google Workspace, Okta, Azure AD).
- Complete audit logs on Premium.
The UX is excellent. The price is not, once you exceed 3 users.
Headscale: self-hosted architecture
Headscale (BSD-3, Go, maintained by Juan Font + active community) is an open-source reimplementation of the Tailscale coordinator API. Not a fork — an independent server that speaks the same protocol, making it compatible with official Tailscale clients.
Components
- Headscale daemon: single Go binary, ~30 MB, listens over HTTPS on a configurable port.
- Persistence backend: SQLite (default, fine for <50 nodes) or PostgreSQL (recommended for multi-org production).
- TLS reverse proxy: Caddy or Traefik in front of Headscale. Automatic Let's Encrypt.
- Optional OIDC provider: Authentik, Keycloak, Authelia for user auth. Without OIDC, pre-auth keys (CLI) remain available.
What Headscale does
- Peer discovery + public key distribution.
- Tailscale JSON ACLs (100%-compatible format).
- DERP: either use the Tailscale public DERP network (default), or host your own DERP on the same VPS.
- Exit nodes, subnet routers, Taildrop, MagicDNS (since v0.23).
What Headscale does not do
- No official web console (community alternatives: headscale-ui, still stabilizing).
- No Tailscale SSH with session recording (SaaS Premium feature).
- No commercial support — it is community open source, GitHub issues are the only channel.
12-criteria comparison
| Criterion | Tailscale Free | Tailscale Premium | Headscale self-host |
|---|---|---|---|
| Price 5 users 10 nodes | $0 | ~$1,080/yr | ~€60/yr (Contabo S VPS) |
| Price 20 users 50 nodes | n/a (max 3 users) | ~$4,320/yr | ~€60/yr |
| Initial setup | 5 min | 5 min | 2–3 h (first setup) |
| Proven scalability | >5M nodes | >5M nodes | ~1,000 nodes tested (Headscale v0.23) |
| Automatic NAT traversal | Yes | Yes | Yes |
| Declarative ACLs | Yes | Yes | Yes (Tailscale format) |
| Enterprise MFA SSO | No | Yes (SAML/OIDC) | Manual OIDC (Authentik/Keycloak) |
| Audit logs | Limited | Complete | Roll your own (Postgres + journald) |
| Audited security | Regular public audits | Public audits + bug bounty | Readable code, no professional audit |
| Native observability | SaaS console | SaaS console + API | Prometheus exporter + headscale-ui |
| Data control | No (US SaaS) | No (US SaaS) | Total (your VPS, your jurisdiction) |
| Vendor lock-in | High | High | Zero |
Three observations you rarely read elsewhere:
- Custom Headscale DERP is a game-changer for the EU. Host DERP on the same Contabo Frankfurt VPS and you replace a US DERP infrastructure with an EU one — major GDPR win for companies with EU/EEA compliance requirements.
- The lack of an official Headscale console is less of a problem than you'd think once initial config is done. Daily operations go through the CLI (
headscale nodes list,headscale acl tests) and fit in 3 commands. - The hidden cost of Tailscale Premium: billing is per user, not per device. If you have 5 users and 100 nodes, you pay 5 × $18/month — not 100 × $1.80. Headscale ignores this distinction (one node = one node).
First-hand: Headscale setup on Contabo Frankfurt
Real setup carried out in February 2026 on a Contabo VPS S Frankfurt (4 vCPU, 8 GB RAM, 200 GB NVMe, €4.99/month — see our Contabo review 2026). Stack: Debian 12, Docker, PostgreSQL 16, Caddy 2, Authentik 2026.4.
Step 1 — Contabo provisioning (5 min)
Contabo VPS S Frankfurt ordered via our Contabo VPS link. Minimal Debian 12 snapshot. SSH key only, root login disabled immediately, ufw + fail2ban configured via the Contabo step-by-step tutorial.
Step 2 — Docker stack (10 min)
# docker-compose.yml
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: headscale
POSTGRES_USER: headscale
POSTGRES_PASSWORD_FILE: /run/secrets/pg_pass
volumes:
- ./pgdata:/var/lib/postgresql/data
secrets: [pg_pass]
headscale:
image: headscale/headscale:0.23
restart: unless-stopped
depends_on: [postgres]
volumes:
- ./config:/etc/headscale
- ./data:/var/lib/headscale
ports:
- "127.0.0.1:8080:8080"
caddy:
image: caddy:2
restart: unless-stopped
ports: ["80:80", "443:443"]
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy-data:/data
secrets:
pg_pass:
file: ./secrets/pg_pass.txt
Minimal Caddyfile:
headscale.yourdomain.com {
reverse_proxy 127.0.0.1:8080
}
docker compose up -d and Let's Encrypt handles the TLS cert in 30 seconds. Headscale config (config.yaml): set database.type: postgres + server_url: https://headscale.yourdomain.com. Total: 15 minutes of active setup.
Step 3 — Connecting 5 clients
# On the Headscale server
headscale users create eric
headscale preauthkeys create --user eric --reusable --expiration 24h
# → tskey-auth-xxxxx
# On each client (MacBook, 2 Linux Debian, iOS, Android)
sudo tailscale up \
--login-server=https://headscale.yourdomain.com \
--authkey=tskey-auth-xxxxx
iOS and Android require editing Settings → Tailscale → Custom Coordinator URL in the official app (option visible since 1.40). Five clients connected in 8 minutes.
Step 4 — Field measurements June 2026
Measurement setup: iperf3 between MacBook Paris (FTTH 1 Gbps) and Contabo VPS Frankfurt, 10 runs, median retained.
| Metric | Tailscale public DERP | Headscale + custom DERP Contabo |
|---|---|---|
| Direct tunnel throughput | 880 Mbps | 890 Mbps |
| DERP relay throughput | 240 Mbps (fr-par1) | 420 Mbps (Frankfurt local) |
| Average RTT direct tunnel | 12 ms | 12 ms |
| Average RTT relay | 18 ms | 14 ms |
| NAT traversal success rate (10 tests 4G + home box) | 7/10 | 7/10 |
| VPS CPU at idle | n/a | 2–3% (Headscale + Postgres + Caddy) |
| VPS RAM used | n/a | ~620 MB / 8 GB |
On the direct tunnel (the nominal case for 90%+ of packets in practice), no difference — it is WireGuard on both sides. The difference only appears on DERP relay: hosting your own DERP on Contabo Frankfurt avoids a transatlantic hop and delivers ~4 ms better RTT and ~75% more throughput vs Tailscale public DERP fr-par1 (which can be saturated during US peak hours).
Use cases — who should choose what
Choose Tailscale (managed)
- Solo / personal projects 1–100 devices → Tailscale Free. $0 and the UX is unbeatable.
- Early-stage startup <5 users → Tailscale Free as well. Keep your focus on the product.
- Scaleup 20–100 users, US-friendly B2B SaaS compliance → Tailscale Premium. Audit logs, SAML, pro support — that is their sweet spot.
- No in-house sysadmin → Tailscale, no debate.
Choose Headscale (self-host)
- EU compliance / GDPR / public sector sovereignty → Headscale. The control plane lives in your jurisdiction.
- Team with a competent sysadmin and available time → Headscale pays off quickly (break-even <6 months at 7+ users).
- Production with strict data residency requirements (healthcare, EU fintech, defense) → Headscale is essentially mandatory.
- Desire to understand and master your VPN stack → Headscale teaches you things; Tailscale hides them.
Choose bare WireGuard (reminder)
If you are still weighing a third scenario (hub-and-spoke WireGuard without a control plane), our comparison Tailscale vs WireGuard self-host settles that branch. Headscale only arbitrates against Tailscale.
Headscale limitations you need to know
Honesty first — Headscale is solid, but here are the real blind spots in production:
- Feature lag vs Tailscale. New Tailscale features (Tailscale Funnel, Tailscale Serve, SSH session recording) arrive in Headscale with a 3–9 month delay, and some will never come (intrinsically SaaS Premium features).
- ACL flexibility. The Tailscale JSON ACL format is compatible, but Headscale linting is less verbose: a typo in a tag can break silently. Recommended workflow:
headscale acl testsin CI before pushing. - No automatic MagicDNS for quick PoCs. On the Tailscale SaaS side, MagicDNS works in two clicks. On the Headscale side, you must configure the DNS zone on the server — either dnsmasq or a dedicated CoreDNS zone. Not insurmountable, but it is not magic.
- No official bug bounty. If you find a CVE, it is GitHub issues, not a paid responsible disclosure program.
- Third-party headscale-ui. The community web console works but is not on par with the Tailscale dashboard in UX. For 80% of routine operations, CLI is sufficient.
3-year comparative TCO
Median scenario: 10 active users, 30 nodes, moderate growth. Assumptions: sysadmin at €50/h (junior-mid level EU), Tailscale Premium $18/user/month (June 2026 pricing), Contabo VPS S Frankfurt €4.99/month + one hardware reset (~€30).
| Item | Tailscale Premium | Headscale + Contabo |
|---|---|---|
| SaaS licenses 36 months | $6,480 (~€6,000) | €0 |
| VPS infrastructure 36 months | €0 | €180 |
| Initial setup | 5 min (~€5) | 12 h (~€600) |
| Ongoing maintenance | ~0 h/month | 1.5 h/month × 36 = 54 h (~€2,700) |
| Backups + monitoring | €0 | 8 h setup (~€400) + ~€5/month VPS backup |
| Incidents (estimate 2 incidents/yr × 4 h) | €0 | 24 h over 36 months (~€1,200) |
| Total 36 months | ~€6,005 | ~€5,260 |
At 10 users / 30 nodes, Headscale is 12% cheaper in TCO over 36 months. At 5 users, Tailscale Premium pulls ahead ($3,240 vs ~€5,000 for Headscale — the fixed sysadmin cost crushes the SaaS saving). At 20+ users, Headscale wins decisively: Tailscale Premium reaches $12,960/36m, while Headscale stays at ~€5,260.
The Headscale economic sweet spot: 8–15 users. Below that, Tailscale Free or Premium wins. Above it, Headscale wins by knockout.
Segmented verdict
| Profile | Recommendation |
|---|---|
| Solo, side projects | Tailscale Free |
| Startup <5 users | Tailscale Free |
| Small team 5–7 users, no sysadmin | Tailscale Premium |
| Team 8–15 users with 1 sysadmin | Headscale self-host (break-even <6 months) |
| Org 15+ users, EU sovereignty | Headscale self-host, mandatory |
| Healthcare / EU fintech / defense compliance | Headscale self-host, mandatory |
| Deep mesh VPN learning | Headscale (you learn 10× more than with Tailscale) |
| US-first B2B SaaS scaleup | Tailscale Premium (focus on product, buy back time) |
The worst choice: Headscale without a dedicated sysadmin. You will end up with an unpatched control plane on a Tuesday evening.
Further reading
- Headscale self-host: complete install guide 2026
- Tailscale vs WireGuard self-host 2026
- Self-host VPN on Contabo WireGuard 2026
- Contabo VPS setup step by step
- WireGuard vs OpenVPN — VPS benchmarks 2026
- Contabo review 2026: honest production feedback
Sources:
- Headscale — source code juanfont/headscale
- Tailscale CLI client — source code
- Tailscale Security Bulletin & Threat Model
- DERP — Designated Encrypted Relay for Packets
- WireGuard whitepaper — Jason A. Donenfeld
Article published 2026-06-07. Headscale benchmark run on Contabo VPS S Frankfurt operated since February 2026, with 5 connected clients (MacBook Sonoma, 2 Linux Debian 12, iOS 18, Android 14). iperf3 median measurements over 10 runs June 2026, RTT measured via ICMP ping. Tailscale pricing sourced from tailscale.com/pricing in June 2026 — verify before making a decision. Real savings depend on team size, sysadmin hourly rate, and compliance requirements.
Note: WireGuard, Tailscale, and Headscale are fully legal in the EU, US, Canada, and most democratic countries. VPNSmith publishes this content for educational purposes.
★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis
Get Contabo30 jours satisfait ou remboursé→