EnglishРусский Map
Yggdrasil Network

Сеть Yggdrasil как встраиваемая Go-библиотека

title
Сеть Yggdrasil как встраиваемая Go-библиотека
type
summary
summary
Руководство asciimoth по встраиванию mesh-сети Yggdrasil в Go-приложения через fork: Core, VTun, транспорты и autopeering без запуска демона
tags
networking, go, mesh, circumvention
created
2026-05-10
updated
2026-05-10
lang
ru
translation_of
yggdrasil-embedded-go
source_updated
2026-05-10
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

asciimoth поддерживает fork проекта yggdrasil-go (официальный yggdrasil-network/yggdrasil-go, по их словам, "не особо удобен" из-за протекающих абстракций и сильной связности). Fork asciimoth/ygg реорганизует кодовую базу в полноценную библиотеку под названием ygglib, оставляя отдельный демон yggd для привычных сценариев использования. В статье разбирается встраивание ygglib в другое Go-приложение.

Архитектура делится на два чётких уровня:

Несущая сеть (carrier network) - базовый транспорт, через который Yggdrasil связывается с пирами. Представлена интерфейсом Network; реализации включают стандартную сеть ОС, SOCKS-прокси, in-memory loopback (для тестов) или даже другую сеть Yggdrasil.

IPv6-сеть Yggdrasil - оверлей. Каждый узел получает стабильный IPv6-адрес, вычисленный из его открытого ключа. После установки соединения поверх могут работать обычные TCP-, UDP- и HTTP-приложения.

Минимальное встраивание состоит из четырёх частей:

  • core.Core - маршрутизатор, генерирует IPv6-адрес узла из его сертификата
  • transport.Manager - регистрирует реализации транспорта (tcp://, tls://, нестандартные схемы вроде metered+tcp://) и сопоставляет шаблоны хостов (*.onion, 127.0.0.1) с конкретными несущими сетями
  • vtun.VTun - встроенный userspace-стек TCP/IP, преобразующий поток L3-пакетов из Core в интерфейсы net.Listener / net.Conn, благодаря чему стандартный http.Client и подобные инструменты работают напрямую
  • autopeer.Manager + multicast.Multicast - обнаружение через списки публичных пиров и link-local discovery, заменяющее ручные вызовы CallPeer

С точки зрения эксплуатации архитектура менеджера транспортов выглядит наиболее интересной. Можно направлять *.onion через Tor, *.i2p через I2P, полностью блокировать *.loki, а всё остальное пускать через сеть ОС - и всё это в конфигурации менеджера, причём сопоставления работают динамически (смена сети закрывает затронутые listener'ы и соединения, чтобы новые использовали уже новую сеть). Это позволяет одному узлу Yggdrasil служить пользовательским mesh-слоем поверх разнородного набора несущих сетей.

Именно VTun делает встраивание по-настоящему аккуратным. Официальный демон создаёт системный TUN-интерфейс (требуются права root, реализация зависит от ОС). Userspace-стек TCP/IP из fork'а (построенный на gonnect-netstack/vtun) держит всё внутри процесса - никакого взаимодействия с ядром, никакого повышения привилегий, а порты выделяются внутри встроенного стека. Платой за это становятся производительность (стек в userspace никогда не сравнится с XDP_REDIRECT) и дополнительная память. Выигрыш же в том, что узлом Yggdrasil может стать приложение на Electron, клиент Matrix или решение, работающее во вкладке браузера.

Почему это важно в 2026 году: картина вокруг russia-vpn-bypass-state-2026-04 во многом связана с сетевыми технологиями в userspace - bypassing-dpi-with-ebpf, рассинхронизация TLS в userspace, а теперь и mesh-сети, которым не нужны интерфейсы на уровне системы. Встраиваемый mesh-примитив - это ещё один инструмент в арсенале serverless-relay-transport и средств обхода блокировок. Но он полезен и для обычных распределённых систем, где требуются стабильные адреса, привязанные к идентичности узла, без отдельного слоя координации.

Ссылки: yggdrasil-network, asciimoth-ygg, domain-fronting, bypassing-dpi-with-ebpf, serverless-relay-transport.