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

Так, я трохи відволікся. На самому початку я писав, що DNS-фіги на Андроїді дві.
Коли я дав збірку з тим першим акуратним воркераундом користувачам, деякі почали писати, що нічого не працює. Це було дивно!

Виявилося, що браузери, засновані на движку Хрома, вважають себе розумнішими, або просто не довіряють ОС, або надто зав'язані на корпорації 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, а трафік весь зашифрований, і його не треба шифрувати на рівні програми!

Найпростіше, що можна вигадати, це використовувати XMPP всередині мережі Yggdrasil. Зрозуміло, що федерація працюватиме лише з тими серверами, хто теж встановив Yggdrasil, але треба з чогось починати.
У мене є два XMPP-сервери в Yggdrasil з різними налаштуваннями та доменами для прикладу того як можна їх налаштувати та використовувати.

Перший сервер працює через звичайний інтернет та 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. Залишайтесь на лінії...

* Так-да, "S в IoT означає безпеку" :) 


Відповідно до вказаних даних, основна тема статті є розробка нового клієнта для мережі Yggdrasil. Основні пункти статті можна розділити наступним чином:

1. Непрохана оптимізація
   - Проблема з використанням DNS у зв'язці з IPv6-only доменами на Андроїд.
   - Опис роботи системного резолвера на Андроїді і його впливу на отримання запису AAAA.
   - Вирішення проблеми шляхом додавання маршруту 2000::/128.

2. Розробка двох різних клієнтів для мережі Yggdrasil
   - Опис першого клієнта, який був покинутий початковим розробником і мав купу багів.
   - Опис другого клієнта, написаного розробником самого Yggdrasil, але потребував воркараундів.

3. Проблема з DNS і IPv6
   - Опис проблеми, коли браузери на базі движку Хрома перевіряють маршрут до DNS-сервера Google з адресою IPv6.
   - Реалізація воркараунду для цієї проблеми шляхом створення окремої опції.

4. Інші покращення в клієнті Yggdrasil
   - Додавання повноцінного вікна налаштування DNS з підтримкою різних серверів DNS.
   - Оптимізація роботи з віртуальним мережевим інтерфейсом TUN.
   - Згадка про кнопку швидкого включення/вимкнення зі шторки та нотифікації зі статусом.

5. Можливості мережі Yggdrasil
   - Роздуми щодо того, що Yggdrasil є прикладом того, яким мав бути сам Інтернет.
   - Згадка про використання XMPP всередині мережі Yggdrasil і опис двох XMPP-серверів, які можна використовувати.

6. Інструкції для спроби використання мережі Yggdrasil

.

Based on the provided text, it seems to be a technical article or blog post discussing the development of a Yggdrasil network client for Android. Yggdrasil is a decentralized peer-to-peer network protocol. The article describes the author's experience with existing Yggdrasil clients, the issues they encountered, and their efforts to optimize and improve the client.

The author mentions a specific optimization related to DNS resolution and IPv6. They explain that the Android resolver has a "feature" that prevents querying AAAA records for domain names with IPv6-only addresses within a network lacking global IPv6 connectivity. To address this, the author added a route for the 2000::/3 range, which is used by Yggdrasil, to ensure proper resolution.

The article also mentions the existence of two different Yggdrasil clients. The first client was initially developed by the author but was taken over by another developer who stopped accepting pull requests. The second client was developed by one of the Yggdrasil project developers but lacked necessary workarounds and had bugs.

The author discusses additional improvements made to the client, including DNS configuration options, optimizations related to the TUN (virtual network interface), and the addition of a quick toggle button and notification for enabling and disabling the client.

The author concludes by mentioning the potential of Yggdrasil as an example of what the internet could have been, with direct connections between devices, encryption, and no need for application-level encryption or NAT traversal. They suggest using XMPP (Jabber) within the Yggdrasil network and provide examples of two XMPP servers running on Yggdrasil that can be tested.

In terms of tags and keywords, you can use:
- Yggdrasil
- Android client
- Peer-to-peer network
- DNS resolution
- IPv6
- Optimization
- XMPP
- Conversations (XMPP client)
- Decentralized network

These tags and keywords can help categorize and identify the main topics discussed in the article.
Просмотры:

Коментарі

Популярні публікації