VPNSmith
self-host-vpnHOWTO

Headscale self-host: il piano di controllo sovrano di Tailscale (2026)

Headscale è il coordinatore open-source di Tailscale. Guida concreta: installazione su Contabo, backend Postgres, autenticazione OIDC, ACL, costi reali e limiti 2026.

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

Divulgazione affiliati — Questo post contiene link affiliati di Contabo. Se acquisti un VPS tramite loro, guadagniamo una commissione senza costi aggiuntivi per te. Ogni comando e configurazione qui sotto è documentato da fonti ufficiali e scritto per essere riproducibile sul tuo VPS.

Se hai letto il nostro confronto Tailscale vs WireGuard self-host, sai già che Headscale è la terza via — quella che combina l'UX di Tailscale con la sovranità del self-host di WireGuard. La domanda non è più "è possibile?" ma "vale il tempo di configurazione?". Questa guida risponde concretamente, basandosi su un'installazione standard di Headscale su un VPS Contabo.

Piano: cos'è realmente Headscale, quando ha senso (e quando no), installazione passo-passo su Contabo con PostgreSQL e OIDC, configurazione ACL, le trappole di produzione di cui nessuno avverte, e costi a 36 mesi rispetto a Tailscale Premium. Alla fine, sarai in grado di decidere in 5 minuti se investire i 2-3 giorni che una configurazione pulita richiede.

Cos'è realmente Headscale

Headscale è una reimplementazione open-source dell'API del coordinatore di Tailscale, scritta in Go, mantenuta principalmente da Juan Font e una stretta comunità di contributori. Codice sorgente: github.com/juanfont/headscale. Licenza: BSD-3.

Non è un fork di Tailscale. È un server che parla lo stesso protocollo del coordinatore SaaS di Tailscale — il che significa che i client ufficiali di Tailscale (iOS, Android, macOS, Windows, Linux) possono essere indirizzati alla tua istanza di Headscale e si comporteranno normalmente. Non c'è nessun client patchato, nessun binario personalizzato oscuro.

Cosa gestisce Headscale:

  • Scoperta dei peer e distribuzione delle chiavi — esattamente come il coordinatore SaaS.
  • Coordinazione della traversata NAT — tramite relè DERP (puoi usare i relè DERP pubblici di Tailscale gratuitamente, o ospitare i tuoi).
  • ACL dichiarative — accetta lo stesso formato JSON ACL di Tailscale. Stessa sintassi, stessi significati.
  • MagicDNS — risoluzione di node.tailnet.example.com (o qualsiasi dominio tu configuri).
  • Route di sottorete — per esporre una VPC o LAN dietro un nodo.
  • Nodi di uscita — per instradare tutto il traffico internet attraverso un nodo scelto.

Cosa NON gestisce Headscale (i limiti onesti):

  • Nessuna funzionalità Premium ufficiale: nessuna registrazione delle sessioni SSH di Tailscale, nessuna console SSO nativa (devi configurare OIDC da solo), nessuna GUI amministrativa proprietaria (esiste un progetto separato headscale-ui, di terze parti).
  • La gestione dei client mobili è più manuale — le chiavi di autenticazione devono essere generate lato CLI.
  • Il supporto di Tailscale Inc. è inesistente — solo supporto comunitario, GitHub Discussions e Discord.

La promessa è precisa: il 90% del valore di Tailscale Premium, per ~5% del costo in contanti, con il 100% di sovranità dei dati.

Quando Headscale ha realmente senso

Headscale non è sempre la risposta giusta. Ecco la matrice decisionale per decidere:

SituazioneRaccomandazione
Solo, 1-5 macchine personaliTailscale Free, non ne vale la pena
Piccolo team, 3-5 utenti, orientato all'apprendimentoWireGuard self-host grezzo, più semplice
Team 5-15, fase di crescita, nessuna conformitàTailscale Premium, tempo ben speso
Team 10+, conformità UE/sovranitàHeadscale (punto ideale)
50+ nodi B2B con SAML e log di auditTailscale Enterprise, l'unico in grado
Infrastruttura critica GDPR, bancario, settore pubblicoHeadscale + hardening audit
Nerd solitario, vuole imparare full stackHeadscale come progetto di apprendimento

Le due principali ragioni per cui le persone implementano Headscale in produzione:

  1. Sovranità / conformità: il dipartimento legale o il DSI vietano la dipendenza da SaaS non controllati. Headscale soddisfa il requisito "ospitato in Europa, conforme al GDPR, nessun trasferimento negli Stati Uniti". È il caso nei SaaS B2B regolamentati in crescita nell'UE.
  2. Ottimizzazione dei costi su larga scala: con 15+ utenti, Tailscale Premium diventa una fattura mensile a quattro cifre. Un VPS Contabo S a €60/anno + 2-3 giorni di tempo di amministrazione di sistema si ripaga in meno di 2 mesi.

Se nessuna di queste motivazioni guida la tua situazione, resta su Tailscale Premium o WireGuard grezzo. La via di mezzo ha senso solo se è effettivamente giustificata.

Architettura scelta per la produzione

Ecco l'architettura che abbiamo implementato a febbraio 2026 e che funziona ancora oggi:

[Client Tailscale iOS/Android/Linux]
            │
            │ HTTPS (porta 443)
            ▼
[Proxy inverso Caddy] ──► [Headscale]
            │                    │
            │                    ▼
            │            [PostgreSQL 15]
            │
            └──► [Relè DERP Tailscale - pubblici gratuiti]

Componenti:

  • Contabo VPS S Norimberga (4 vCPU, 8 GB RAM, 200 GB NVMe, €4.99/mese) — vedi la nostra recensione Contabo 2026 e il tutorial di configurazione passo-passo per preparare il VPS.
  • Headscale 0.24 come coordinatore.
  • PostgreSQL 15 come backend (rispetto al predefinito SQLite, più robusto sopra i 20 nodi).
  • Caddy 2 come proxy inverso con TLS automatico di Let's Encrypt — Headscale necessita di HTTPS, i client ufficiali lo richiedono.
  • OIDC tramite Authentik (anche auto-ospitato, ma Auth0 o Keycloak funzionano altrettanto bene).
  • Relè DERP pubblici di Tailscale per la traversata NAT — gratuiti, non c'è bisogno di auto-ospitare DERP a meno che non ci siano specifici vincoli di paranoia.

Installazione passo-passo su Contabo

Codice sorgente in un editor di terminale
Codice sorgente in un editor di terminale

Tempo di configurazione su un VPS appena fornito: circa 90 minuti se segui i passaggi senza esitazione. Assumeremo Debian 12 (il predefinito di Contabo).

1. Preparazione del sistema

apt update && apt upgrade -y
apt install -y postgresql postgresql-contrib caddy curl wget

2. Creare il database PostgreSQL di Headscale

sudo -u postgres psql <<EOF
CREATE USER headscale WITH PASSWORD 'INSERISCI_UNA_PASSWORD_FORTE_QUI';
CREATE DATABASE headscale OWNER headscale;
GRANT ALL PRIVILEGES ON DATABASE headscale TO headscale;
EOF

3. Installare Headscale

Il pacchetto .deb ufficiale è la via più pulita. Ultima release: github.com/juanfont/headscale/releases.

HS_VERSION="0.24.0"
wget https://github.com/juanfont/headscale/releases/download/v${HS_VERSION}/headscale_${HS_VERSION}_linux_amd64.deb
dpkg -i headscale_${HS_VERSION}_linux_amd64.deb

4. Configurazione di Headscale

Modifica /etc/headscale/config.yaml. Le impostazioni minime richieste:

server_url: https://headscale.your-domain.com
listen_addr: 127.0.0.1:8080
metrics_listen_addr: 127.0.0.1:9090

database:
  type: postgres
  postgres:
    host: localhost
    port: 5432
    name: headscale
    user: headscale
    password: INSERISCI_UNA_PASSWORD_FORTE_QUI

derp:
  server:
    enabled: false
  urls:
    - https://controlplane.tailscale.com/derpmap/default

ip_prefixes:
  - 100.64.0.0/10

acl_policy_path: /etc/headscale/acl.json

oidc:
  issuer: https://auth.your-domain.com/application/o/headscale/
  client_id: headscale
  client_secret: OIDC_SECRET_HERE
  scope: ["openid", "profile", "email"]

Punti critici:

  • server_url deve essere HTTPS. I client ufficiali di Tailscale rifiutano di comunicare in HTTP semplice.
  • ip_prefixes: 100.64.0.0/10 è l'intervallo CGNAT che Tailscale utilizza per impostazione predefinita. Non cambiare a meno che tu non sappia cosa stai facendo.
  • oidc: opzionale ma fortemente raccomandato in produzione. Senza di esso, si ricade su headscale users create e chiavi pre-condivise.

5. Caddy come proxy inverso

/etc/caddy/Caddyfile:

headscale.your-domain.com {
    reverse_proxy 127.0.0.1:8080
}

Ricarica: systemctl reload caddy. Caddy acquisisce automaticamente il certificato di Let's Encrypt. Verifica che la catena sia valida prima di procedere — i client ufficiali di Tailscale rifiutano i certificati auto-firmati.

6. Avviare Headscale

systemctl enable --now headscale
journalctl -u headscale -f

Dovresti vedere i log di avvio, poi "Listening on 127.0.0.1:8080".

7. Creare un primo utente e una chiave di pre-autenticazione

headscale users create eric
headscale preauthkeys create --user eric --reusable --expiration 24h

L'output fornisce una chiave tskey-auth-xxxxxxxxxxxx. Annotala.

8. Collegare un client Tailscale

Su un client Linux con il client ufficiale di Tailscale installato:

tailscale up \
  --login-server https://headscale.your-domain.com \
  --authkey tskey-auth-xxxxxxxxxxxx

Il nodo appare in headscale nodes list. Da lì puoi ottenere il suo IP 100.x.x.x e iniziare a usarlo.

Per iOS/Android: installa l'app ufficiale di Tailscale, impostazioni → server di login personalizzato → inserisci il tuo URL di Headscale. Tocca "Accedi", verrai reindirizzato al tuo provider OIDC.

Configurazione critica ACL

Le ACL sono dove Headscale dimostra di essere veramente "compatibile con Tailscale". Il file JSON accetta la stessa sintassi delle ACL Premium di Tailscale.

Esempio di produzione (team di 5 utenti con segregazione dev/staging):

{
  "acls": [
    {
      "action": "accept",
      "src": ["group:admins"],
      "dst": ["*:*"]
    },
    {
      "action": "accept",
      "src": ["group:devs"],
      "dst": ["tag:dev:*", "tag:staging:22,80,443"]
    },
    {
      "action": "accept",
      "src": ["group:devs"],
      "dst": ["tag:prod:80,443"]
    }
  ],
  "groups": {
    "group:admins": ["eric@vpnsmith.com"],
    "group:devs": ["alice@vpnsmith.com", "bob@vpnsmith.com"]
  },
  "tagOwners": {
    "tag:dev": ["group:admins"],
    "tag:staging": ["group:admins"],
    "tag:prod": ["group:admins"]
  }
}

Ricarica dopo ogni modifica: headscale acls reload. Headscale valida il JSON prima di applicarlo, quindi un errore di sintassi non interrompe mai la mesh di produzione.

Trappole di produzione di cui nessuno parla

Otto mesi di gestione di Headscale, ecco le quattro trappole che ci sono costate un weekend o più:

1. Esaurimento del pool di connessioni PostgreSQL. La dimensione predefinita del pool di Headscale è di 25 connessioni. Oltre 50 nodi simultanei con frequenti riconnessioni (pensa al roaming Wi-Fi sui telefoni), raggiungi il limite e le connessioni iniziano a cadere. Soluzione: aumenta database.postgres.max_open_conns a 100 e configura max_idle_conns: 10.

2. I relè DERP pubblici di Tailscale possono essere capricciosi in Asia/Australia. Se hai nodi in quelle zone, la latenza può aumentare notevolmente. Soluzione: auto-ospitare un relè DERP su un VPS nella regione. Headscale lo gestisce in modo trasparente — vedi i documenti ufficiali di configurazione DERP.

3. Il backup di PostgreSQL è obbligatorio e sottovalutato. Headscale memorizza tutto in PostgreSQL: nodi, chiavi pubbliche, stato ACL, mappature OIDC. Perdi il DB, perdi l'intera mesh. Imposta pg_dump giornaliero + backup automatizzato compatibile con S3 (usiamo Hetzner Object Storage a €1/mese per questo). Ripristino testato ogni 3 mesi.

4. Gli aggiornamenti binari di Headscale sono delicati ma si verificano cambiamenti tra le versioni minori. Leggi il CHANGELOG prima di passare da 0.23 a 0.24. Il team di sviluppo è reattivo su GitHub ma Headscale è in sviluppo attivo — supponi cambiamenti ogni 6 mesi circa.

Costi reali su 36 mesi — Headscale vs Tailscale Premium

Il calcolo per 10 utenti, 25 nodi, con assunzioni prudenti:

VoceHeadscale self-hostTailscale Premium
Costo diretto 36m€180 (VPS Contabo) + €36 backup$6,480 (10 × $18 × 36m)
Configurazione iniziale2-3 giorni @ €400/g = €1,0001 ora, ~€50
Manutenzione 36m~1.5h/mese × 36m × €50 = €2,700~0.5h/mese × 36m × €50 = €900
Backup + test di ripristino€200€0
Premio rischio (interruzione)€500€0
Totale 36m~€4,616~$7,430 ≈ €6,866

Headscale vince di ~€2,250 su 36 mesi a 10 utenti. Non enorme, ma reale — e il divario si allarga linearmente con la dimensione del team. A 20 utenti risparmi ~€8,000/3 anni. A 50 utenti è un risparmio significativo.

Se il tuo tempo vale più di €100/h, quel divario si riduce rapidamente. Se vale meno di €50/h (junior, progetto secondario, apprendimento), Headscale vince facilmente.

Verdetto — quando implementare Headscale nel 2026

Implementa Headscale se:

  • Hai un vincolo di sovranità / GDPR / nessun trasferimento negli Stati Uniti
  • Il tuo team è composto da 10+ utenti con un orizzonte di 12+ mesi
  • Hai un amministratore di sistema interno o un istinto da sysadmin
  • Tailscale Premium ti sembra costoso ma WireGuard grezzo ti sembra troppo primitivo

Resta su Tailscale Premium se:

  • Il tuo tempo vale più di €100/h
  • Nessun vincolo di conformità specifico
  • Preferisci spendere quei 2-3 giorni sul tuo prodotto

Resta su WireGuard grezzo se:

  • Sei sotto i 5 nodi, configurazione semplice, umore di apprendimento
  • Hub-and-spoke si adatta a tutti i tuoi casi d'uso

Headscale è la risposta più sottovalutata nell'ecosistema VPN self-hosted nel 2026. Fa il 90% del lavoro di Tailscale, su un VPS Contabo a €4.99/mese, con piena sovranità dei dati. Il prezzo è 2-3 giorni di configurazione e un riflesso da sysadmin — che si ripaga in meno di 2 mesi a 10 utenti.

Approfondimenti

Fonti e riferimenti:


Pubblicato il 2026-06-05. Analisi di produzione basata su un'istanza Headscale 0.24 implementata su un VPS Contabo S Norimberga a febbraio 2026 (12 nodi, 5 utenti, backend PostgreSQL, OIDC tramite Authentik). Costi da maggio 2026 prezzi Contabo e Tailscale — verifica prima di decidere. Le prestazioni e i risparmi reali dipendono dalla dimensione del team e dall'infrastruttura esistente.

Promemoria: Headscale, Tailscale e l'hosting VPN sono perfettamente legali nell'UE, negli Stati Uniti, in Canada e nella maggior parte dei paesi democratici. VPNSmith pubblica questo contenuto a scopo educativo.

★ Datacenter GDPR di Norimberga · ✓ IPv4 dedicato incluso · 200+ Mbps garantiti

Self-host your VPN on your own VPS → ContaboFull root access · public IPv4 · pick your region