VPNSmith
self-host-vpnCOMP

Tailscale vs Headscale: managed SaaS or self-hosted control plane (2026)?

Tailscale managed SaaS vs Headscale self-host: architecture, ACLs, 3-year TCO, Contabo Frankfurt benchmark, and a segmented verdict by team size.

By Eric Gerard · Fondateur · VPNSmith — Spécialiste self-host VPN & VPS GDPR11 min readPhoto via Unsplash

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:

  1. Authenticates against the Tailscale coordinator (login.tailscale.com).
  2. Fetches the list of authorized peers + their WireGuard public keys.
  3. 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.net resolution 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

CriterionTailscale FreeTailscale PremiumHeadscale self-host
Price 5 users 10 nodes$0~$1,080/yr~€60/yr (Contabo S VPS)
Price 20 users 50 nodesn/a (max 3 users)~$4,320/yr~€60/yr
Initial setup5 min5 min2–3 h (first setup)
Proven scalability>5M nodes>5M nodes~1,000 nodes tested (Headscale v0.23)
Automatic NAT traversalYesYesYes
Declarative ACLsYesYesYes (Tailscale format)
Enterprise MFA SSONoYes (SAML/OIDC)Manual OIDC (Authentik/Keycloak)
Audit logsLimitedCompleteRoll your own (Postgres + journald)
Audited securityRegular public auditsPublic audits + bug bountyReadable code, no professional audit
Native observabilitySaaS consoleSaaS console + APIPrometheus exporter + headscale-ui
Data controlNo (US SaaS)No (US SaaS)Total (your VPS, your jurisdiction)
Vendor lock-inHighHighZero

Three observations you rarely read elsewhere:

  1. 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.
  2. 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.
  3. 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.

MetricTailscale public DERPHeadscale + custom DERP Contabo
Direct tunnel throughput880 Mbps890 Mbps
DERP relay throughput240 Mbps (fr-par1)420 Mbps (Frankfurt local)
Average RTT direct tunnel12 ms12 ms
Average RTT relay18 ms14 ms
NAT traversal success rate (10 tests 4G + home box)7/107/10
VPS CPU at idlen/a2–3% (Headscale + Postgres + Caddy)
VPS RAM usedn/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:

  1. 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).
  2. 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 tests in CI before pushing.
  3. 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.
  4. No official bug bounty. If you find a CVE, it is GitHub issues, not a paid responsible disclosure program.
  5. 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).

ItemTailscale PremiumHeadscale + Contabo
SaaS licenses 36 months$6,480 (~€6,000)€0
VPS infrastructure 36 months€0€180
Initial setup5 min (~€5)12 h (~€600)
Ongoing maintenance~0 h/month1.5 h/month × 36 = 54 h (~€2,700)
Backups + monitoring€08 h setup (~€400) + ~€5/month VPS backup
Incidents (estimate 2 incidents/yr × 4 h)€024 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

ProfileRecommendation
Solo, side projectsTailscale Free
Startup <5 usersTailscale Free
Small team 5–7 users, no sysadminTailscale Premium
Team 8–15 users with 1 sysadminHeadscale self-host (break-even <6 months)
Org 15+ users, EU sovereigntyHeadscale self-host, mandatory
Healthcare / EU fintech / defense complianceHeadscale self-host, mandatory
Deep mesh VPN learningHeadscale (you learn 10× more than with Tailscale)
US-first B2B SaaS scaleupTailscale 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

Sources:


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é