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:
| Situazione | Raccomandazione |
|---|---|
| Solo, 1-5 macchine personali | Tailscale Free, non ne vale la pena |
| Piccolo team, 3-5 utenti, orientato all'apprendimento | WireGuard 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 audit | Tailscale Enterprise, l'unico in grado |
| Infrastruttura critica GDPR, bancario, settore pubblico | Headscale + hardening audit |
| Nerd solitario, vuole imparare full stack | Headscale come progetto di apprendimento |
Le due principali ragioni per cui le persone implementano Headscale in produzione:
- 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.
- 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
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_urldeve 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 suheadscale users createe 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:
| Voce | Headscale self-host | Tailscale Premium |
|---|---|---|
| Costo diretto 36m | €180 (VPS Contabo) + €36 backup | $6,480 (10 × $18 × 36m) |
| Configurazione iniziale | 2-3 giorni @ €400/g = €1,000 | 1 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
- Tailscale vs WireGuard self-host: quale nel 2026
- VPN self-host su Contabo: guida completa a WireGuard 2026
- Configurazione passo-passo del VPS Contabo per VPN 2026
- Monitoraggio VPN VPS con Prometheus + Grafana
- Recensione Contabo 2026: feedback onesto di produzione
- Calcolatore dei costi VPN self-hosted — inserisci il numero di utenti e la tariffa oraria per vedere se Headscale, Tailscale o WireGuard grezzo vince sul TCO
- Comparatore VPS interattivo — confronta Contabo, Hetzner e OVH per latenza, RAM e prezzi reali a 24 mesi prima di scegliere il tuo host Headscale
Fonti e riferimenti:
- Headscale — codice sorgente ufficiale e documentazione
- Sito di documentazione di Headscale
- Riferimento sintassi ACL di Tailscale
- Guida alla configurazione del server DERP
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→