După mai bine de doi ani de dezvoltare, a fost lansată versiunea de referință a protocolului Yggdrasil 0.5, care permite desfășurarea unei rețele IPv6 private, descentralizate, deasupra unei rețele globale obișnuite, pentru protecția confidențialității, utilizând criptarea end-to-end. În rețeaua Yggdrasil pot fi folosite orice aplicații existente care suportă IPv6. Implementarea este scrisă în limbajul Go și este distribuită sub licența LGPLv3. Sunt susținute platformele Linux, OpenWRT, Windows, macOS, FreeBSD, OpenBSD, VyOS și Ubiquiti EdgeRouter.
Yggdrasil dezvoltă o nouă concepție de rutare pentru a crea o rețea descentralizată globală, în care nodurile se pot conecta atât direct între ele în mod mesh (de exemplu, prin Wi-Fi sau Bluetooth), cât și interacționa deasupra rețelelor existente IPv6 sau IPv4 (o rețea peste o altă rețea). O caracteristică distinctivă a Yggdrasil este auto-organizarea funcționării, fără a necesita configurări explicite de rutare — informația despre rute este calculată pe baza poziției nodului în rețea față de alte noduri. Dispozitivele sunt adresate printr-o adresă IPv6 obișnuită, care nu se schimbă în cazul mutării nodului (în Yggdrasil este utilizat un interval nefolosit de adrese 0200::/7).
Întreaga rețea Yggdrasil este văzută nu ca o unire a subrețelelor disparate, ci ca un singur arbore structurat, care are o singură „rădăcină”, iar fiecare nod are un părinte și unul sau mai mulți descendenți. O astfel de structură pe arbor permite construirea unei rute către nodul de destinație, în raport cu nodul sursă, utilizând mecanismul „locator”, care determină calea optimă către nod de la rădăcină. Informația despre arbore este distribuită între noduri și nu este stocată centralizat.
Pentru a proteja împotriva analizei traficului în rețea, se aplică criptarea end-to-end (nodurile de tranzit nu pot determina conținutul), dar anonimatul nu este garantat — atunci când se conectează la internet, nodurile peer-to-peer, cu care se interacționează direct, pot determina adresa IP reală, de aceea pentru anonimat se recomandă conectarea nodurilor prin Tor sau I2P.
În ciuda faptului că proiectul se află în stadiul de dezvoltare alfa, este suficient de stabil pentru utilizarea zilnică, dar nu garantează compatibilitatea inversă între versiuni. Comunitatea Yggdrasil susține un set de servicii, inclusiv o platformă pentru găzduirea containerelor Linux pentru de găzduire site-urile sale, un motor de căutare YaCy, un server de comunicație Matrix, un server IRC, DNS, un sistem VoIP, un tracker BitTorrent pentru hărțile punctelor de conectare, un gateway pentru IPFS și un proxy pentru accesarea rețelelor Tor, I2P și clearnet.
În noua versiune:
- A fost adăugată posibilitatea autentificării conexiunii către pirați utilizând o parolă. Parola se stabilește prin parametrul „password=”, de exemplu, „tls://a.b.c.d:12345?password=123456abcdef”.
- A fost adăugată posibilitatea de a utiliza protocolul QUIC, bazat pe UDP, pentru interacțiunea cu pirați. Pentru a utiliza QUIC, trebuie specificată schema URI quic:// în directivele Listen și Peers, dar suportul QUIC nu a fost testat încă atât de bine ca TCP și TLS.
- A fost adăugată opțiunea PrivateKeyPath, care permite stocarea cheii private în format PEM, separat de fișierul principal de configurație. Pentru a exporta cheia într-un fișier separat, se poate folosi opțiunea „-exportkey”.
- A fost implementată o nouă schemă de rutare, care nu este compatibilă cu versiunile anterioare (nodelor cu Yggdrasil 0.5 nu pot interacționa cu gazdele bazate pe Yggdrasil 0.4), dar care rezolvă majoritatea problemelor de stabilitate și scalabilitate prezente în ramura 0.4, reducând semnificativ, de asemenea, consumul de memorie și traficul în absența activității de rețea.
În noua implementare, pentru urmărirea relațiilor și nodurilor se utilizează o structură probabilistică numită Filtru Bloom. Tabelul hash distribuit (DHT) nu mai este utilizat pentru schimbul de date despre rutare și asocierea cheilor publice în rețeaua de tip arbore.
Pentru a menține coerența locală și a reduce dependența de rutele către nodurile rădăcină, nodurile acum transmit separat informații despre fiecare legătură, care sunt urmărite în structuri CRDT. În loc de rutarea de la sursă, se folosește o rutare bazată pe algoritmi lacomi (cererile sunt direcționate către cel mai apropiat nod vecin).
Formatele utilizate pentru negocierea conexiunilor și retransmiterea multicast au fost revizuite pentru o mai bună scalabilitate. Codul pentru gestionarea interconexiunilor a fost refăcut pentru o urmărire mai fiabilă a stării părților. S-a asigurat o monitorizare separată a intervalelor dintre reconexiunile repetate pentru fiecare peer setat.
Pentru detectarea defecțiunilor, în locul trimiterii periodice a solicitărilor keepalive izolate, sunt utilizate mesaje cu confirmare a primirii traficului, ceea ce permite eliminarea traficului în cazul inactivității în rețea (ceea ce, de exemplu, reduce consumul de energie pe dispozitivele mobile prin excluderea traficului în modul gol).
Sursa: opennet.ro
