Dopo oltre due anni di sviluppo, è stata pubblicata l'uscita dell'implementazione di riferimento del protocollo Yggdrasil 0.5, che consente di distribuire una rete privata IPv6 decentralizzata sopra la normale rete globale per proteggere la riservatezza, utilizzando la crittografia end-to-end. Nella rete Yggdrasil possono essere utilizzate qualsiasi applicazione esistente che supporti IPv6. L'implementazione è scritta in Go e distribuita sotto la licenza LGPLv3. Sono supportate le piattaforme Linux, OpenWRT, Windows, macOS, FreeBSD, OpenBSD, VyOS e Ubiquiti EdgeRouter.
Yggdrasil sviluppa un nuovo concetto di routing per creare una rete globale decentralizzata, in cui i nodi possono connettersi direttamente tra loro in modalità mesh (ad esempio, tramite Wi-Fi o Bluetooth) e interagire attraverso le reti IPv6 o IPv4 esistenti (una rete sopra l'altra). La caratteristica distintiva di Yggdrasil è l'auto-organizzazione del funzionamento, che non richiede una configurazione esplicita del routing: le informazioni sui percorsi vengono calcolate in base alla posizione del nodo nella rete rispetto agli altri nodi. I dispositivi vengono indirizzati tramite un normale indirizzo IPv6, che non cambia in caso di spostamento del nodo (in Yggdrasil viene utilizzato un intervallo di indirizzi non utilizzato 0200::/7).
L'intera rete Yggdrasil non è vista come un insieme di sottoreti separate, ma come un'unica struttura ad albero radicato, in cui c'è un "radice" e ogni nodo ha un genitore e uno o più discendenti. Questa struttura ad albero consente di costruire un percorso verso il nodo di destinazione, rispetto al nodo sorgente, utilizzando un meccanismo di "locator" che determina il percorso ottimale dal radice al nodo. Le informazioni sull'albero vengono distribuite tra i nodi e non sono memorizzate in modo centralizzato.
Per proteggere dall'analisi del traffico nella rete, è stata implementata la crittografia end-to-end (i nodi di transito non possono determinare il contenuto), ma non viene garantita l'anonimato: collegandosi tramite Internet, i nodi peer-to-peer con cui si interagisce direttamente possono determinare l'indirizzo IP reale. Pertanto, per garantire l'anonimato, si consiglia di collegarsi ai nodi tramite Tor o I2P.
Nonostante il progetto sia ancora in fase di alpha testing, è già abbastanza stabile per un utilizzo quotidiano, ma non garantisce la retrocompatibilità tra le versioni. Per Yggdrasil, è supportato un insieme di servizi dalla comunità, inclusa una piattaforma per l'hosting di container Linux per di hosting i propri siti, un motore di ricerca YaCy, un server di comunicazione Matrix, un server IRC, DNS, un sistema VoIP, un tracker BitTorrent, una mappa dei punti di accesso, un gateway per IPFS e un proxy per accedere alle reti Tor, I2P e clearnet.
Nella nuova versione:
- È stata aggiunta la possibilità di autenticare la connessione ai peer utilizzando una password. La password viene impostata tramite il parametro «password=», ad esempio, «tls://a.b.c.d:12345?password=123456abcdef».
- È stata introdotta la possibilità di utilizzare il protocollo QUIC, basato su UDP, per interagire con i peer. Per utilizzare QUIC si deve specificare il URI con la scheda quic:// nelle direttive Listen e Peers, ma il supporto QUIC non è ancora testato in modo robusto come TCP e TLS.
- È stata aggiunta l'opzione PrivateKeyPath che consente di memorizzare la chiave privata in formato PEM, separatamente dal file di configurazione principale. Per esportare la chiave in un file separato, è possibile utilizzare l'opzione «-exportkey».
- È stata implementata una nuova schema di routing, non retrocompatibile con le versioni precedenti (i nodi con Yggdrasil 0.5 non possono interagire con gli host basati su Yggdrasil 0.4), ma che risolve gran parte dei problemi di stabilità e scalabilità presenti nella branch 0.4, riducendo significativamente il consumo di memoria e il traffico in assenza di attività di rete.
Nella nuova implementazione, per tracciare le relazioni e i nodi viene utilizzata una struttura probabilistica chiamata Bloom Filter. La tabella di hash distribuita (DHT) non è più utilizzata per lo scambio di dati sul routing e l'associazione delle chiavi pubbliche nella rete a struttura ad albero.
Per mantenere la coerenza locale e ridurre la dipendenza dai percorsi verso i nodi radice, i nodi ora trasmettono separatamente informazioni su ciascun link, monitorate in strutture CRDT. Invece del routing da sorgente, si utilizza il routing basato su un algoritmo greedy (le richieste vengono indirizzate al nodo adiacente più vicino).
I formati utilizzati per la gestione delle connessioni e delle trasmissioni multicast sono stati rivisti per una migliore scalabilità. Il codice di gestione delle connessioni è stato rielaborato per un monitoraggio più affidabile dello stato dei peer. È stata garantita una tracciatura separata degli intervalli tra le riconnessioni per ogni peer configurato.
Per la rilevazione dei guasti, invece di inviare periodicamente richieste keepalive isolate, sono stati utilizzati messaggi di conferma del traffico, che consentono di eliminare il traffico in caso di inattività di rete (riducendo, ad esempio, il consumo energetico su dispositivi mobili escludendo il traffico in idle).
Fonte: opennet.ru
