Выпуск Yggdrasil 0.5, реализации приватной сети, работающей поверх интернета
После более двух лет разработки опубликован выпуск эталонной реализации протокола Yggdrasil 0.5, позволяющего поверх обычной глобальной сети развернуть отдельную децентрализованную приватную IPv6-сеть, для защиты конфиденциальности в которой применяется сквозное шифрование. В сети Yggdrasil могут использоваться любые существующие приложения, поддерживающие IPv6. Реализация написана на языке Go и распространяется под лицензией LGPLv3. Поддерживаются платформы Linux, Windows, macOS, FreeBSD, OpenBSD, VyOS и Ubiquiti EdgeRouter.
Yggdrasil развивает новую концепцию маршрутизации для создания глобальной децентрализованной сети, узлы в которой могут соединяться как напрямую между собой в режиме mesh-сети (например, через Wi-Fi или Bluetooth), так и взаимодействовать поверх существующих IPv6 или IPv4 сетей (сеть поверх сети). Отличительной особенностью Yggdrasil является самоорганизация работы, не требующая явной настройки маршрутизации — информация о маршрутах рассчитывается, отталкиваясь от расположения узла в сети относительно других узлов. Устройства адресуются через обычный адрес IPv6, который не меняется в случае перемещения узла (в Yggdrasil задействован неиспользуемый диапазон адресов 0200::/7).
Вся сеть Yggdrasil рассматривается не как объединение разрозненный подсетей, а как единое структурированное остовное дерево, у которого имеется один «корень», а каждый узел имеет одного родителя и одного или нескольких потомков. Подобная древовидная структура позволяет построить маршрут к узлу назначения, относительно узла источника, используя механизм «locator», определяющий оптимальный путь к узлу от корня. Информация о дереве распределяется между узлами и не хранится централизованно.
Для защиты от анализа трафика в сети применяется сквозное шифрование (транзитные узлы не могут определить содержимое), но не гарантируется анонимность — при подключении через интернет, одноранговые узлы, с которыми осуществляется прямое взаимодействие, могут определить реальный IP-адрес, поэтому для анонимности предлагается подключать узлы через Tor или I2P.
Несмотря на нахождение проекта на стадии альфа-разработки, он уже достаточно стабилен для ежедневного использования, но не гарантирует обратную совместимость между выпусками. Для Yggdrasil сообществом поддерживается набор сервисов, включая платформу для размещения Linux-контейнеров для хостинга своих сайтов, поисковую систему YaCy, коммуникационный сервер Matrix, IRC-сервер, DNS, систему VoIP, BitTorrent-трекер карту точек подключения, шлюз в IPFS и прокси для обращения к сетям Tor, I2P и clearnet.
В новой версии:
Добавлена возможность аутентификации подключения к пирам с использованием пароля. Пароль задаётся через параметр «password=», например, «tls://a.b.c.d:12345? password=123456abcdef».
Добавлена возможность использования для взаимодействия с пирами протокола QUIC, основанного на UDP. Для использования QUIC следует указать URI-схему quic:// в директивах Listen и Peers, но поддержка QUIC пока не так хорошо протестирована, как TCP и TLS.
Добавлена опция PrivateKeyPath позволяющая хранить приватный ключ в формате PEM, отдельно от основного конфигурационного файла. Для экспорта ключа в отдельный файл можно использовать опцию »-exportkey».
Реализована новая схема маршрутизации, обратно не совместимая с прошлыми версиями (узлы с Yggdrasil 0.5 не могут взаимодействовать с хостами на базе Yggdrasil 0.4), но решающая большую часть присутствовавших в ветке 0.4 проблем со стабильностью и масштабируемостью, а также значительно снижающая потребление памяти и снижающая трафик при отсутствии сетевой активности.
В новой реализации для отслеживания связей и узлов используются вероятностная структура Фильтр Блума. Распределённая хэш-таблица (DHT) больше не применяется для обмена данными о маршрутизации и привязки открытых ключей в древовидной сети.
Для поддержания локальной согласованности и снижения зависимости от маршрутов к корневым узлам, узлы теперь отдельно передают информацию о каждом линке, которая отслеживается в CRDT-структурах. Вместо маршрутизации от источника применяется маршрутизация на основе жадного алгоритма (запросы направляются ближайшему соседнему узлу).
Форматы, используемые при согласовании соединений и многоадресной рассылке, переработаны для лучшей расширяемости. Код обработки связей переделан для более надёжного отслеживания состояния пиров. Обеспечено раздельное отслеживание интервалов между повторными соединениями для каждого настроенного пира.
Для обнаружения сбоев вместо периодической отправки обособленных keepalive-запросов задействованы сообщения с подтверждением получения трафика, которые позволяют избавиться от трафика при сетевой неактивности (что, например, снижает энергопотребление на мобильных устройствах из-за исключения трафика в холостом режиме).
Источник: http://www.opennet.ru/opennews/art.shtml? num=60030
© OpenNet