A new round of Yggdrasil development
Новый виток развития Yggdrasil
Сначала я хотел бы извиниться за то, что не придавал значения тому, что оба существующих "клиента" сети Yggdrasil для Android работали так себе эту пару лет. Почти год назад я написал статью о том, как настроить доступ в Yggdrasil через WireGuard, и сам использовал эту связку, поэтому клиентами не занимался. А ведь мог!
Примерно месяц назад кто-то из сообщества в очередной раз показал как у него не открываются сайты в Yggdrasil в браузере, и меня это достало. Я решил разобраться с проблемой и понеслось! Эту статью можно считать подведением некоторых промежуточных итогов.
Непрошенная оптимизация
Если вы решите использовать DNS в связке с IPv6-only доменами при отсутствии "настоящего" IPv6 то получите фигу. Особенно на Андроиде. Да ещё и не одну.
Во-первых, системный резолвер, который Андроид позаимствовал из FreeBSD, имеет "оптимизацию" для сетей, в которых нет глобального IPv6. Таким образом, если вы решите, что в пределах своей сети вы хотите подключаться к какому-то компьютеру с адресом fe80::50ff:21ff:fe27:e71
по доменному имени, то ваш браузер или приложение просто не получат запись AAAA
, так как она не будет запрошена у сервера DNS.
Если кратко, то резолвер пробует создать UDP-сокет, способный соединиться с адресом 2000::
, и если такого маршрута нет, то ОС вернёт ошибку, и резолва AAAA
просто не будет. А так как в Yggdrasil используется диапазон адресов 0200::/7
, не входящий в 2000::/3
, то всё плохо.
Когда-то давно для другого клиента я просто вставил костыль, добавляющий этот маршрут в процессе создания интерфейса VPN, и оно работало. Этот подход потом доработали, сделали проверку на наличие глобального IPv6, и добавление только если маршрута нет.
Но в этом клиенте я решил проблему изящнее - просто добавил маршрут 2000::/128
, всё равно никто не будет с этим адресом соединяться, а если кто-то полезет на какой-то реальный IPv6, то ОС сразу вернёт ошибку, пакеты не будут лететь на обработку коду Yggdrasil, а браузер/приложение получит ошибку сразу, а не по таймауту.
Стоп, что за два разных клиента?
А, это опенсорс, детка :)
Я как-то пилил один клиент, когда он ещё был единственным. Он был заброшен своим изначальным разработчиком. Но потом его как-то перехватил третий разработчик, и перестал принимать от меня пулл-реквесты. В том приложении остался список древних неработающих серверов DNS, и кучка багов.
А второй клиент написан одним из разработчиков самого Yggdrasil, но примерно полтора года он был в зачаточном состоянии, без нужных воркэраундов, с дефолтной иконкой из Android Studio и т.п. Когда я придумал нужные фиксы я спросил у сообщества какой клиент дорабатывать, сообщество ответило "официальный".
Вторая фига DNS+IPv6
Да, я немного отвлёкся. В самом начале я писал, что DNS-фиги на Андроиде две.
Когда я дал сборку с тем первым аккуратным воркэраундом юзерам, некоторые начали писать, что ничего не работает. Это было странно!
Оказалось, что браузеры, основанные на движке Хрома, считают себя умнее, или просто не доверяют ОС, или слишком завязаны на корпорации Гугл. Они проверяют наличие маршрута к DNS-серверу Гугл с адресом IPv6: 2001:4860:4860::8888
.
Для этого воркэраунда пришлось сделать отдельную опцию, чтобы юзеры могли включить её только если понадобится.
Что ещё сделано?
Вы же не думали, что я просто о DNS напишу и успокоюсь?
Кроме решения проблем с DNS я добавил полноценное окно настройки DNS, пока что там 4 моих сервера DNS, расположенные в разных странах и доступные для использования внутри Yggdrasil. Они блокирую рекламу с помощью AdGuard Home, резолвят домены из ALFIS (микроблокчейна за моим авторством) и даже из OpenNIC. Всё для приватности и независимости.
Кроме того, удалось оптимизировать саму работу с TUN (виртуальным сетевым интерфейсом), то есть работу с памятью и буферами. Это увеличило пропускную способность и уменьшило потребление памяти.
Насчёт кнопки быстрого включения и выключения из шторки и нотификации со статусом я даже писать не буду. Упс...
Ну, в итоге пару недель назад я добавлен в число разработчиков в репозитории, и продолжаю постепенно улучшать клиент. Сегодня вот выпустил новый релиз на основе выпущенной пару дней назад v0.4.7, и уже готовим выпуск в F-Droid. Впереди есть несколько очень интересных задумок...
Что с этим делать или зачем это всё?
В ближайшие дни меня посетила мысль, что Yggdrasil это пример того, чем должен был стать сам Интернет. Прямое соединение между любыми устройствами*. Вы просто представьте, какие возможности возникают в сети, где не надо париться из-за всяких NAT, а трафик весь зашифрован, и его не надо шифровать на уровне приложения!
Самое простое, что можно придумать, это использовать XMPP внутри сети Yggdrasil. Понятное дело, что федерация будет работать только с теми серверами, кто тоже установил Yggdrasil, но надо с чего-то начинать.
У меня есть два XMPP-сервера в Yggdrasil с разными настройками и доменами для примера того как можно их настроить и использовать.
Первый сервер работает через обычный интернет и Yggdrasil. Записи SRV настроены так, чтобы серверные подключения шли через интернет в первую очередь, а клиентские через Yggdrasil. Всё дело в приоритетах.
Второй сервер вообще работает только в Ygg, используя домен из ALFIS. Теоретически он может связываться с серверами в интернете, но его сертификат они не примут.
Как их попробовать?
Установить Yggdrasil на устройство с Android
Настроить там один пир из списка публичных пиров
В разделе DNS рекомендую выбрать парочку из списка
Включить Yggdrasil
Установить XMPP-клиент Conversations, например из F-Droid
Там зарегистрировать новый аккаунт на сервере
yggdrasil.link
илиxmp.ygg
Попробовать написать мне на
revertron@yggdrasil.link
илиrevertron@xmpp.ygg
соответственно.
Даже если вам не нравится пользоваться XMPP, или не найдёте сразу полезного применения, всегда остаётся зашифрованный, безопасный, DNS с блокировкой рекламы и следящих систем внутри Yggdrasil ;)
А мы пока продолжим пилить новые сервисы внутри Yggdrasil. Оставайтесь на линии...
* Да-да, "S in IoT stands for security" :)
Коментарі
Дописати коментар
Олег Мічман в X: «Donations and support for media resources, bloggers, projects, and individuals. https://t.co/HPKsNRd4Uo https://t.co/R6NXVPK62M» / X
https://twitter.com/olukawy/status/1703876551505309973