Nach über zwei Jahren Entwicklung wurde die Referenzimplementierung des Yggdrasil-Protokolls 0.5 veröffentlicht. Dieses Protokoll ermöglicht es, ein separates, dezentrales privates IPv6-Netzwerk über das gewöhnliche globale Netz zu schalten, um die Privatsphäre zu schützen. In diesem Netzwerk wird Ende-zu-Ende-Verschlüsselung verwendet. Alle vorhandenen Anwendungen, die IPv6 unterstützen, können im Yggdrasil-Netzwerk eingesetzt werden. Die Implementierung ist in Go geschrieben und wird unter der LGPLv3-Lizenz vertrieben. Unterstützte Plattformen sind Linux, OpenWRT, Windows, macOS, FreeBSD, OpenBSD, VyOS und Ubiquiti EdgeRouter.
Yggdrasil entwickelt ein neues Konzept der Routenführung zur Schaffung eines globalen dezentralisierten Netzwerks, in dem Knoten sowohl direkt über ein Mesh-Netzwerk (beispielsweise über WLAN oder Bluetooth) miteinander verbunden werden können, als auch über bestehende IPv6- oder IPv4-Netze interagieren (Netzwerk über Netzwerk). Ein herausragendes Merkmal von Yggdrasil ist die Selbstorganisation des Betriebs, die keine explizite Konfiguration der Routenführung erfordert – die Informationen über die Routen werden basierend auf der Position des Knotens im Netzwerk im Verhältnis zu anderen Knoten berechnet. Geräte werden über eine reguläre IPv6-Adresse angesprochen, die sich nicht ändert, wenn sich der Knoten bewegt (in Yggdrasil wird der ungenutzte Adressbereich 0200::/7 verwendet).
Das gesamte Yggdrasil-Netzwerk wird nicht als Zusammenstellung isolierter Teilnetze betrachtet, sondern als ein einheitlicher, strukturiertes Stammbaum, der einen einzigen "Wurzelknoten" hat. Jeder Knoten hat einen Elternknoten sowie einen oder mehrere Kindknoten. Diese baumartige Struktur ermöglicht es, einen Pfad zum Zielknoten von einem Ausgangspunkt aus zu konstruieren, wobei der "Locator"-Mechanismus den optimalen Weg vom Wurzelknoten bestimmt. Die Informationen über den Baum werden zwischen den Knoten verteilt und nicht zentral gespeichert.
Um den Datenverkehr im Netzwerk vor der Analyse zu schützen, wird End-to-End-Verschlüsselung angewendet (Transitknoten können den Inhalt nicht bestimmen). Anonymität wird jedoch nicht garantiert – bei einer Verbindung über das Internet können Peer-Knoten, mit denen eine direkte Interaktion erfolgt, die echte IP-Adresse identifizieren. Daher wird empfohlen, Knoten über Tor oder I2P zu verbinden, um anonym zu bleiben.
Obwohl sich das Projekt noch in der alpha-Entwicklungsphase befindet, ist es bereits ausreichend stabil für den täglichen Gebrauch, garantiert jedoch keine Abwärtskompatibilität zwischen den Versionen. Für Yggdrasil wird von der Community eine Reihe von Diensten unterstützt, darunter eine Plattform zum Hostingen von Linux-Containern für Hosting ihre Webseiten, die Suchmaschine YaCy, ein Kommunikationsserver Matrix, einen IRC-Server, DNS, ein VoIP-System, einen BitTorrent-Tracker, eine Verbindungspunktkarte, ein Gateway zu IPFS und einen Proxy für den Zugriff auf die Netzwerke Tor, I2P und das clearnet.
In der neuen Version:
- Die Möglichkeit zur Authentifizierung der Verbindung zu Peers mithilfe eines Passworts wurde hinzugefügt. Das Passwort wird über den Parameter „password=“ festgelegt, z. B. „tls://a.b.c.d:12345?password=123456abcdef“.
- Die Nutzung des QUIC-Protokolls auf Basis von UDP zur Kommunikation mit Peers wurde hinzugefügt. Um QUIC zu verwenden, sollte die URI-Schema quic:// in den Direktiven Listen und Peers angegeben werden, jedoch ist die QUIC-Unterstützung derzeit nicht so gut getestet wie TCP und TLS.
- Die Option PrivateKeyPath wurde hinzugefügt, um den privaten Schlüssel im PEM-Format separat von der Hauptkonfigurationsdatei zu speichern. Zum Exportieren des Schlüssels in eine separate Datei kann die Option „-exportkey“ verwendet werden.
- Ein neues Routing-Schema wurde implementiert, das nicht abwärtskompatibel zu früheren Versionen ist (Knoten mit Yggdrasil 0.5 können nicht mit Hosts auf Basis von Yggdrasil 0.4 interagieren). Dieses Schema behebt jedoch die meisten Stabilitäts- und Skalierungsprobleme, die in der Version 0.4 vorhanden waren, und reduziert außerdem den Speicherverbrauch sowie den Datenverkehr bei inaktiver Netzwerknutzung erheblich.
In der neuen Implementierung wird zur Verfolgung von Verbindungen und Knoten eine probabilistische Bloom-Filter-Struktur verwendet. Die verteilte Hash-Tabelle (DHT) wird nicht mehr für den Austausch von Routingdaten und die Bindung von öffentlichen Schlüsseln in einem baumartigen Netzwerk verwendet.
Um die lokale Konsistenz aufrechtzuerhalten und die Abhängigkeit von Routen zu den Wurzelknoten zu verringern, übermitteln Knoten jetzt separat Informationen über jeden Link, die in CRDT-Strukturen verfolgt werden. Anstelle der Quellrouting-Strategie wird ein gieriger Algorithmus zur Routenfindung verwendet (Anfragen werden an den nächstgelegenen Nachbarknoten gerichtet).
Die Formate, die bei der Aushandlung von Verbindungen und Multicast verwendet werden, wurden für eine bessere Skalierbarkeit überarbeitet. Der Code zur Verarbeitung von Verbindungen wurde für eine zuverlässigere Überwachung des Peer-Status neu gestaltet. Eine separate Verfolgung der Intervalle zwischen wiederholten Verbindungen wurde für jeden konfigurierten Peer ermöglicht.
Um Ausfälle zu erkennen, wurden anstelle regelmäßiger, separater Keepalive-Anfragen Bestätigungsnachrichten für den Datenverkehr eingesetzt. Dies reduziert den Datenverkehr bei Netzwerk-Inaktivität, was beispielsweise den Energieverbrauch mobiler Geräte senkt, da der Datenverkehr im Leerlauf ausgeschlossen wird.
Quelle: opennet.ru
