Продолжаем статьи про альтернативные сети. Прошлый - здесь
Заходя на страницу какого-нибудь энтузиаста, среди адресов, наравне с уже знакомыми Tor и I2P, вы могли найти некий Yggdrasil. Данная сеть позиционирует себя и по сути является децентрализованной IPv6 mesh-сетью. Но не путайтесь раньше времени: IPv6 адрес в Yggdrasil сети - публичный ключ, не фактический адрес.
Уникален тем, что может работать не просто поверх интернета, а поверх других оверлейных сетей, тех же Tor или I2P. Очень грубо говоря, это публичный закрытый в себе VPN.
Заходя на страницу какого-нибудь энтузиаста, среди адресов, наравне с уже знакомыми Tor и I2P, вы могли найти некий Yggdrasil. Данная сеть позиционирует себя и по сути является децентрализованной IPv6 mesh-сетью. Но не путайтесь раньше времени: IPv6 адрес в Yggdrasil сети - публичный ключ, не фактический адрес.
Уникален тем, что может работать не просто поверх интернета, а поверх других оверлейных сетей, тех же Tor или I2P. Очень грубо говоря, это публичный закрытый в себе VPN.
Установить Yggdrasil можно либо из вашего любимого пакетного менеджера, либо скачав бинарник из официального репозитория (Github: yggdrasil-network/yggdrasil-go)
После установки, откройте конфиг Yggdrasil по пути
Перезагрузите Yggdrasil (systemctl или службы в Windows). Поздравляю, вы теперь часть сети Yggdrasil! Можете, например, заглянуть на вики, посвящённую Yggdrasil: http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/
Не верится, что так просто? Ну, на самом деле, на данном этапе всё так и просто. Yggdrasil придерживается zero-conf философии, когда пользователю нужно сделать примерно ничего, чтобы воспользоваться сетью. Поэтому Yggdrasil из коробки ставится с TUN/TAP интерфейсом, благодаря которому не нужно настраивать клиенты, а просто вписать адрес в приложение, работающее с IPv6. Но давайте всё же рассмотрим конфиг, он тут небольшой:
Установить Yggdrasil можно либо из вашего любимого пакетного менеджера, либо скачав бинарник из официального репозитория (Github: yggdrasil-network/yggdrasil-go). Также, если вам нужен Yggdrasil, как SOCKS прокси (как тот же Tor), то есть форк Yggstack (репо на гх: yggdrasil-network/yggstack), в котором вместо TUN интерфейса используется Netstack. Но рекомендуется самостоятельно собирать его, ибо в релизах устаревшая версия протокола.
Поздравляю, вы рассмотрели весь конфиг-файл Yggdrasil. Отличия в размерах от того же i2pd, конечно, колоссальные. Но это не значит, что на этом всё. На острие безопасности стоят ещё два важных вопроса, без рассмотрения которых в сеть лучше не соваться: публичные пиры и файрвол.
После установки, откройте конфиг Yggdrasil по пути
/etc/yggdrasil.conf (на Windows: %programdata%\Yggdrasil\yggdrasil.conf). В поле Peers добавьте следующую строчку:
Код:
Peers: [
tls://yggno.de:18227
]
Перезагрузите Yggdrasil (systemctl или службы в Windows). Поздравляю, вы теперь часть сети Yggdrasil! Можете, например, заглянуть на вики, посвящённую Yggdrasil: http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/
Не верится, что так просто? Ну, на самом деле, на данном этапе всё так и просто. Yggdrasil придерживается zero-conf философии, когда пользователю нужно сделать примерно ничего, чтобы воспользоваться сетью. Поэтому Yggdrasil из коробки ставится с TUN/TAP интерфейсом, благодаря которому не нужно настраивать клиенты, а просто вписать адрес в приложение, работающее с IPv6. Но давайте всё же рассмотрим конфиг, он тут небольшой:
Код:
{
# Ваш приватный ключ для end-to-end шифрования. При помощи него же генерируется публичный IPv6. Если в целом не указывать его, то при каждом старте будет создаваться новый ключ.
PrivateKey: <...>
# А можно указывать путь. Имеет приоритет над PrivateKey, если оба указаны. К слову, пара ключей генерируется так:
# openssl genpkey -algorithm Ed25519 -out private.key -outpubkey public.key
PrivateKeyPath: /etc/example/private.key
# Список публичных пиров для входа в сеть. ВАЖНАЯ ТЕМА! Рассмотрим отдельно.
Peers: [
tls://a.b.c.d:e
]
# Список публичных пиров для входа в сеть, только для каждого интерфейса отдельно.
# По умолчанию равен {}, ибо используется "общий" Peers, ниже будет пример
InterfacePeers: {
"eth0": [ "tls://a.b.c.d:e" ]
}
# Адреса, которые будут слушаться для входящих соединений. Нужен для публичных нод, о них будет отдельный разговор.
Listen: []
# Автоматическое обнаружение нод в локальной сети. Полезно, если Yggdrasil установлен на роутере, по умолчанию такие настройки и стоят (описаны ниже). В ином случае - лучше поставьте []
MulticastInterfaces: [
{
Regex: .*
Beacon: true
Listen: true
Password: ""
}
]
# Список разрешённых публичных ключей для входящих соединений (Listen, MulticastInterfaces)
# Никак не ограничивает доступ внутри самой сети.
AllowedPublicKeys: []
# Название TUN интерфейса в сети. По умолчанию auto (автоматическое поднятие интерфейса), на Windows - Yggdrasil, на BSD - tun0.
IfName: auto
# MTU для TUN интерфейса. По умолчанию - максимальный в вашей ОС
IfMTU: 65535
# Если false, то публикует nodeinfo в сеть - информацию о платформе, архитектуре и версии Yggdrasil. Очевидно, лучше выключить
NodeInfoPrivacy: true
# Дополнительная опциональная информация, которая отправляется в сеть.
NodeInfo: {}
}
Поздравляю, вы рассмотрели весь конфиг-файл Yggdrasil. Отличия в размерах от того же i2pd, конечно, колоссальные. Но это не значит, что на этом всё. На острие безопасности стоят ещё два важных вопроса, без рассмотрения которых в сеть лучше не соваться: публичные пиры и файрвол.
А теперь нужно поговорить о важном нюансе, важном в контексте анонимности - публичные пиры. Суть в том, что Yggdrasil не имеет такого понятия, как входной узел. Тебе нужно самому подключаться к пиру, который знает других пиров, которые знают других... и так далее. А как подключиться к пиру в сети, чтобы быть в этой сети, если ты не в сети? Вот для этого и нужны публичные пиры - доступные извне. Они и являются точкой входа в Yggdrasil.
Публичные пиры могут работать через множество транспортов: TCP, TCP+TLS, QUIC+TLS, UNIX socket, WS и WSS (с версии 0.5.7). Особенно интересно звучат QUIC и WSS, в теории позволяющие проксировать подключение к пиру через CDN, на манер Vless. К тому же, имеется возможность подменять SNI, об этом ниже.
Публичных пиров множество. Есть целая страница от одного из разрабов Yggdrasil со списком: publicpeers.neilalexander.dev (скрин страницы как раз выше). Вот небольшой список достаточно популярных (на мой взгляд):
Если не доверяете данному списку и/или не нашли своей страны - обратитесь к списку пиров (или поднимите свой - об этом позже). Обратите внимание на возможные параметры (например, key выше). Всего их 4.
password=PASSWORD - публичный пир может иметь пароль.
key=PUBLICKEY - закрепляется ключ пира, если он не тот, то соединение сбрасывается (защита от потенциальной подмены).
maxbackoff=DURATION - таймаут, указывается в секундах или минутах: 30s / 1m
sni=domainname.com - устанавливает другой SNI в TLS подключениях (только для TLS и QUIC)
Поскольку публичный пир фактически является входным узлом, для быстродействия сети рекомендуется выбирать самый близкий к вам.
Также Yggdrasil позволяет пускать TCP и TCP+TLS подключения через SOCKS прокси, благодаря чему можно задействовать Tor и I2P:
Публичные пиры могут работать через множество транспортов: TCP, TCP+TLS, QUIC+TLS, UNIX socket, WS и WSS (с версии 0.5.7). Особенно интересно звучат QUIC и WSS, в теории позволяющие проксировать подключение к пиру через CDN, на манер Vless. К тому же, имеется возможность подменять SNI, об этом ниже.
Публичных пиров множество. Есть целая страница от одного из разрабов Yggdrasil со списком: publicpeers.neilalexander.dev (скрин страницы как раз выше). Вот небольшой список достаточно популярных (на мой взгляд):
Russia:
tcp://yggno.de:18226
tls://yggno.de:18227
tcp://srv.itrus.su:7991
tls://srv.itrus.su:7992
ws://srv.itrus.su:7994
Netherlands:
tcp://vpn.itrus.su:7991
tls://vpn.itrus.su:7992
quic://vpn.itrus.su:7993
ws://vpn.itrus.su:7994
Germany:
tls://n.ygg.yt:443
tls://b.ygg.yt:443
tls://g.ygg.yt:443
tls://yggdrasil.neilalexander.dev:64648?key=ecbbcb3298e7d3b4196103333c3e839cfe47a6ca47602b94a6d596683f6bb358
France:
tcp://s2.i2pd.xyz:39565
tls://s2.i2pd.xyz:39575
USA:
tcp://ygg-kcmo.incognet.io:8883
tls://ygg-kcmo.incognet.io:8884
quic://ygg-kcmo.incognet.io:8885
ws://ygg-kcmo.incognet.io:8886
tcp://yggno.de:18226
tls://yggno.de:18227
tcp://srv.itrus.su:7991
tls://srv.itrus.su:7992
ws://srv.itrus.su:7994
Netherlands:
tcp://vpn.itrus.su:7991
tls://vpn.itrus.su:7992
quic://vpn.itrus.su:7993
ws://vpn.itrus.su:7994
Germany:
tls://n.ygg.yt:443
tls://b.ygg.yt:443
tls://g.ygg.yt:443
tls://yggdrasil.neilalexander.dev:64648?key=ecbbcb3298e7d3b4196103333c3e839cfe47a6ca47602b94a6d596683f6bb358
France:
tcp://s2.i2pd.xyz:39565
tls://s2.i2pd.xyz:39575
USA:
tcp://ygg-kcmo.incognet.io:8883
tls://ygg-kcmo.incognet.io:8884
quic://ygg-kcmo.incognet.io:8885
ws://ygg-kcmo.incognet.io:8886
password=PASSWORD - публичный пир может иметь пароль.
key=PUBLICKEY - закрепляется ключ пира, если он не тот, то соединение сбрасывается (защита от потенциальной подмены).
maxbackoff=DURATION - таймаут, указывается в секундах или минутах: 30s / 1m
sni=domainname.com - устанавливает другой SNI в TLS подключениях (только для TLS и QUIC)
Поскольку публичный пир фактически является входным узлом, для быстродействия сети рекомендуется выбирать самый близкий к вам.
Также Yggdrasil позволяет пускать TCP и TCP+TLS подключения через SOCKS прокси, благодаря чему можно задействовать Tor и I2P:
Код:
Парочка публичных нод в этих сетях
Больше можно найти в https://github.com/yggdrasil-network/public-peers/tree/master/other
I2P:
socks://localhost:4447/ro7bwwx7ch6echfqwgivsi37tgojgcrjosgq5jrgx5ebadu4xsaq.b32.i2p:39565 - пир от одного из разрабов i2pd, R4SAS. Настройки: sigtype = 7, in/out length = 1, quantity = 5
socks://localhost:4447/7e2q2nrypvbfqparjqa5ubuof6zat6eq3abk2reujyzg2v32dsxq.b32.i2p:9000 - пир от провайдера Triplebit
Tor:
socks://localhost:9050/nxuwjikhsirri2rbrdlphstsn3jr2qzjrsylwkt65rh2miycr5n24tid.onion:706
sockstls://localhost:9050/2cpuaaz2igmcfth4gfoh3jfbie7cysz5xjcpqdetigza7uiloc5oayyd.onion:993
socks://localhost:9050/p2pkbqdgvabddixbbr2y7vrra4qxq3sejfep2qknfu4owh7e3i622dqd.onion:1337
Все пиры выше подняты различными энтузиастами
Несмотря на плюсы, которые мы затронем позже, Yggdrasil имеет довольно много проблем. Вероятно, именно из-за них Yggdrasil сейчас является скорее сетью для энтузиастов.
1. Анонимность. Хотя архитектура Yggdrasil предполагает multi-hop маршрутизацию, это далеко не "луковая" или "чесночная" маршрутизация. Здесь, маршрутизация нацелена на эффективность, а не анонимность, поэтому цепочка может оставаться неизменной, особенно если вы пользуетесь одним публичным пиром. Очевидно, что таким образом можно легко, при желании, деанонимизировать пользователя. Впрочем, сами разработчики заявляют, что "это не цель Yggdrasil". Защита от такого: подключение к пиру через Tor/I2P (что, однако, может напрочь убить некоторые плюсы)
2. Безопасность. Помните, как в начале я обозвал Yggdrasil "публичным закрытым в себе VPN"? Так вот, в сети Yggdrasil любой желающий может обратиться к вашим открытым портам. Поскольку это также "не цель Yggdrasil", защититься от этого можно только при помощи сторонних средств: файрвола. А файрвол вам понадобится, ибо можно спокойно спарсить все IPv6 адреса в сети и их спарсить.
Та самая "цель Yggdrasil" - разработка технологии для больших mesh сетей.
1. Анонимность. Хотя архитектура Yggdrasil предполагает multi-hop маршрутизацию, это далеко не "луковая" или "чесночная" маршрутизация. Здесь, маршрутизация нацелена на эффективность, а не анонимность, поэтому цепочка может оставаться неизменной, особенно если вы пользуетесь одним публичным пиром. Очевидно, что таким образом можно легко, при желании, деанонимизировать пользователя. Впрочем, сами разработчики заявляют, что "это не цель Yggdrasil". Защита от такого: подключение к пиру через Tor/I2P (что, однако, может напрочь убить некоторые плюсы)
2. Безопасность. Помните, как в начале я обозвал Yggdrasil "публичным закрытым в себе VPN"? Так вот, в сети Yggdrasil любой желающий может обратиться к вашим открытым портам. Поскольку это также "не цель Yggdrasil", защититься от этого можно только при помощи сторонних средств: файрвола. А файрвол вам понадобится, ибо можно спокойно спарсить все IPv6 адреса в сети и их спарсить.
Та самая "цель Yggdrasil" - разработка технологии для больших mesh сетей.
Короткий и очень смелый ответ - да, но в некоторых сценариях. Хоть анонимизация не доходит до уровня того же Tor, всё же оно скрывает IP, а входной "узел" может быть разным, следовательно его можно использовать для общения с C2 сервером. Если мы не рассматриваем "глобального противника", конечно же. А если рассматриваем, то Yggdrasil конечно проигрывает любым другим способам анонимизации (вспоминаем про "это не цель Yggdrasil").
Yggdrasil имеет куда меньшие задержки по сравнению с Tor, благодаря чему некоторые даже поднимают игровые сервера в сети, а в качестве транспорта могут использоваться условные WebSockets, которые не будут детектироваться различными системами.
Но нужно понимать, что для такого варианта применения стоит всё ещё доработать Yggdrasil: например, сделать автопиринг (автоматический подбор публичных пиров).
Yggdrasil имеет куда меньшие задержки по сравнению с Tor, благодаря чему некоторые даже поднимают игровые сервера в сети, а в качестве транспорта могут использоваться условные WebSockets, которые не будут детектироваться различными системами.
Но нужно понимать, что для такого варианта применения стоит всё ещё доработать Yggdrasil: например, сделать автопиринг (автоматический подбор публичных пиров).
Yggdrasil нужно воспринимать буквально, как VPN сеть. Любой открытый сервис - открыт для Yggdrasil тоже, в том числе те, которые могут раскрыть идентичность нашего устройства. Нужно обеспечить самую простую, но эффективную защиту при помощи файрвола, в нашем случае ufw:
Исходящие подключения будут работать, и вам ничего не помешает пользоваться сервисами в Yggdrasil. Помните, даже в альтернативных сетях, сканеры не дремлят.
Bash:
# ВАЖНО: tun0 - обычно интерфейс Yggdrasil. У вас он может быть другой, если у вас, например, стоит VPN или иное ПО, использующее TUN интерфейс. Сверяйте через ifconfig
# Запрещаем все входящие соединения
sudo ufw deny in on tun0
Исходящие подключения будут работать, и вам ничего не помешает пользоваться сервисами в Yggdrasil. Помните, даже в альтернативных сетях, сканеры не дремлят.
В Yggdrasil, как и в Tor с I2P, есть проблема длинных адресов, которые невозможно запомнить. Если в Tor с этим смирились, а в I2P реализовали систему адресбуков, то реализация Yggdrasil сама по себе позволяет использовать классические DNS сервера и резолверы. Ничего не мешает вам даже самому вписывать адреса и домены в /etc/hosts. Но вы же не забыли "цель Yggdrasil"? DNS сервера создают единую точку отказа, да и в сети нет какого-то единого DNS, в котором точно будут все домены. Следовательно, нужно использовать децентрализированную альтернативу.
ALFIS (Alternative Free Indentity Server) - блокчейн для хранения DNS записей. Если вы когда-нибудь слышали про EmerDNS, то это примерно то же самое. Установка ALFIS очень тривиальна: скачали no-gui бинарник или архив, скачали дефолтный конфиг, закинули всё в одну папку, прописали использование ALFIS в качестве DNS, запустили - профит.
Предлагаю не останавливаться в этот раз на подробном рассказе о конфигурации ALFIS. Как ни крути, не каждый первый в Yggdrasil использует эту технологию. В сети спокойно хостятся ALFIS резолверы, к которым можно подключаться, как к обычным DNS серверам (например: [308:84:68:55::] (Франкфурт), [308:62:45:62::] (Амстердам), [301:84f7:4bc0:2f3a::53] (Москва)). К тому же, домены .ygg можно резолвить при помощи любого клирнет DNS, заменив на .ygg.at:
ALFIS (Alternative Free Indentity Server) - блокчейн для хранения DNS записей. Если вы когда-нибудь слышали про EmerDNS, то это примерно то же самое. Установка ALFIS очень тривиальна: скачали no-gui бинарник или архив, скачали дефолтный конфиг, закинули всё в одну папку, прописали использование ALFIS в качестве DNS, запустили - профит.
Предлагаю не останавливаться в этот раз на подробном рассказе о конфигурации ALFIS. Как ни крути, не каждый первый в Yggdrasil использует эту технологию. В сети спокойно хостятся ALFIS резолверы, к которым можно подключаться, как к обычным DNS серверам (например: [308:84:68:55::] (Франкфурт), [308:62:45:62::] (Амстердам), [301:84f7:4bc0:2f3a::53] (Москва)). К тому же, домены .ygg можно резолвить при помощи любого клирнет DNS, заменив на .ygg.at:
Код:
# Локальный ALFIS
>nslookup howto.ygg 127.0.0.1
Server: UnKnown
Address: 127.0.0.1
Name: howto.ygg
Address: 222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c
# Публичный DNS из Yggdrasil
>nslookup howto.ygg 308:84:68:55::
Server: UnKnown
Address: 308:84:68:55::
Name: howto.ygg
Address: 222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c
# Резолв через 1.1.1.1
>nslookup howto.ygg.at 1.1.1.1
Server: one.one.one.one
Address: 1.1.1.1
Name: howto.ygg.at
Address: 222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c
И так, неважно по какой причине, будь то анонимность, удобство или иное, вы решили поднять свой публичный пир. Для этого нужно залезть в конфиг и обратить внимание на две настройки: Listen и AllowedPublicKeys.
Listen. Как и говорилось ранее, транспортных протоколов, по которым может работать публичная нода, множество, но есть нюансы. Очевидно, нельзя работать с SOCKS прокси. Также, хотя Yggdrasil поддерживает подключение к публичным пирам по WSS, в самом Yggdrasil нельзя прописать WSS в Listen, поэтому этот момент нужно исправлять при помощи какого-нибудь nginx.
В конечном итоге ваш Listen будет такого формата:
AllowedPublicKeys. Массив публичных ключей, которые могут подключаться к публичному пиру. Можно использовать, когда недостаточно одного пароля. Публичный ключ можно получить при помощи команды
Таким образом, данные настройки будут выглядеть у вас примерно так:
Listen. Как и говорилось ранее, транспортных протоколов, по которым может работать публичная нода, множество, но есть нюансы. Очевидно, нельзя работать с SOCKS прокси. Также, хотя Yggdrasil поддерживает подключение к публичным пирам по WSS, в самом Yggdrasil нельзя прописать WSS в Listen, поэтому этот момент нужно исправлять при помощи какого-нибудь nginx.
В конечном итоге ваш Listen будет такого формата:
protocol://address:port?password=PASSWORD, где protocol - ваш желаемый транспорт, address - адрес привязки (для прослушивания всего: 0.0.0.0 (IPv4) / [::] (IPv6); для локалхоста: 127.0.0.1 (IPv4) / [::1] (IPv6)), port - желаемый порт. Обратите внимание на параметр password - он необязателен и может быть использован в случаях, когда вы хотите отгородить пир от нежелательных людей. Пример: tcp://127.0.0.1:1234?password=123abcAllowedPublicKeys. Массив публичных ключей, которые могут подключаться к публичному пиру. Можно использовать, когда недостаточно одного пароля. Публичный ключ можно получить при помощи команды
yggdrasilctl getself.Таким образом, данные настройки будут выглядеть у вас примерно так:
Код:
Listen: [
tcp://0.0.0.0:1234
tls://0.0.0.0:12345
wss://0.0.0.0:444?password=123123123
# И так далее...
]
AllowedPublicKeys: [
123...abc
abc...def
]
Как и говорилось ранее, любой порт на вашем сервере, доступный извне, доступен также из сети Yggdrasil. Поэтому тут не требуется особая настройка, достаточно работающего в системе Yggdrasil и запущенного сервиса.
Даже так можно!
Не забудем добавить правило в файрвол, чтобы принимать на порт входящие соединения от Yggdrasil:
В простых случаях данной команды хватит.
Если у вас несколько сайтов на одном порту, то можно воспользоваться nginx и параметром listen (
Теперь можно вернуться к доменам, если вы вдруг прониклись технологией ALFIS. Для этого понадобится ALFIS уже с GUI (качается там же: из релизов гитхаба). После запуска во вкладке Credentials нажмите Mine new key, чтобы намайнить ключ - в будущем он нужен будет для майнинга домена. Лично у меня на Ryzen 5 5500 процесс занял 3 часа.
Когда майнинг закончится, у вас появится ключ в отдельном окошке. Не забудьте его сохранить. После этого переходим во вкладку Domains, тыкаем на New domain. Здесь нам будет предложено выбрать домен, а также прописать DNS записи. Достаточно две AAAA записи, для @ и
При необходимости можно насоздавать отдельные субдомены, но тогда вводите все нужные субдомены сразу, поскольку последующее изменение записей потребует ещё перемайнинга.
После ввода записей, нажимаем Mine domain, и процесс майнинга снова запустится. Лично у меня на это ушло полчаса. По окончанию ваш домен "официально" будет зарегистрирован в ALFIS.
Как всегда есть пара нюансов. Во-первых, домен не вечен, работает год. Поэтому время от времени потребуется перемайнинг. Во-вторых, одним ключом можно майнить домен только один раз в сутки. В остальном с доменами в ALFIS закончили.
Даже так можно!
Не забудем добавить правило в файрвол, чтобы принимать на порт входящие соединения от Yggdrasil:
Bash:
# Разрешаем конкретный порт
sudo ufw allow in on tun0 to any port 80 proto tcp # Можете заменить 80 на нужный порт, а tcp на udp при необходимости
В простых случаях данной команды хватит.
Если у вас несколько сайтов на одном порту, то можно воспользоваться nginx и параметром listen (
listen [ваш ipv6]:80). Для других видов сервисов, придётся воспользоваться iptables. На данном моменте вопрос становится уже чисто сисадминским и досконально мы его рассматривать не будем Теперь можно вернуться к доменам, если вы вдруг прониклись технологией ALFIS. Для этого понадобится ALFIS уже с GUI (качается там же: из релизов гитхаба). После запуска во вкладке Credentials нажмите Mine new key, чтобы намайнить ключ - в будущем он нужен будет для майнинга домена. Лично у меня на Ryzen 5 5500 процесс занял 3 часа.
Когда майнинг закончится, у вас появится ключ в отдельном окошке. Не забудьте его сохранить. После этого переходим во вкладку Domains, тыкаем на New domain. Здесь нам будет предложено выбрать домен, а также прописать DNS записи. Достаточно две AAAA записи, для @ и
*, чтобы сам домен и все его субдомены вели на ваш айпишнк.
При необходимости можно насоздавать отдельные субдомены, но тогда вводите все нужные субдомены сразу, поскольку последующее изменение записей потребует ещё перемайнинга.
После ввода записей, нажимаем Mine domain, и процесс майнинга снова запустится. Лично у меня на это ушло полчаса. По окончанию ваш домен "официально" будет зарегистрирован в ALFIS.
Как всегда есть пара нюансов. Во-первых, домен не вечен, работает год. Поэтому время от времени потребуется перемайнинг. Во-вторых, одним ключом можно майнить домен только один раз в сутки. В остальном с доменами в ALFIS закончили.
Хотелось бы скопипастить свой гайд с прошлой статьи, но увы, есть некоторые тонкости, которые нужно будет обсудить. Для запуска Yggdrasil создадим следующий compose файл:
Пуллим образ, пробрасываем tun девайс (для создания интерфейса), даём права и маунтим конфиг файл. Тут всё просто. Перед запуском, конечно, не забудьте этот конфиг файл создать.
Вы могли заметить наличие докеровской сети
Служить она будет для того же, для чего и в гайде по I2P, общение с сервисами в других стаках. Говоря о сервисах, определимся с подопытным. Он будет тем же, что и в прошлом гайде:
Добавим в compose файл сервиса нашу сеть yggdrasil-net:
Теперь наш сервис доступен контейнеру Yggdrasil, но есть проблема: оба контейнера находятся в одной сети, но Yggdrasil предоставляет доступ к сервисам, доступным именно на устройстве, через localhost (в нашем случае - в контейнере с Yggdrasil). Есть два способа, как можно решить эту проблему.
Первый: использовать общий неймспейс для сети. Данный метод подходит только для простых веб-приложений, поскольку такой метод не совместим с какими-то особыми настройками сети контейнера. Делается это так:
Таким образом, ходя на localhost, Yggdrasil будет обращаться к контейнеру. Как вы видите, в данном случае не нужно создавать сеть. Если вы до этого её создали (не дочитав гайд до конца...), можете смело удалять.
Второй метод по сути основан на первом, но более гибкий. Поднять в том же стаке ещё контейнер в том же неймспейсе с сервисом, который будет проксировать соединения с localhost на уже другой контейнер в той же сети. В примере ниже мы используем того же подопытного - сайт, а в качестве прокси - nginx. Если у вас нечто другое, то ищите решение под ваш сервис.
Возвращаемся к compose файлу с Yggdrasil, добавляем nginx:
Тут же создадим nginx.conf:
Данная конфигурация является простейшей: nginx слушает IPv6 адреса и проксирует их на web:8080, где web - название контейнера, находящегося в той же сети yggdrasil-net. Нужно сложнее или другое - пишите сами, я лишь показал суть 
Небольшое отступление касаемо поднятия публичных пиров: всё, что нужно сделать - пробросить нужные порты (те, что указаны в Listen) при помощи
YAML:
services:
yggdrasil:
networks:
- yggdrasil-net
image: ghcr.io/yggdrasil-network/yggdrasil-go:develop
container_name: yggdrasil
volumes:
- ./config.conf:/etc/yggdrasil-network/config.conf
restart: unless-stopped
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
networks:
yggdrasil-net:
external: true
Пуллим образ, пробрасываем tun девайс (для создания интерфейса), даём права и маунтим конфиг файл. Тут всё просто. Перед запуском, конечно, не забудьте этот конфиг файл создать.
Вы могли заметить наличие докеровской сети
yggdrasil-net, давайте её создадим:
Bash:
docker network create yggdrasil-net
Служить она будет для того же, для чего и в гайде по I2P, общение с сервисами в других стаках. Говоря о сервисах, определимся с подопытным. Он будет тем же, что и в прошлом гайде:
Структура:
compose.yaml:
Dockerfile:
main.py:
requirements.txt:
Пример взят с awesome-compose.
Код:
.
├── compose.yaml
├── app
├── Dockerfile
├── requirements.txt
└── app.py
YAML:
services:
web:
build:
context: app
target: builder
ports:
- '8000:8000'
Код:
# syntax=docker/dockerfile:1.4
FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder
WORKDIR /app
COPY requirements.txt /app
RUN --mount=type=cache,target=/root/.cache/pip \
pip3 install -r requirements.txt
COPY . /app
ENTRYPOINT ["python3"]
CMD ["app.py"]
FROM builder as dev-envs
RUN <<EOF
apk update
apk add git
EOF
RUN <<EOF
addgroup -S docker
adduser -S --shell /bin/bash --ingroup docker vscode
EOF
# install Docker tools (cli, buildx, compose)
COPY --from=gloursdocker/docker / /
Python:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
Код:
flask
Добавим в compose файл сервиса нашу сеть yggdrasil-net:
YAML:
services:
web:
build:
context: app
target: builder
networks:
- yggdrasil-net
# Если требуются порты для клирнета - раздокументировать
# ports:
# - '8000:8000'
networks:
yggdrasil-net:
external: true
Первый: использовать общий неймспейс для сети. Данный метод подходит только для простых веб-приложений, поскольку такой метод не совместим с какими-то особыми настройками сети контейнера. Делается это так:
YAML:
services:
web:
build:
context: app
target: builder
network_mode: "container:yggdrasil" # (или service:yggdrasil, если контейнеры находятся в одном стаке)
Второй метод по сути основан на первом, но более гибкий. Поднять в том же стаке ещё контейнер в том же неймспейсе с сервисом, который будет проксировать соединения с localhost на уже другой контейнер в той же сети. В примере ниже мы используем того же подопытного - сайт, а в качестве прокси - nginx. Если у вас нечто другое, то ищите решение под ваш сервис.
Возвращаемся к compose файлу с Yggdrasil, добавляем nginx:
YAML:
nginx:
image: nginx
restart: unless-stopped
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
network_mode: "service:yggdrasil"
Код:
server {
listen [::]:80;
server_name _;
location / {
proxy_pass http://web:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Небольшое отступление касаемо поднятия публичных пиров: всё, что нужно сделать - пробросить нужные порты (те, что указаны в Listen) при помощи
ports в compose файле. На этом с Docker полностью покончено.Yggdrasil, на мой взгляд, можно назвать перспективной альтернативной сетью. Она довольно молодая и продолжает разрабатываться, в отличие от Tor и I2P, где спецификации устаканились уже давно. Да и разрабатывается единственная реализация буквально 2.5 анонимусами, когда даже в I2P есть два лагеря: I2P+ и i2pd. Если будет взят курс на анонимность и при этом будут сохранены текущие скорости и задержки, то Yggdrasil скорее всего станет серьёзным конкурентом условному Tor. А пока - да, это сеть для энтузиастов, и будет иначе неизвестно когда.
Последнее редактирование модератором: