New round of Yggdrasil development | Новий виток розвитку Yggdrasil
Новий виток розвитку Yggdrasil
Спочатку я хотів би вибачитися за те, що не надавав значення тому, що обидва існуючі "клієнти" мережі Yggdrasil для Android працювали так собі цю пару років. Майже рік тому я написав статтю про те, як налаштувати доступ до Yggdrasil через WireGuard і сам використовував цю зв'язку, тому клієнтами не займався. Адже міг!
1. Що таке Yggdrasil і як він може бути використаний для побудови прямих з'єднань між пристроями?
2. Які можливості виникають у мережі, де не потрібно використовувати NAT і весь трафік зашифрований?
3. Як XMPP можна використовувати всередині мережі Yggdrasil для комунікації?
4. Як працює перший XMPP-сервер, який працює через звичайний інтернет та Yggdrasil?
5. Які SRV-записи використовуються для налаштування пріоритетів підключень на першому сервері?
6. Як працює другий XMPP-сервер, що працює тільки в Yggdrasil з доменом ALFIS?
7. Чи може другий сервер зв'язуватися з серверами в інтернеті? Які обмеження виникають у зв'язку з сертифікатом сервера?
Приблизно місяць тому хтось із спільноти вкотре показав як у нього не відкриваються сайти у Yggdrasil у браузері, і мене це дістало. Я вирішив розібратися з проблемою і помчало! Цю статтю можна вважати підбиттям деяких проміжних підсумків.
Непрохана оптимізація
Якщо ви вирішите використовувати DNS у зв'язці з IPv6-only доменами за відсутності "справжнього" IPv6 то отримаєте фігу. Особливо на Андроїді. Та ще й не одну.
По-перше, системний резолвер, який Android запозичив з 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
Виявилося, що браузери, засновані на движку Хрома, вважають себе розумнішими, або просто не довіряють ОС, або надто зав'язані на корпорації Google. Вони перевіряють наявність маршруту до DNS-сервера Google з адресою IPv6: 2001:4860:4860::8888
.
Для цього воркараўнда довелося зробити окрему опцію, щоб користувачі могли включити її тільки якщо знадобиться.
Що ще зроблено?
Ви ж не думали, що я просто про DNS напишу та заспокоюся?
Окрім вирішення проблем з DNS я додав повноцінне вікно налаштування DNS, поки що там 4 мої сервери DNS, розташовані в різних країнах і доступні для використання всередині Yggdrasil. Вони блокують рекламу за допомогою AdGuard Home , резолвують домени з ALFIS (мікроблоків за моїм авторством) і навіть з OpenNIC. Все для приватності та незалежності.
Крім того, вдалося оптимізувати саму роботу з TUN (віртуальним мережевим інтерфейсом), тобто роботу з пам'яттю та буферами. Це збільшило пропускну здатність та зменшило споживання пам'яті.
Щодо кнопки швидкого включення та вимкнення зі шторки та нотифікації зі статусом я навіть писати не буду. Упс...
Ну, в результаті пару тижнів тому я доданий до числа розробників у репозиторії, і продовжую поступово покращувати клієнт. Сьогодні ось випустив новий реліз на основі випущеної пару днів тому v0.4.7 і вже готуємо випуск у F-Droid. Попереду є кілька дуже цікавих задумів.
Що з цим робити чи навіщо це все?
Найближчими днями мене відвідала думка, що Yggdrasil – це приклад того, чим мав стати сам Інтернет. Пряме з'єднання між будь-якими пристроями*. Ви просто уявіть, які можливості виникають у мережі, де не треба паритися через будь-які NAT, а трафік весь зашифрований, і його не треба шифрувати на рівні програми!
Перший сервер працює через звичайний інтернет та Yggdrasil. Записи SRV налаштовані так, щоб серверні підключення йшли через інтернет насамперед, а клієнтські через Yggdrasil. Вся справа у пріоритетах.
Другий сервер взагалі працює тільки в Ygg, використовуючи домен із ALFIS. Теоретично він може зв'язуватися із серверами в інтернеті, але його сертифікат вони не ухвалять.
Як їх спробувати?
Налаштувати Yggdrasil на пристрій з Android.
Налаштувати там один бенкет зі списку публічних бенкетів .
У розділі DNS рекомендую вибрати парочку зі списку.
Включити Yggdrasil.
Встановити XMPP-клієнт Conversations, наприклад F-Droid .
Там зареєструвати новий обліковий запис на сервері
yggdrasil.link
абоxmpp.ygg
.Спробувати написати мені на
revertron@yggdrasil.link
абоrevertron@xmpp.ygg
відповідно.
Навіть якщо вам не подобається користуватися XMPP, або не знайдете відразу корисного застосування, завжди залишається зашифрований, безпечний, DNS з блокуванням реклами та систем, що стежать всередині Yggdrasil ;)
А ми поки що продовжимо пиляти нові сервіси всередині Yggdrasil. Залишайтесь на лінії...
Коментарі
Дописати коментар
Олег Мічман в 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