субота, 29 червня 2024 р.

I2P over Yggdrasil: анонимность в меш-сетях

I2P over Yggdrasil: анонимность в меш-сетях

Граб
мин.

I2P (Invisible Internet Protocol) – свободный инструмент организации анонимных коммуникаций через интернет. Является одноранговой сетью, в которой каждый пользователь по умолчанию является потенциальным звеном в анонимной цепочке других участников сети. Трафик I2P зашифрован и не поддается анализу. Понятие «сторожевого» узла в I2P, которое присутствует в сети Tor, нет: не существует никакого постоянного узла, через который осуществляется выход в сеть. Взаимодействие пользователя с I2P на стороне домашнего провайдера идентифицируется, как хаотичное подключение к случайным хостам. Количество подключений клиента с белым IP в среднем варьируется у отметки в четыре тысячи. Помимо полезной нагрузки, сюда входят обмен служебной информацией с другими роутерами сети и транзитный трафик.

Предпосылки

Существенное слабое место сети I2P заключается в необходимости обращения к одному из стартовых узлов через обычный интернет при первом запуске. Пакет с начальным рисунком сети в виде нескольких случайных роутеров и узел, который его отдает, называются ресидом. Стартовые узлы держат энтузиасты, их список имеется в общем доступе и нередко претерпевает изменения в силу обычных человеческих обстоятельств. Бутылочное горлышко заключается в возможности на стороне провайдера идентифицировать большинство обращений к ресиду через мониторинг DNS-запросов, а также в блокировке доменов стартовых узлов, что затруднит первый запуск для неопытного пользователя, т.к. потребует использование прокси или VPN.

Блокировка запроса к ресиду на стороне провайдера
Блокировка запроса к ресиду на стороне провайдера

В отличие от обычного интернета, пользователи I2P без выделенного адреса имеют худшее качество использования скрытой сети, чем абоненты с белым IP. Это связано с постоянной необходимостью прямого сообщения с другими роутерами сети. Каждый роутер публикует свой адрес, который включает в себя ключи шифрования, IP-адрес и порт для приема сообщений. Очевидно, что достучаться до узла сети за NAT-сервером – задача не из простых.

Разница между пользователем с выделенным IP и пользователем за NAT-ом
Разница между пользователем с выделенным IP и пользователем за NAT-ом

Однако работа роутеров без выделенного адреса возможна: клиенту сети за NAT-ом приходится постоянно поддерживать активное UDP-соединение, резервируя на выходном сервере провайдера порт, обращения на который будут переданы клиенту. Этот сценарий весьма сложен, особенно, когда речь заходит про инициализацию соединения извне. Механика работы клиента за NAT-ом – произведение инженерной мысли, которое заслуживает отдельной статьи.

Коротко об Иггдрасиле

Yggdrasil Network – один из немногих работоспособных протоколов меш-сетей. Основная концепция заключатся в автоматической маршрутизации во внутренней IPv6 подсети (200::/7) и абсолютной масштабируемости. Yggdrasil является полностью одноранговой сетью: не существует каких-либо «мастер-узлов», которым делегируется какая-то глобальная ответственность. Является идеологическим продолжением проекта CJDNS (Hyperboria).

Абстрактная идея меш-сети во главу угла ставит производительность, приватность и простоту использования: шифрование трафика и низкий порог вхождения новых пользователей. Yggdrasil не является инструментом анонимности, т.к. ближайшие к пользователю узлы видят его реальные сетевые интерфейсы в локальной сети, либо IP-адрес при подключении к публичному пиру через интернет. Меш-сети находят применение в организации псевдолокальных сетей, объединяя удаленные компьютеры в одну IPv6-сеть (по аналогии с Hamachi для игры в Minecraft и прочие мультиплеерные игры). Также служит для организации прочих внутрисетевых ресурсов вроде сайтов и VoIP-телефонии.

Первые попытки интеграции

Небольшое замечание

I2P-роутер публикует свои адреса, в том числе IPv6, если он включен в конфиге и имеется фактически. Так как Yggdrasil предоставляет пользователю не локальный прокси, а полноценный сетевой интерфейс (используя драйвер TUN от WireGuard), до недавних пор I2P-роутер публиковал адрес IPv6 из подсети Yggdrasil. Так как пользователей с включенным протоколом IPv6 в конфигурации I2P-роутера и установленным Yggdrasil было больше, чем один и даже два, периодически можно было видеть, что клиент I2P (роутер) сообщается с другими Yggdrasil-адресами.

Однако на лицо следующие недостатки:

  1. обращение к ресиду в конечном счете должно осуществляться через обычный интернет;

  2. опубликованный роутером адрес IPv6-Yggdrasil для подавляющего большинства пользователей I2P является неизвестным и недоступным;

  3. успешный запуск I2P-роутера на Yggdrasil-Only устройстве маловероятен в силу возможного отсутствия в ресиде или локальной базе роутера узлов с адресом IPv6-Yggdrasil.

Начало полной совместимости

С версии 2.36.0 i2pd имеет несколько новых конфигурационных параметров, главный из которых meshnets.yggdrasil=true. Этот параметр не зависит от конфигурации IPv4 и IPv6. В частности, реальные сетевые интерфейсы могут быть отключены. В таком случае I2P-роутер будет работать в режиме Yggdrasil-Only.

Также организован специальный ресид, доступный из Yggdrasil и отдающий пользователю пакет в первую очередь состоящий из известных роутеров с адресом IPv6-Yggdrasil. При каждом запуске I2P-роутера, работающего в режиме Yggdrasil-Only, проводится проверка наличия в локальной базе доступных узлов на транспортном уровне, т.е. наличие других узлов с IPv6-Yggdrasil. Если по каким-то причинам совместимых роутеров в локальной базе не оказалось, происходит повторное обращение к Yggdrasil-ресиду.

При современном использовании Yggdrasil по большей части через оверлейные подключения к публичным пирам через интернет, работа I2P-роутера в Yggdrasil сравнима со связкой “Tor-over-VPN”: подобный подход полностью скрывает факт использования скрытой сети от домашнего провайдера. В случае с I2P имеется еще одно специфичное преимущество: пользователю не нужно иметь выделенный IP от провайдера для беспроблемных внешних обращений, т.к. IPv6-Yggdrasil является глобально доступным в рамках сегмента сети Yggdrasil (физически соединенной группы участников, в том числе через публичные пиры в интернете).

Целостность сети

Описанное решение не является фактором фрагментации I2P. Построение туннелей скрытой сети – весьма емкий и даже ювелирный процесс, в рамках которого в том числе происходит согласование транспортных возможностей узлов. Формируя «чеснок» - зашифрованное сообщение группе узлов, которые должны образовать туннель, - роутер проверяет их адреса на совместимость. Например, узел с единственным адресом IPv4 не получит инструкцию, согласно которой ему необходимо установить контакт с адресом IPv6, т.к. это заведомо невозможно.

Чтобы Yggdrasil-Only роутеру построить туннель до узла с адресом из обычного интернета, как минимум будет подобран транзитный роутер, имеющий два интерфейса: IPv6-Yggdrasil и, например, обычный IPv4. В свою очередь, другие Yggdrasil-Only роутеры также могут выступать транзитными звеньями туннеля, но только для сообщения с узлами совместимыми по транспорту, т.е. также имеющими сетевой интерфейс Yggdrasil. Чем больше в сети I2P количество роутеров с одновременно включенными IPv4, IPv6 и Yggdrasil интерфейсами, тем связнее сеть.

Подключение к I2P через Yggdrasil
Подключение к I2P через Yggdrasil

Перспектива

Пример с Yggdrasil является частным шагом в будущее, а не самоцелью. Описанный опыт успешной интеграции скрытой сети в меш-сеть является важным концептуальным шагом, который при надобности позволит интегрировать сеть I2P в другие меш-сети. Перспектива открывается при рассмотрении самоорганизованных сегментов меш-сети, например, в многоквартирных домах без централизованного провайдера. В локальной сети клиент Yggdrasil автоматически находит другие узлы и сообщается с ними, сам выступая при надобности транзитным. При подключении хотя бы одного узла в таком сегменте к другому сегменту сети (например, к глобальному через интернет), сети автоматически объединяются. Такой подход к организации сети стал еще реальнее, т.к. теперь имеет место быть и вторая сторона привычного интернета – скрытая.


Для более детального ознакомления с упомянутыми технологями, рекомендую статьи: про I2P и про Yggdrasil.

I2P over Yggdrasil: анонімність у меш-мережах

I2P over Yggdrasil: анонімність у меш-мережах

Грабовий
хв

I2P (Invisible Internet Protocol) – вільний інструмент для організації анонімних комунікацій через інтернет. Є одноранговою мережею, у якій кожен користувач за промовчанням є потенційною ланкою в анонімному ланцюжку інших учасників мережі. Трафік I2P зашифрований та не піддається аналізу. Поняття «сторожового» вузла в I2P, яке є у мережі Tor, немає: немає постійного вузла, через який здійснюється вихід у мережу. Взаємодія користувача з I2P на стороні домашнього провайдера ідентифікується як хаотичне підключення до випадкових хостів. Кількість підключень клієнта з білим IP в середньому варіюється біля позначки чотири тисячі. Окрім корисного навантаження, сюди входять обмін службовою інформацією з іншими роутерами мережі та транзитний трафік.

Передумови

Істотне слабке місце мережі I2P полягає у необхідності звернення до одного із стартових вузлів через звичайний інтернет при першому запуску. Пакет з початковим малюнком мережі у вигляді кількох випадкових роутерів та вузол, що його віддає, називаються ресидом. Стартові вузли тримають ентузіасти, їх список є в загальному доступі і нерідко зазнає змін через звичайні людські обставини. Пляшкова шийка полягає в можливості на стороні провайдера ідентифікувати більшість звернень до ресиду через моніторинг DNS-запитів, а також блокування доменів стартових вузлів, що ускладнить перший запуск для недосвідченого користувача, т.к. вимагатиме використання проксі або VPN.

Блокування запиту до ресида на стороні провайдера
Блокування запиту до ресида на стороні провайдера

На відміну від звичайного інтернету, користувачі I2P без виділеної адреси мають гіршу якість використання прихованої мережі ніж абоненти з білим IP. Це з постійною необхідністю прямого повідомлення з іншими роутерами мережі. Кожен роутер публікує свою адресу, яка включає ключі шифрування, IP-адресу і порт для прийому повідомлень. Очевидно, що достукатися до вузла мережі за NAT-сервером – завдання не просто.

Різниця між користувачем із виділеним IP та користувачем за NAT-ом
Різниця між користувачем із виділеним IP та користувачем за NAT-ом

Однак робота роутерів без виділеної адреси можлива: клієнту мережі за NAT-ом доводиться постійно підтримувати активне UDP-з'єднання, резервуючи на вихідному сервері провайдера порт, звернення на який буде передано клієнту. Цей сценарій дуже складний, особливо коли мова заходить про ініціалізацію з'єднання ззовні. Механіка роботи клієнта за NAT-ом – твір інженерної думки, який заслуговує на окрему статтю.

Коротко про Іггдрасіль

Yggdrasil Network – один із небагатьох працездатних протоколів меш-мереж. Основна концепція полягає в автоматичній маршрутизації у внутрішній IPv6 підмережі (200::/7) та абсолютній масштабованості. Yggdrasil є повністю одноранговою мережею: немає жодних «майстер-вузлів», яким делегується якась глобальна відповідальність. Є ідеологічним продовженням проекту CJDNS (Hyperboria).

Абстрактна ідея меш-сети на чільне місце ставить продуктивність, приватність і простоту використання: шифрування трафіку і низький поріг входження нових користувачів. Yggdrasil є інструментом анонімності, т.к. Найближчі до користувача вузли бачать його реальні мережеві інтерфейси в локальній мережі, або IP-адреса при підключенні до публічного бенкету через інтернет. Меш-мережі знаходять застосування в організації псевдолокальних мереж, поєднуючи віддалені комп'ютери в одну IPv6-мережу (за аналогією з Hamachi для гри в Minecraft та інші мультиплеєрні ігри). Також служить для організації інших внутрішньомережевих ресурсів на кшталт сайтів та VoIP-телефонії.

Перші спроби інтеграції

Невелике зауваження

I2P-роутер публікує свої адреси, у тому числі IPv6, якщо він увімкнений у конфізі і є фактично. Оскільки Yggdrasil надає користувачеві не локальний проксі, а повноцінний мережевий інтерфейс (використовуючи драйвер TUN від WireGuard), донедавна I2P-роутер публікував адресу IPv6 з підмережі Yggdrasil. Оскільки користувачів з увімкненим протоколом IPv6 у конфігурації I2P-роутера та встановленим Yggdrasil було більше, ніж один і навіть два, періодично можна було бачити, що клієнт I2P (роутер) повідомляється з іншими Yggdrasil-адресами.

Проте в наявності такі недоліки:

  1. звернення до ресиду зрештою має здійснюватися через звичайний інтернет;

  2. опублікована роутером адреса IPv6-Yggdrasil для переважної більшості користувачів I2P є невідомою та недоступною;

  3. успішний запуск I2P-роутера на Yggdrasil-Only пристрої малоймовірний через можливу відсутність у ресиді або локальній базі роутера вузлів з адресою IPv6-Yggdrasil.

Початок повної сумісності

З версії 2.36.0 i2pd має кілька нових параметрів конфігурації, головний з яких meshnets.yggdrasil=true. Цей параметр не залежить від конфігурації IPv4 та IPv6. Зокрема реальні мережеві інтерфейси можуть бути відключені. У такому разі I2P-роутер працюватиме в режимі Yggdrasil-Only.

Також організований спеціальний ресид, доступний з Yggdrasil і пакет, що віддає користувачеві, в першу чергу складається з відомих роутерів з адресою IPv6-Yggdrasil. При кожному запуску I2P-роутера, працюючого як Yggdrasil-Only, проводиться перевірка наявності у локальній базі доступних вузлів на транспортному рівні, тобто. наявність інших вузлів з IPv6-Yggdrasil. Якщо з якихось причин сумісних роутерів у локальній базі не було, відбувається повторне звернення до Yggdrasil-ресиду.

При сучасному використанні Yggdrasil здебільшого через оверлейні підключення до публічних бенкетів через інтернет, робота I2P-роутера в Yggdrasil можна порівняти зі зв'язкою “Tor-over-VPN”: подібний підхід повністю приховує факт використання прихованої мережі від домашнього провайдера. У випадку з I2P є ще одна специфічна перевага: користувачу не потрібно мати виділений IP-провайдера для безпроблемних зовнішніх звернень, т.к. IPv6-Yggdrasil є глобально доступним у рамках сегменту мережі Yggdrasil (фізично з'єднаної групи учасників, у тому числі через публічні бенкети в інтернеті).

Цілісність мережі

Описане рішення є чинником фрагментації I2P. Побудова тунелів прихованої мережі – дуже ємний і навіть ювелірний процес, в рамках якого, зокрема, відбувається узгодження транспортних можливостей вузлів. Формуючи «часник» – зашифроване повідомлення групі вузлів, які мають утворити тунель, – роутер перевіряє їхні адреси на сумісність. Наприклад, вузол з єдиною адресою IPv4 не отримає інструкцію, згідно з якою необхідно встановити контакт з адресою IPv6, т.к. це свідомо неможливо.

Щоб Yggdrasil-Only роутеру побудувати тунель до вузла з адресою зі звичайного інтернету, як мінімум буде підібраний транзитний роутер, який має два інтерфейси: IPv6-Yggdrasil і, наприклад, звичайний IPv4. У свою чергу, інші Yggdrasil-Only роутери можуть виступати транзитними ланками тунелю, але тільки для сполучення з вузлами сумісними по транспорту, тобто. також мають мережевий інтерфейс Yggdrasil. Чим більше в мережі I2P кількість роутерів з одночасно включеними IPv4, IPv6 та Yggdrasil інтерфейсами, тим зв'язніша мережа.

Підключення до I2P через Yggdrasil
Підключення до I2P через Yggdrasil

Перспектива

Приклад з Yggdrasil є приватним кроком у майбутнє, а не самоціллю. Описаний досвід успішної інтеграції прихованої мережі в меш-мережа є важливим концептуальним кроком, який за потреби дозволить інтегрувати мережу I2P в інші меш-мережі. Перспектива відкривається під час розгляду самоорганізованих сегментів меш-сети, наприклад, у багатоквартирних будинках без централізованого провайдера. У локальній мережі клієнт Yggdrasil автоматично знаходить інші вузли і повідомляється з ними, сам виступаючи за потреби транзитним. При підключенні хоча б одного вузла в такому сегменті до іншого сегменту мережі (наприклад, глобального через інтернет), мережі автоматично об'єднуються. Такий підхід до організації мережі став реальнішим, т.к. тепер має місце і друга сторона звичного інтернету – прихована.


Для більш детального ознайомлення зі згаданими технологіями, рекомендую статті: про I2P та про Yggdrasil .

I2P over Yggdrasil: Anonymity in Mesh Networks

 

I2P over Yggdrasil: Anonymity in Mesh Networks

Hornbeam
6 min

I2P (Invisible Internet Protocol) is a free tool for organizing anonymous communications via the Internet. It is a peer-to-peer network in which each user is by default a potential link in the anonymous chain of other network participants. I2P traffic is encrypted and cannot be analyzed. The concept of a "watchdog" node in I2P, which is present in the Tor network, does not exist: there is no permanent node through which access to the network is carried out. User interaction with I2P on the home provider side is identified as a chaotic connection to random hosts. The number of client connections with a white IP varies on average around four thousand. In addition to the payload, this includes the exchange of service information with other network routers and transit traffic.

Prerequisites

A significant weakness of the I2P network is the need to contact one of the starting nodes via the regular Internet at the first launch. The packet with the initial network pattern in the form of several random routers and the node that gives it are called a reseed. Starting nodes are held by enthusiasts, their list is publicly available and often undergoes changes due to ordinary human circumstances. The bottleneck is the ability on the provider's side to identify most requests to the reseed through DNS request monitoring, as well as blocking the domains of the starting nodes, which will complicate the first launch for an inexperienced user, since it will require the use of a proxy or VPN.

Blocking the request to the resid on the provider side
Blocking the request to the resid on the provider side

Unlike the regular Internet, I2P users without a dedicated address have a worse quality of using the hidden network than subscribers with a white IP. This is due to the constant need for direct communication with other routers in the network. Each router publishes its address, which includes encryption keys, an IP address, and a port for receiving messages. Obviously, reaching a network node behind a NAT server is not an easy task.

Difference between a user with a dedicated IP and a user behind NAT
Difference between a user with a dedicated IP and a user behind NAT

However, routers without a dedicated address can operate: a client behind a NAT network must constantly maintain an active UDP connection, reserving a port on the provider's output server, requests to which will be transmitted to the client. This scenario is very complex, especially when it comes to initializing a connection from the outside. The mechanics of a client behind a NAT are a work of engineering thought that deserves a separate article.

Briefly about Yggdrasil

Yggdrasil Network is one of the few working mesh network protocols. The main concept is automatic routing in the internal IPv6 subnet (200::/7) and absolute scalability. Yggdrasil is a completely peer-to-peer network: there are no "master nodes" to which any global responsibility is delegated. It is an ideological continuation of the CJDNS (Hyperboria) project.

The abstract idea of ​​a mesh network puts performance, privacy and ease of use at the forefront: traffic encryption and a low threshold for new users. Yggdrasil is not an anonymity tool, since the nodes closest to the user see their real network interfaces in the local network, or their IP address when connecting to a public peer via the Internet. Mesh networks are used to organize pseudo-local networks, uniting remote computers into one IPv6 network (similar to Hamachi for playing Minecraft and other multiplayer games). It is also used to organize other intranet resources such as websites and VoIP telephony.

First attempts at integration

A small note

The I2P router publishes its addresses, including IPv6, if it is enabled in the config and is actually available. Since Yggdrasil provides the user not with a local proxy, but with a full-fledged network interface (using the TUN driver from WireGuard), until recently the I2P router published an IPv6 address from the Yggdrasil subnet. Since there were more than one or even two users with the IPv6 protocol enabled in the I2P router configuration and Yggdrasil installed, it was possible to periodically see that the I2P client (router) communicates with other Yggdrasil addresses.

However, the following disadvantages are obvious:

  1. access to the resid must ultimately be done via the regular Internet;

  2. the IPv6-Yggdrasil address published by the router is unknown and inaccessible to the vast majority of I2P users;

  3. successful launch of the I2P router on a Yggdrasil-Only device is unlikely due to the possible absence of nodes with an IPv6-Yggdrasil address in the router's resid or local database.

Beginning of full compatibility

Since version 2.36.0, i2pd has several new configuration parameters, the main one being meshnets.yggdrasil=true. This parameter does not depend on the IPv4 and IPv6 configuration. In particular, real network interfaces can be disabled. In this case, the I2P router will operate in Yggdrasil-Only mode.

A special resid is also organized, accessible from Yggdrasil and giving the user a package primarily consisting of known routers with an IPv6-Yggdrasil address. Each time an I2P router running in Yggdrasil-Only mode is started, a check is made for the presence of accessible nodes in the local database at the transport level, i.e. the presence of other nodes with IPv6-Yggdrasil. If for some reason there are no compatible routers in the local database, a repeated request to the Yggdrasil resid occurs.

With Yggdrasil used today mostly through overlay connections to public peers over the Internet, the I2P router in Yggdrasil works like a “Tor-over-VPN” setup: it completely hides the fact that you are using a hidden network from your home ISP. In the case of I2P, there is another specific advantage: the user does not need to have a dedicated IP from the ISP to seamlessly access external connections, since IPv6-Yggdrasil is globally accessible within the Yggdrasil network segment (a physically connected group of participants, including through public peers on the Internet).

Network Integrity

The solution described is not a factor in I2P fragmentation. Building hidden network tunnels is a very capacious and even delicate process, which includes coordinating the nodes' transport capabilities. When forming a "garlic" - an encrypted message to a group of nodes that must form a tunnel - the router checks their addresses for compatibility. For example, a node with a single IPv4 address will not receive an instruction that it must establish contact with an IPv6 address, since this is obviously impossible.

In order for a Yggdrasil-Only router to build a tunnel to a node with an address from the regular Internet, at least a transit router will be selected that has two interfaces: IPv6-Yggdrasil and, for example, regular IPv4. In turn, other Yggdrasil-Only routers can also act as transit links in the tunnel, but only for communication with nodes compatible in transport, i.e. also having a Yggdrasil network interface. The more routers in the I2P network with simultaneously enabled IPv4, IPv6 and Yggdrasil interfaces, the more connected the network.

Connecting to I2P via Yggdrasil
Connecting to I2P via Yggdrasil

Perspective

The Yggdrasil example is a particular step into the future, not an end in itself. The described experience of successful integration of a hidden network into a mesh network is an important conceptual step, which, if necessary, will allow integrating the I2P network into other mesh networks. The prospect opens up when considering self-organized segments of a mesh network, for example, in apartment buildings without a centralized provider. In a local network, the Yggdrasil client automatically finds other nodes and communicates with them, acting as a transit one itself if necessary. When connecting at least one node in such a segment to another network segment (for example, to a global one via the Internet), the networks are automatically united. This approach to network organization has become even more realistic, since now there is also a second side of the familiar Internet - the hidden one.


For a more detailed acquaintance with the mentioned technologies, I recommend the articles: about I2P and about Yggdrasil .

 Абсолютно вірно, підхід "без очікування на монетизацію" може бути корисним, особливо на ранніх стадіях проєкту. Це дозволяє сконц...