Después de más de dos años de desarrollo, se ha publicado el lanzamiento de la implementación de referencia del protocolo Yggdrasil 0.5, que permite desplegar una red privada descentralizada IPv6 separada sobre la red global convencional, para la protección de la privacidad, utilizando cifrado de extremo a extremo. En la red Yggdrasil se pueden usar cualquier aplicación existente que soporte IPv6. La implementación está escrita en Go y se distribuye bajo la licencia LGPLv3. Soporta plataformas Linux, OpenWRT, Windows, macOS, FreeBSD, OpenBSD, VyOS y Ubiquiti EdgeRouter.
Yggdrasil desarrolla un nuevo concepto de enrutamiento para crear una red global descentralizada, en la cual los nodos pueden conectarse tanto directamente entre sí en modo de red mesh (por ejemplo, a través de Wi-Fi o Bluetooth), como interactuar sobre redes IPv6 o IPv4 existentes (red sobre red). Una característica distintiva de Yggdrasil es la autoorganización del funcionamiento, que no requiere configuración explícita del enrutamiento; la información sobre rutas se calcula basado en la ubicación de un nodo en relación con otros nodos. Los dispositivos se dirigen a través de una dirección IPv6 estándar, que no cambia al mover el nodo (Yggdrasil utiliza un rango de direcciones no utilizadas 0200::/7).
Toda la red Yggdrasil se considera no como una unión de subredes dispares, sino como un único árbol estructurado, que tiene una "raíz" y cada nodo tiene un padre y uno o varios descendientes. Esta estructura arbórea permite construir una ruta al nodo de destino en relación con el nodo de origen, utilizando un mecanismo de "localizador" que determina el camino óptimo al nodo desde la raíz. La información sobre el árbol se distribuye entre los nodos y no se almacena de manera centralizada.
Para protegerse del análisis de tráfico, se utiliza cifrado de extremo a extremo en la red (los nodos de tránsito no pueden determinar el contenido), pero no se garantiza la anonimidad; al conectarse a través de Internet, los nodos pares con los que se interactúa directamente pueden determinar la dirección IP real, por lo que se sugiere conectar nodos a través de Tor o I2P para mayor anonimidad.
A pesar de que el proyecto está en fase de desarrollo alfa, ya es lo suficientemente estable para su uso diario, aunque no garantiza la compatibilidad retroactiva entre versiones. Para Yggdrasil, la comunidad mantiene un conjunto de servicios que incluye una plataforma para alojar contenedores de Linux para de hospedaje sus sitios, un motor de búsqueda YaCy, un servidor de comunicación Matrix, un servidor IRC, DNS, un sistema VoIP, un tracker de BitTorrent, un mapa de puntos de conexión, una puerta de enlace a IPFS y un proxy para acceder a las redes Tor, I2P y clearnet.
En la nueva versión:
- Se ha agregado la posibilidad de autenticar la conexión a través de peers usando una contraseña. La contraseña se define mediante el parámetro «password=», por ejemplo, «tls://a.b.c.d:12345?password=123456abcdef».
- Se ha añadido la posibilidad de usar el protocolo QUIC, basado en UDP, para interactuar con peers. Para usar QUIC, se debe especificar la URI schema quic:// en las directivas Listen y Peers, pero el soporte para QUIC aún no ha sido tan bien probado como TCP y TLS.
- Se ha añadido la opción PrivateKeyPath que permite almacenar la clave privada en formato PEM, separada del archivo de configuración principal. Para exportar la clave a un archivo separado, se puede utilizar la opción «-exportkey».
- Se ha implementado un nuevo esquema de enrutamiento que no es compatible con versiones anteriores (los nodos con Yggdrasil 0.5 no pueden interactuar con hosts basados en Yggdrasil 0.4), pero que resuelve la mayoría de los problemas de estabilidad y escalabilidad presentes en la rama 0.4, además de reducir significativamente el consumo de memoria y disminuir el tráfico en ausencia de actividad de red.
En la nueva implementación, se utilizan estructuras probabilísticas de filtro de Bloom para rastrear conexiones y nodos. La tabla hash distribuida (DHT) ya no se utiliza para el intercambio de información de enrutamiento y la vinculación de claves públicas en la red jerárquica.
Para mantener la coherencia local y reducir la dependencia de las rutas a los nodos raíz, los nodos ahora transmiten por separado información sobre cada enlace, que se rastrea en estructuras CRDT. En lugar de enrutamiento de origen, se aplica un enrutamiento basado en un algoritmo codicioso (las solicitudes se dirigen al nodo vecino más cercano).
Los formatos utilizados para la negociación de conexiones y el envío multicast han sido revisados para mejorar la escalabilidad. El código de gestión de conexiones ha sido reformulado para un seguimiento más confiable del estado de los pares. Se ha asegurado el seguimiento separado de los intervalos entre las reconexiones para cada par configurado.
Para la detección de fallos, en lugar de enviar periódicamente solicitudes de keepalive aisladas, se emplean mensajes de confirmación de recepción de tráfico, que permiten eliminar el tráfico durante la inactividad de la red (lo que, por ejemplo, reduce el consumo de energía en dispositivos móviles al eliminar el tráfico en modo inactivo).
Fuente: opennet.ru
