Salta al contenuto principale

Yggdrasil Network: cos’è, come funziona e perché sta cambiando Internet

·1110 parole·6 minuti
ShadowRocket227
Autore
ShadowRocket227
Nato e cresciuto in /dev/random
Yggdrasil Tree

Attualmente esistono numerose reti decentralizzate, ognuna con le proprie caratteristiche e obiettivi; ad esempio, esiste Tor per l’anonimizzazione del traffico, I2P per la creazione di siti irrintracciabili, BitTorrent per la condivisione peer-to-peer di file, etc. Tuttavia, tutti questi network presentano un particolare svantaggio: sono ottimizzati principalmente per specifici casi d’uso (come anonimato o file sharing), il che li rende meno adatti come piattaforma generale per servizi decentralizzati ad alte prestazioni. In altre parole, non esiste una piattaforma P2P valida sul quale costruire servizi decentralizzati senza reinventare la ruota dell’informatica ogni volta.

Sebbene i già citati Tor e I2P offrano naturalmente la possibilità di ospitare servizi nelle rispettive dark net, l’obiettivo di fondo è comunque l’anonimato digitale, obbligando gli utenti a dover affrontare pessime performance di rete; è molto difficle eseguire su questi network applicativi che non siano quasi completamente statici e che necessitino di una discreta quantità di traffico in tempo reale.

Tuttavia, la situazione potrebbe cambiare, grazie alla Yggdrasil Network. Yggdrasil è una rete overlay IPv6 che esegue sopra Internet, completamente decentralizzata e improntata alle prestazioni. Con Yggdrasil è possibile ottenere:

  • Performance vicine a Internet standard
  • Comunicazioni cifrate automaticamente tra tutti i nodi
  • Nessun server centrale vulnerabile
  • Indirizzi statici pubblicamente raggiungibili

Andiamo dunque a vedere come funziona!

Funzionamento della rete Yggdrasil
#

Collegamento alla rete
#

Prima di cominciare, Yggdrasil genera automaticamente una coppia di chiavi asimmetriche, necessaria per cifrare le connessioni, e un indirizzo IPv6 statico derivato dalla chiave pubblica; questo indirizzo vi identificherà permanentemente nella rete, a meno di rigenerare le chiavi crittografiche in futuro. L’indirizzo è assegnato a un’interfaccia di rete virtuale; in questo modo, gli indirizzi Yggdrasil verranno automaticamente gestiti da questa scheda fittizia, mentre i normali indirizzi IP e DNS saranno comunque raggiungibili attraverso lo stack di rete normale del sistema operativo.

Fatto ciò, per connettersi a Yggdrasil bisogna conoscere l’indirizzo di almeno un nodo pubblico: gli indirizzi dei principali sono listati qui. Una volta stabilito il collegamento con uno di questi peer, è possibile comunicare con il resto della rete.

È degno di nota il fatto che il collegamento a un nodo pubblico non introduce centralizzazione, dato che il nodo pubblico è usato solamente per avere un primo punto di appoggio con il quale raggiungere il resto della rete; come vedremo dopo, man mano che Yggdrasil costruisce connessioni, i percorsi di invio e ricezione dei pacchetti diventano sempre più ottimizzati e indipendenti.

Il collegamento al nodo pubblico e in generale tra i vari nodi della rete Yggdrasil può avvenire usando i protocolli TCP, TLS, QUIC e WebSocket. La sicurezza dei messaggi non varia in base al protocollo scelto, poiché il contenuto trasportato (i pacchetti Yggdrasil) sono cifrati a prescindere dal protocollo di trasporto utilizzato; tuttavia, vi consiglio di scegliere nodi con collegamento TLS, in quanto renderà il vostro traffico meno inconsueto e lo farà assomigliare a normali trasferimenti HTTPS.

Raggiungere altri nodi
#

Mesh network scheme

Una volta connessi alla rete, tutti gli indirizzi Yggdrasil sono raggiungibili, indipendentemente se essi siano server esposti pubblicamente o computer privati dietro NAT e firewall. Yggdrasil gestisce automaticamente la consegna di pacchetti attraverso un meccanismo di instradamento decentralizzato; per capire meglio il suo funzionamento, supponiamo di voler semplicemente ottenere la homepage di un sito web su Yggdrasil:

  1. Il browser o strumento di rete che stiamo usando crea un pacchetto HTTP che invia la richiesta GET /index.html (richiede la homepage al sito).
  2. La richiesta viene mandata al nodo iniziale a cui si è connessi, e viene chiesto di inoltrare il messaggio al destinatario.
  3. Il nodo pubblico analizza la lista dei nodi che conosce, e determina qual’è il percorso migliore per inviare la nostra richiesta al server che vogliamo raggiungere. In caso il peer non fosse ancora mai stato contattato dal nostro nodo pubblico, quest’ultimo andrà a propagare la richiesta ad uno dei nodi che conosce, fino a raggiungere qualcuno che conosce il percorso di consegna completo.
  4. Il pacchetto rimbalza tra vari nodi, fino a raggiungere il sito. Quest’ultimo genera la risposta, che percorrendo il percorso di ritorno sfrutta le informazioni apprese durante la richiesta iniziale, eliminando la necessità di ulteriori lookup.

Dopo aver inviato le prime richieste, anche la macchina locale comincerà a prendere conoscenza dei peer esistenti, e nel corso del tempo eviterà di far inoltrare le proprie richieste al nodo pubblico al quale si era connesso inizialmente, raggiungendo in modo più diretto i destinatari.

Nel caso ci fossero NAT o firewall a creare impedimenti di invio o ricezione, Yggdrasil gestisce automaticamente il problema sfruttando i nodi con il quale il peer bloccato ha stabilito delle connessioni in uscita per far pervenire i pacchetti.

Esporre servizi e inoltrare traffico altrui
#

Se anziché raggiungere altri volessimo pubblicare i nostri servizi su Yggdrasil, è sufficiente legare l’applicativo che vogliamo esporre all’interfaccia di Yggdrasil.

Anche l’inoltro del traffico della rete avviene automaticamente; infatti, una volta collegati alla rete con il vostro indirizzo IPv6 univoco, sarete pubblicamente raggiungibili e sfruttabili per instradare il traffico verso altri destinatari. C’è comunque da tenere in considerazione che Yggdrasil evita di far inoltrare traffico a dispositivi non esposti pubblicamente in modo diretto, come ad esempio computer personali e smartphone, perché aggirare NAT e firewall è abbastanza dispendioso per la rete; potreste comunque essere coinvolti nel veicolamento del traffico in casi eccezionali.

Come installare e provare Yggdrasil
#

Se volete provare Yggdrasil, potete trovare un’esaustiva guida all’installazione e configurazione per i vari sistemi operativi sul sito ufficiale del progetto; la piattaforma meglio supportata attualmente è Linux, ed è la scelta più consigliata per provare il programma.

Esistono vari servizi interessanti esposti su Yggdrasil; questi sono alcuni tra i miei preferiti:

  1. BonoboNET: server di chat IRC accessibile via Yggdrasil. Può essere raggiunto all’indirizzo y.irc.bnet.eu.org sulle porte 6667 e 6697.
  2. Yggdrasil Map: è un sito web disponibile sulla rete Yggdrasil che mostra un grafico della rete stessa. Disponibile all’indirizzo http://[21e:e795:8e82:a9e2:ff48:952d:55f2:f0bb]/.
  3. 201:92e3:d9df:4932:ca24:586a:4475:6e8b: è un server Minecraft vanilla in 1.21.1, molto ben curato e con poche restrizioni.

Potete scoprire altri servizi dalla pagina ufficiale del progetto.

Pro e contro di Yggdrasil
#

Pro
#

  • Relativamente semplice da utilizzare
  • Performance elevate rispetto a Tor e I2P
  • Comunicazioni cifrate a prescindere dal protocollo sottostante

Contro
#

  • La rete non anonimizza il traffico (non è fatta per questo, usate Tor e I2P)
  • Introduce comunque latenza extra rispetto a connessioni standard (routing virtuale aggiuntivo)
  • Ci sono ancora pochi nodi attivi e i servizi disponibili non sono numerosi

Conclusioni
#

Yggdrasil è un progetto molto interessante, e nonostante sia stato pubblicato solo pochi anni fa funziona già molto bene. Se più persone si unissero alla rete, ospitando i propri servizi e usando quelli esistenti, la rete diventerebbe più performante e adatta allo sviluppo di applicazioni peer-to-peer distribuite.