Qualche giorno fa abbiamo parlato qui sul blog di Firezone, un'ottima utility per la creazione di server VPN basati su WireGuard.
E ora, in questa occasione, parleremo di un'utilità molto simile chiamata "Headscale", un progetto sviluppato come implementazione open-source del componente server VPN Tailscale , che consente di creare VPN simili a Tailscale presso la propria sede, senza essere vincolati a servizi di terze parti.
Tailscale consente di combinare un numero arbitrario di host geograficamente distribuiti in una rete , strutturata come una rete mesh, in cui ogni nodo comunica con gli altri nodi direttamente (P2P) o tramite nodi vicini, senza trasmettere traffico attraverso server esterni centralizzati del provider VPN.
Oltre a supportare il controllo degli accessi e delle rotte basato su ACL e a consentire la creazione di canali di comunicazione in condizioni di utilizzo di Network Address Translation (NAT), il sistema supporta i meccanismi STUN, ICE e DERP (analoghi a TURN, ma basati su HTTPS). Se il canale di comunicazione tra determinati nodi viene bloccato, la rete può reindirizzare il traffico attraverso altri nodi.
Tailscale si differenzia dal progetto Nebula , anch'esso progettato per creare reti VPN distribuite con routing a maglia, utilizzando il protocollo Wireguard per organizzare il trasferimento dati tra i nodi, mentre Nebula si avvale di sviluppi del progetto Tinc, che utilizza l'algoritmo AES-256 per crittografare i pacchetti GSM (Wireguard utilizza la crittografia ChaCha20, che nei test ha dimostrato prestazioni e reattività superiori).
Un altro progetto simile, Innernet, è in fase di sviluppo separato e utilizza anch'esso il protocollo Wireguard per lo scambio di dati tra i nodi. A differenza di Tailscale e Nebula, Innernet utilizza un diverso sistema di separazione degli accessi basato su ACL; le etichette non sono collegate ai singoli nodi e sottoreti per separare e isolare diversi intervalli di indirizzi IP, come avviene nelle reti internet convenzionali.
Inoltre, Innernet utilizza Rust invece di Go e vale la pena ricordare che Innernet 1.5 con supporto NAT traversal migliorato è stato rilasciato pochi giorni fa. Esiste anche un progetto Netmaker, che permette di connettere reti con diverse topologie utilizzando Wireguard, ma il suo codice è fornito sotto la SSPL (Server-Side Public License), che non è aperta per la presenza di requisiti discriminatori.
Tailscale viene distribuito con un modello freemium, offrendo accesso gratuito ai singoli utenti e accesso a pagamento per aziende e team. I componenti client di Tailscale, ad eccezione delle applicazioni grafiche per Windows e macOS, sono sviluppati come progetti open source sotto licenza BSD.
Il software server di Tailscale, esternalizzato e utilizzato per autenticare i nuovi client , coordinare la gestione delle chiavi e organizzare la comunicazione tra i nodi, è proprietario. Il progetto Headscale affronta questo problema e fornisce un'implementazione open source indipendente dai componenti server di Tailscale.
Headscale si occupa dello scambio di chiavi pubbliche tra i nodi e gestisce anche l'assegnazione degli indirizzi IP e la distribuzione delle tabelle di routing tra i nodi.
Nella sua configurazione attuale, Headscale implementa tutte le funzionalità principali di un server di gestione, ad eccezione del supporto per MagicDNS e Smart DNS. Nello specifico, supporta la registrazione dei nodi (anche tramite web), l'adattamento della rete per aggiungere o rimuovere nodi, il subnetting tramite namespace (che consente la creazione di una VPN per più utenti), l'organizzazione dell'accesso condiviso dei nodi a subnet in namespace diversi, il controllo del routing (inclusa l'assegnazione di nodi in uscita per accedere al mondo esterno), l'accesso condiviso tramite ACL e l'esecuzione DNS.
Il codice Headscale è scritto in Go ed è distribuito sotto licenza BSD. Il progetto è sviluppato da Juan Font dell'Agenzia spaziale europea.
Infine, se siete interessati ad approfondire l'argomento, potete trovare maggiori dettagli al seguente link.