company_banner

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

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

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

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

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

Описанные ниже нововведения на момент публикации касаются только i2pd – I2P-роутера на C++. Клиент Yggdrasil на устройство устанавливается отдельно.

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 рекомендую видео:

ITSOFT
Поддержка сайтов на базе собственного дата-центра

Комментарии 30

    0
    Правильно ли я понимаю, про возможные проблемы, что и с выходной нодой tor в нашей стране?
      0
      Yggdrasil и I2P не подразумевают каких-либо выходных прокси по умолчанию (как если бы Tor умел ходить только на .onion-сайты). Однако админ в праве стравить любые сервисы, в том числе и outproxy.
      Но что такое выходное прокси? Это когда вы выпускаете неопределенных пользователей со своего адреса, и, соответственно, готовы к возможной ответственности за их сомнительные действия.
        0
        Спасибо!
        Я очень юный юзер i2pd:) только поставил на двух машинах, с реальным ip и за NAT. Понравилось как легко и непринуждённо посредством этого выбросил наружу домашний http сервер. Но потом запараноился:)
        ps на реальном ip транзит ~50 kByte/s кому интересно.
          0
          >Но потом запараноился:)
          Вот статья как раз об этом :)

          >ps на реальном ip транзит ~50 kB кому интересно.
          1872.07 Kib/s прямо сейчас. Вам думаю стоит поменять параметр bandwidth на более высокий если канал позволяет
            0
            Вам думаю стоит...
            … почитать доки:)
            Добавил скорости. Не совсем понял из FAQ про Floodfill mode, но наверное это пока не я.
            ps имеет ли смысл вынести /var/lib/i2pd/netDb на RAM диск?
            +1
            Вот мой показатель транзита с белым IP и включенным режимом флудфила прямо сейчас (постоянно изменяется) image

            Что касается http-сервера: I2P всё же в первую очередь про анонимность и в силу этого происходит жертва (потеря) скорости. Для бытового использования домашних сервисов за NAT-ом советую посмотреть Yggdrasil Network.
              0
              Приветствую.
              Что скажете вот об этом: habr.com/ru/post/544516/#comment_22749490
              Особенно в свете замедления Твиттера Роскомнадзором.
              Оборудование ТСПУ (подсистема фильтрации) по видимому работает.
      +1

      Спасибо за статью!

        +1
        А более практически — как это всё настраивается? Я знаю что есть i2pd, но не знаю ничего об Yggdrasil. Что именно нужно качать/установить/запускать чтобы завелось i2p через Yggdrasil? Или оно уже встроено в i2pd?
          +3
          1. Сам yggdrasil
          2. i2pd версии 2.36 и выше
          3. параметры конфига i2pd для ygg-only здесь
          4. Если просто использовать ygg как дополнительный транспорт то в конфиг i2pd добавить meshnets.yggdrasil=true
            0

            Благодарю.

              0
              Для большей ясности добавил ремарку в спойлер «Небольшое замечание».
          0

          Подскажите, позволяет ли Yggdrasil / cjdns сделать VPN? Допустим, у меня друг в другой стране, и я и хочу иногда обходить баны, можно ли частичный роутинг для забанненыных ресурсов сделать через него? (Сейчас используется tinc, но он сложноват в настройке)

            0
            Несколько сложная формулировка вопроса. Но в целом mesh-сеть — это как VPN, только бесплатно и абсолютно масштабируемо.
              0

              Разве что с буквой P проблемки — в yggdrasil словом Private даже не пахнет. Просто потому, что проект нацелен на решение других задач. Virtual Open Network?


              PS: для реализации Private поверх yggdrasil можно поднять OpenVPN

                +1
                Концепции несколько отличны, согласен. Однако в Yggdrasil есть нативные средства ограничения доступа с допуском только доверенного списка ключей (указываются в конфиге). Таким образом подключиться к TUN-интерфейсу машины смогут только вручную добавленные пользователи. IPv6-Yggdrasil пользователя извне недоверенные участники сети даже пинговать не смогут, при этом транзитный трафик никак не пострадает.
                  0

                  Ха! А вот это совсем круто! Спасибо!

            0
            Было бы интересно наоборот запустить Yggdrasil поверх I2P в качестве единственной среды передачи данных, чтобы добавить к нему приватность и полную анонимность, не потеряв в функционале. Ну, или, вообще, замкнуть петлю Yggdrasil (приватность, удобно)->I2P(приватность и анонимность, но, неудобно)->Yggdrasil (приватность+анонимность+удобно).
            Понятно, что можно самому настроить точку выхода в Yggdrasil через I2P hidden service, но, тогда по ней-же и вычислят. Так что, тут нужен некий протокол поиска и обмена I2P адресами узлов Yggdrasil, которые работают через I2P.
              0

              Про выход из I2P в Yggdrasil и из Yggdrasil в I2P посредством собственного шлюза. Это весьма просто реализуется любым Proxy Software. Если нет своего, а очень надо, в ознакомительных целях можете воспользоваться моим: http://acetone.i2p/ или http://[324:9de3:fea4:f6ac::ace]/.


              Пустить трафик Yggdrasil через I2P-туннель тоже возможно, только это весьма экзотичный случай, который напрочь отсечет все скоростные преимущества Yggdrasil. Наверное, в большинстве подобных случаев будет удобнее использовать Tor-прокси.


              В части, касающейся удобства/неудобства I2P, я вас не понял. I2Pd — весьма лаконичный инструмент после ознакомления с краткой документацией. Всё интуитивно и конфигурируемо. Для умозрительного понимания механики сети I2P рекомендую к просмотру прикрепленное к посту видео.

                0
                Смысл в создании защищенного (приватного и анонимного) сервиса доступного ВСЕМ пользователям Yggdrasil БЕЗ установки i2pd на своем компе. Приватность и анонимность в данном случае относится к владельцу/хостингу сервиса.
                Использование собственного I2P->Yggdrasil шлюза нивелирует анонимность, т.к. можно будет выяснить настоящий адрес шлюза. Использование единственного чужого шлюза, — не масштабируется.
                  0

                  Примитивное решение вашего кейса:


                  1. Сервер со скрытым I2P-сервисом;
                  2. Yggdrasil с отключенным локальным обнаружением пиров и списком паблик-пиров с подключением через прокси Tor socks://127.0.0.1:9050/address:port. В настоящее время Tor имеет лучшую пропускную способность и более уместен для такого рода извращений.
                  3. Настройка доступности локального скрытого сервиса на адресе IPv6-Yggdrasil.

                  I2P — весьма и весьма специфичная сеть, ставящая скорость передачи данных на последнее место. Действительно серьезные ресурсы не стоит зеркалировать "в лоб", ну а прочие можно и вовсе размещать вне этой скрытой и сложно доступной для новичка среды.

                    0
                    Решение с ТОРом работает, только I2P там не нужен.
                    Не устраивает в данном случае что весь трафик пойдет через Tor exit nodes. В то время, как при наличии протокола резолва I2P адресов, соответствующие узлы могли бы коннектиться напрямую.
                    Я бы, на самом деле, предложил следующую схему:
                    1. Yggdrasil работающий через Tor, который работает на другой машине, и не имеет выхода в сеть в обход Тора.
                    Но тут, как-бы, нет I2P.
                      0
                      Не устраивает в данном случае что весь трафик пойдет через Tor exit nodes

                      Весь трафик Yggdrasil имеет оконечное шифрование, злонамеренные выходные узлы Tor — не угроза.


                      при наличии протокола резолва I2P адресов, соответствующие узлы могли бы коннектиться напрямую (т.е. из Yggdrasil сразу в I2P и обратно, как я понял)

                      Мне кажется, вы хотите скрестить грушу с ёжиком. Это абсолютно разные концепции. Наверняка теоритическая реализация вашего предложения возможна, но примерно также возможна интеграция газонокосилки в болид Формулы-1. Моя позиция в дискуссии мультидоступности всех сетей из всех сетей такая: это попросту никому не нужно.

                        0
                        Выходные узлы Тора, — в первую очередь узкое место и точка отказа. А уже потом, — угроза. Несмотря на шифрование есть угроза анонимности, благодаря возможности корреляционных атак.
                        А на счет не нужно, — сделать I2P прозрачным для пользователя слоем обеспечения анонимности в сети Yggdrasil, — почему бы и нет.
              0

              Я пока так скажу. Я как представлю, как буду рассказывать родителям, как заставить десктопную версию yggdrasil работать — у меня волосы шевелятся. При этом версией yggdrasil для android пользоваться исключительно приятно. Будет статья про мои похождения по дрова в yggdrasil, но позже — пока шишки набиваю

                0
                А что такое «десктопная версия yggdrasil»? У меня он просто бежит как фоновый процесс, единственным результатом работы которого является наличие сетевого интерфейса tun0 с соответствующим ipv6 адресом.
                  +1

                  orignal, об этом, как я понял, и речь. Дескать GUI всем подавай, а демоны пусть у сатанистов на фоне бегают. (с)
                  kai3341, я как раз в процессе написания большой статьи про Yggdrasil (на твое право описывать шишки не претендую:)

                    0

                    pureacetone Видите ли, мы имеем дело с технологией, которая чем более массовая, тем лучше работает. Массовой без GUI ей не быть. Просто попытайтесь рассказать своим родителям, как и зачем устанавливать на их машину yggdrasil. Потом оказывается, что просто установить yggdrasil мало: если машина за NAT, то сушим вёсла. Надо прописать публичные пиры в конфиг. Для этого надо рассказать родителям, где находятся конфиги, как их отредактировать, какие узлы прописать. Отдельный увлекательный квест — синтаксис конфига, где будет отдельная серия граблей. Серьёзно, ну о какой массовости можно говорить?


                    PS: а за готовящуюся статью отдельное спасибо!

                      +1

                      Существует форк Popura от российского энтузиаста. Он реализовал встроенный meshname-DNS (наверное, напишу статью про эту систему, основанную на кодировании IPv6 в Base32), а также автопиринг — автоматическое добавление публичных узлов. Сей персонаж под ником zhoreeq обитает в ILITA IRC, как я неоднократно замечал, поэтому, если интересно, заглядывайте (доступ к ирке через Yggdrasil и I2P).
                      Благо, Yggdrasil — свободный проект, поэтому GUI и всё остальное может предлагать и запиливать любой желающий. Ждём развития. Я конечно всеми руками за веб-интерфейс, т.к. это позволит удобно админить Ygg на удаленных серверах.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое