Сеть Yggdrasil как встраиваемая Go-библиотека
- title
- Сеть Yggdrasil как встраиваемая Go-библиотека
- type
- summary
- summary
- Руководство asciimoth по встраиванию mesh-сети Yggdrasil в Go-приложения через fork: Core, VTun, транспорты и autopeering без запуска демона
- parent
- yggdrasil-network
- 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.