Così come già da tempo accade con la virtualizzazione di server e client, l’approccio di tipo Software Defined alle reti ha come scopo la realizzazione di architetture del tutto trasparenti rispetto all’hardware sottostante. ZeroTier è una piattaforma recente, ma molto promettente per la realizzazione di Software-Defined Network (SDN) nel cloud. 

L’idea alla base base di ZeroTier è molto semplice: realizzare reti locali virtuali con estensione geografica illimitata utilizzando Internet come vettore di comunicazione, il tutto protetto da cifratura e comodamente gestibile dalla dashboard del proprio account. L’intero progetto è Open Source e l’utilizzo è gratuito fino a un massimo di 10 client per reti di tipo privato, l’upgrade oltre questo limite prevede il pagamento di 4 dollari al mese. Le reti pubbliche, invece, sono gratuite senza limiti di host.

Per utilizzare ZeroTier sono necessari due semplici passaggi: creare un account su zerotier.com, e installare l’apposito client software.

ztier register

Noi abbiamo provato la release ZeroTier 1.1.2.

Anatomia di una SDN

Da un punto di vista concettuale, ZeroTier realizza reti Peer-to-Peer (P2P) nelle quali il traffico fluisce direttamente tra le macchine partecipanti, in questo modo i Root Server (ovvero i server utilizzati da ZeroTier come infrastruttura di gestione) svolgono il solo compito di inizializzare le connessioni. Il vantaggio principale è la resistenza ai guasti: se un server diventa irraggiungibile, i client appartenenti a reti già attive possono continuare a comunicare senza downtime. Naturalmente sarà impossibile attivare nuove reti o scollegarsi da quelle funzionanti finché non sia tornato attivo il servizio. In questo senso l’architettura di ZeroTier è molto robusta, è composta infatti da server distribuiti presso tre diversi provider sparsi in quattro continenti.

L’intero funzionamento delle reti è basato su due elementi chiave: l’identificativo esadecimale univoco del singolo dispositivo (composto da 10 caratteri) e l’identificativo esadecimale univoco della singola rete (composto invece da 16 caratteri). Ogni endpoint possiede una coppia di chiavi pubblica/privata che viene generata in fase di inizializzazione. Dalla chiave pubblica viene poi calcolato l’ID tramite una apposita funzione e l’elevatissimo numero di possibili combinazioni rende molto difficile la presenza di collisioni. L’identificativo della rete è invece composto dall’ID del controller di rete primario (sul Root Server) a cui viene aggiunto l’ID della rete n-esima.

Reti, indirizzi e sicurezza

Un singolo client può essere collegato a più reti, in questo senso il limite è legato al sistema operativo utilizzato, ad esempio su Mac il massimo consentito è 32, mentre su Windows (successivi a XP) e Linux è potenzialmente illimitato. Importante specificare che solo il traffico con Indirizzi IP appartenenti alla classe della rete virtuale verrà instradato lungo la stessa, mentre il rimanente continua a fluire tramite il default gateway dell’host. 
Aspetto fondamentale nella realizzazione di una rete che utilizzi Internet come vettore è la sicurezza dei dati in transito e con ZeroTier tutto il traffico viene cifrato end-to-end. La chiave privata viene memorizzata sul dispositivo, mentre le chiavi pubbliche sono utilizzate per negoziare la connessione e cifrarne il contenuto con una cifratura a 256 bit di tipo Salsa20 con autenticazione Poly1305.

L’accesso alle LAN virtuali private è permesso dalla conoscenza del Network ID (praticamente impossibile da “indovinare” per come è strutturato) e da certificati emessi e verificati dal network controller della rete stessa e successivamente scambiati tra i Peer che partecipano alla rete.

La gestione lato Web

Dalla dashboard del proprio account è facile accedere alla voce di menu Networks da cui si gestiscono le reti e la prima cosa che si nota è l’immediata assegnazione ad ognuna dell’identificativo alfanumerico.

ztier dashboard ok

Dentro il pannello di configurazione della singola rete è possibile aggiungere un nome e una descrizione, decidere se renderla pubblica, scegliere il tipo di assegnazione per gli indirizzi IP (sia v4 che v6) e il limite di dispositivi abilitati per il Multicast. Interessanti sono le opzioni di gestione degli IP: la modalità consigliata è quella ZeroTier managed che permette di scegliere tra 24 classi di indirizzi preconfigurati, ma è possibile scegliere Unmanaged e poi procedere manualmente alla configurazione del DHCP e delle rotte.

ztier dashboard newnetwork okz

La colonna di destra della pagina di gestione è invece dedicata ai membri della rete. Da qui è possibile visualizzare il numero di client collegati, la configurazione attuale ed e si possono aggiungerne di nuovi o rimuovere quelli esistenti. Fondamentali i due flag Allowed e Bridge: il primo definisce se il client specifico, oltre a essere collegato alla rete, è anche attivo e raggiungibile, mentre il secondo attiva la modalità bridged che fa fluire tutto il traffico dell’host sulla rete ZeroTier. Immancabile il tasto Add Device necessario se si vuole aggiungere manualmente un client specifico.

ztier dashboard newnetworksok

Segnaliamo la presenza di una apposita voce di menu API nella propria area personale, da cui si possono consultare le API disponibili e accedere alla relativa documentazione. La creazione dei token di autorizzazione si trova invece nella pagina iniziale di gestione account dove si possono indicare anche i metodi di pagamento attivi in caso di utilizzo superiore ai 10 host.

ZeroTier Client 

android

L’altro tassello necessario per la realizzazione della rete virtuale è il client. Quest’ultimo è disponibile gratuitamente per le principali piattaforme software desktop (Windows, Linux, Machintosh) e hadware (Intel x86, x86_64 e ARM) sia in versione precompilata, sia accedendo direttamente al codice sorgente. E' utilizzabile per implementazioni ad-hoc (senza bisogno di licenza in caso di realizzazioni Open Source, ma che richiede un pagamento per l’implementazione in prodotti commerciali). L’App per Android è invece presente sul Play Store e costa 5,61 euro.

Una volta scaricato e installato (lo abbiamo provato su Windows 7 e 8.1 e Ubuntu 14.04) ci si trova di fronte a un piccolo pannello dove, nella parte inferiore, si trova il form per l’inserimento dell’ID della rete a cui vogliamo collegarci. A questo punto basta un click sul tasto Join per entrare a far parte della LAN virtuale.

ztier client joined ok

Come visibile nell’immagine, il pannello presenta tutte le informazioni fondamentali: ID e nome della rete, stato attuale del client, indirizzi IP e MAC. Con il tasto Leave è possibile sganciare il dispositivo dalla rete di appartenenza.

Naturalmente nel caso in cui il client fosse contemporaneamente collegato a più LAN virtuali, appariranno tutte le informazioni relative.

Client Linux

Su macchine Linux l’approccio è molto simile, ma naturalmente è necessario utilizzare la riga di comando per gestire la connessione. Una volta scaricato il pacchetto adatto alla propria distribuzione (nel nostro caso .deb a 64 bit) è possibile installarlo da prompt o, utilizzando il gestore dei pacchetti da interfaccia grafica. Nel percorso /var/lib/zerotier-one/ viene creata una cartella contenente la coppia di chiavi pubblica/privata ed è necessario rendere la cartella scrivibile all’utente in uso prima di poter lanciare il client.
Per avviare la connessione a una determinata rete è sufficiente digitare il comando

[email protected]: zerotier-cli join [ID-rete]

In risposta si ottiene una conferma del join e da quel momento è possibile effettuare ping e interagire con le altre macchine appartenenti al gruppo.

zerotier join ubuntu ok

Oltre al Join sono disponibili alcuni semplici comandi per vedere lo stato attuale della rete, gli altri Peer connessi, le reti collegate etc.

Utilizzo e impressioni

Una volta configurato e attivato ZeroTier su tutti i client, abbiamo effettuato alcune prove di interazione tra gli host per verificarne il corretto funzionamento. Prima di tutto è stato possibile lanciare dei test di ping tra tutte le macchine indistintamente, utilizzando gli indirizzi IP “Managed” (così sono chiamati nella dashboard gli indirizzi locali assegnati ai singoli client) registrando tempi di risposta variabili tra 2ms nel caso di macchine collegate con ZeroTier su rete LAN fisica, e circa 150-200ms tra client geograficamente distanti e su reti fisiche differenti.

Altro test è stato il collegamento in desktop remoto tra macchine Windows appartenenti a LAN fisiche differenti: anche in questo caso non abbiamo riscontrato nessun problema di connessione e l’utilizzo della sessione RDP è stato paragonabile a quello realizzato, ad esempio, utilizzando OpenVPN. A ulteriore verifica della effettiva trasparenza di ZeroTier rispetto alla connettività fisica sottostante abbiamo effettuato delle prove di trasferimento file, registrando valori in upload e download molto vicini al limite fisico della connessione a Internet dei client in uso.

zerotier transfer3 ok

Unico problema riscontrato durante i test di configurazione e utilizzo è stata una discordanza tra la configurazione del client e quella visibile dalla dashboard. In alcune situazioni infatti, il client risultava correttamente connesso e in attesa di autorizzazione, mentre dal pannello di gestione non solo non era possibile abilitarlo, ma non era nemmeno visibile nella lista dei membri. Problema poi risolto aggiungendo manualmente il client alla dashboard tramite la funzione Add Device.

L'autore

Lorenzo Bedin

Laureato in Ingegneria delle Telecomunicazioni, svolge l'attività di libero professionista come consulente IT, dopo un periodo di formazione e esperienza in azienda nel ruolo di sistemista Windows e Linux. Si occupa di soluzioni hardware, siti web e virtualizzazione.