I2P — одна из самых популярных скрытых сетей. В отличие от TOR, разработка I2P децентрализована — две разные группы людей создают протокол и его реализацию на разных языках (Java и C++). Сообщество I2P не имеет юридического лица и строгой иерархии, в нём нет постоянного источника финансирования, а вот продукт и десятки тысяч активных узлов — есть. Настоящий онлайн‑андеграунд.

http://i2pgeo.i2p/downloads/i2pmap-global-EU-dark.pdf

Прошлый мажорный релиз i2pd с номером 2.1 состоялся в 2015 году. Недавно развитие i2pd дошло до релиза 2.61. Почему 11 лет спустя в октябре 2026 вышел не очередной 2.62, а новый мажорный 3.0? Может быть, потому что 11 в двоичной системе — это 3? Давайте разбираться.

http://major.i2p/ilita/dev/2026/10/02#msg60

Торренты

Обмен файлами — одна из основных потребностей человека в сети. Вне коммерческого поля жил и живёт обмен файлами через BitTorrent, главная проблема которого в утечке IP‑адреса. I2P как peer‑to‑peer сеть отлично подходит для торрентов, а как инструмент анонимности закрывает их единственную архитектурную проблему.

Теперь в i2pd есть встроенный клиент BitTorrent! Начиная с i2pd 3.0.0 вы можете скачивать и раздавать торренты в I2P без дополнительного ПО и на высокой скорости. Если тема анонимного файлообмена интересна, рекомендую после этой статьи заглянуть в BitTorrent over I2P.

Торрент‑клиент в i2pd — не отдельное окно веб‑интерфейса, а новый тип туннеля. Его конфигурация описана в документации. Вся логика работы с торрентами реализована на уровне ядра приложения без дополнительных прослоек API между туннелем и стримами с датаграммами, что радикальным образом сказалось на производительности. Помимо общей конфигурации туннеля (длина и прочее), в торрент‑туннеле настраивается Transmission‑подобный JSON RPC для управления. Минимальный конфиг всего 4 строки, прочие значения по умолчанию можно не трогать.

Минимальный конфиг
Минимальный конфиг

На скриншоте порт RPC указан 7071. Подойдёт любой свободный порт. После создания в веб‑интерфейсе i2pd появится новый туннель с ссылкой на веб‑интерфейс торрент‑клиента.

Клик открывает интерфейс на порту RPC, в моем случае это 7071.

Интерфейс торрент-клиента i2pd по умолчанию
Интерфейс торрент‑клиента i2pd по умолчанию

Дизайн встроенного интерфейса очень аскетичен. Но веб‑файлы не вшиты в бинарник, а лежат отдельно по пути <data-dir>/torrents/web/, поэтому сделать красоту на свой вкус не составит труда. Интерфейс позволяет добавить торрент файлом, либо по magnet‑ссылке.

В документации i2pd есть ссылка на TrguiNG, который позволяет подключиться к торрент‑клиенту i2pd. Он выглядит симпатичнее (но на мой взгляд смысла в нем нет).

TrguiNG
TrguiNG

При подключении внешних приложений к JSON RPC, нужно указывать тот же адрес, что видите в браузере, но окончание /web менять на /rpc.

Пиковая наблюдаемая скорость случайной раздачи достигала 6 МБ/сек. При этом потребление ресурсов (особенно ОЗУ!) при тесте удивляет — на бытовом ПК практически не ощутимо.

Нагрузка на ОС при активном скачивании двух раздач
Нагрузка на ОС при активном скачивании двух раздач

Кажется, пора снова задуматься про домашний медиацентр и сидбокс на базе Raspberry Pi и внешнего диска.

В I2P работает немало публичных торрент‑трекеров, но особое место среди них занимает Postman's Tracker (http://tracker2.postman.i2p), который работает в формате форума и хранит онлайн с 2008 года.

Дыры

Современный пользователь уже наслышан про огромное количество найденных уязвимостей в каждом утюге, холодильнике и операционной системе. За месяц благодаря ИИ находят и исправляют дыр больше, чем раньше находили за 10 лет. Этот качественный скачок коснулся и i2pd.

Категория уязвимости

Количество найденных проблем (примерно)

Атака на роутер. Способ вывести из строя рандомный узел или шатнуть всю сеть.

Гарантированное падение, достижимое снаружи отправкой нескольких пакетов

4 (9 исправляющих коммитов)

Обход проверки, нарушение логики

4 (4 исправляющих коммита)

Расход памяти и процессора

2 (5 исправляющих коммитов)

Атака на конечный адрес. Возможность атаковать роутер, который обслуживает конкретный внутрисетевой адрес *.b32.i2p.

Гарантированное падение, достижимое снаружи отправкой нескольких пакетов

2 (3 исправляющих коммита)

Обход проверки, нарушение логики

5 (8 исправляющих коммитов)

Приятно, что в этом марафоне критичных и не очень дыр нет ничего, что деанонимизировало бы участника сети. Однако если у вас где‑то крутится i2pd, обновление на 3.0.0 — это не вопрос про фичи, а мажорная необходимость для стабильности роутера.

Любопытный факт: I2P регулярно сталкивался с атаками на сеть, которые заметно снижали её стабильность, а иногда прямо приводили к проблемам в работе ПО. Это было и 2 года назад, и 5. То есть до того, как мир публично познакомился с балалайками на GPU, которые находят проблемы там, где у человека физически не получается, потому что вытекают глаза и плавится мозг. Раньше справлялись по факту: в сети появилась аномалия, изучили, пофиксили. Теперь поиск проблем во многом становится превентивным.

Абсолютно новый Android‑клиент

Если вы пробовали пользоваться i2pd на Android до версии 3.0.0, вы помните эту боль: всё через конфигурационные файлы на диске. При этом из коробки на Android нет текстового редактора, через который можно было бы изменять конфиги. В общем, чтобы пользоваться i2pd на смартфоне, надо было по‑настоящему это хотеть.

Теперь у i2pd понятный интерфейс, встроенный конструктор туннелей и редактор конфигов.

i2pd 3.0.0. Android
i2pd 3.0.0. Android

i2pd на Android это то же ядро на C++ с обвязкой на Java, а не самостоятельное приложение. Что из этого следует? Тут тоже появились торренты.

i2pd 3.0.0. Android (torrents)
i2pd 3.0.0. Android (torrents)

Открываете меню «Туннели», жмёте «Добавить туннель» и выбираете тип «Torrents». Из обязательного только указать название туннеля, но также рекомендую выбрать директорию для загрузок. По умолчанию будет использовано приватное хранилище приложения, что не совсем удобно. Например, можно выбрать общие Загрузки или вовсе внешний диск.

Туннелей типа Torrents может быть несколько, для каждого задаются свои настройки (директория сохранения и прочее). Все торрент‑туннели отображаются на главной странице приложения (на скриншоте выше это раздел Services), откуда можно попасть во встроенный торрент‑клиент.

Если приложение плохо работает в фоне, убедитесь, что в настройках Android (Настройки — Приложения — i2pd — Батарея) выдано разрешение на неограниченную работу.

SAM 3.3

Simple Anonymous Messaging — это стандарт взаимодействия с I2P для сторонних приложений. Подробнее о механике можно узнать в статье либо погрузиться в чтиво документации. i2pd поддерживал SAM 3.3 не полностью, что теперь исправлено.

Суть нововведений в поддержке разных стилей подсессий в рамках одной сессии. Это позволяет поднять один внутрисетевой адрес и получать на него как стримы, так и датаграммы разных типов (DATAGRAM, включая их типы 1–3, и RAW). Через конфиг туннелей это было достижимо и раньше, теперь работает через SAM.

C++20 и boost

Произошёл отказ от C++17. Благодаря этому из кода уходят устаревшие подходы C++ в пользу более новых идиом языка, главная цель которых в безопасной работе с памятью и выразительности.

Добавлены новые зависимости boost::beast, boost::json и boost::url. Для полноценной сборки требуется boost 1.81, что делает невозможным нативную сборку в окружении Debian 12 и Ubuntu 22.04. На beast переписана адресная книга, необходимая для работы с короткими доменами в зоне .i2p. Библиотеки json и url не требуются, если собрать i2pd с флагом TORRENTS=no, то есть без поддержки торрентов, и сборка начинает проходить на устаревающих ОС, где уже есть C++20, но нет boost 1.81.


Идея переписать I2P‑роутер на Rust, Go или даже JavaScript существует десятилетие и давно стала нишевым мемом. Вполне вероятно, в эпоху ИИ мы увидим рабочие роутеры на чём‑то ещё, кроме C++ и Java. Но давайте помнить, что два существующих I2P‑роутера являются одним из ярчайших примеров встречи инженерной мысли с сетью, криптографией и откровенной шизой. Теперь напишите реализацию I2P хоть на Python — это будет тотальная ИИ‑генерация. Если нейрослопить, почему бы вместо создания однодневных пет‑проектов не уделить время уже существующим продуктам?

Сам ты легаси © C++

Комментарии (19)


  1. mittorn
    23.10.2026 19:11

    Я когда-то, лет 12-13 назад, пытался собрать i2pd на устройстве с 1гб оперативной памяти: памяти не хватило, так что так и не увидел его в действии, лишь убив несколько суток и кучу нервов на сборку boost. Интересно, с тех пор boost как-то улучшился в этом плане? Вроде бы, благодаря возможностям, появившимся в 17 стандарте он жрать стал меньше, но ненависть к нему, приобретённая ещё тогда, никуда не девается...


    1. pureacetone Автор
      23.10.2026 19:11

      Локально собирать далеко не обязательно. Можно ставить готовые пакеты. C++ легче собираться не стал)


      1. mittorn
        23.10.2026 19:11

        Сейчас - наверно да. Тогда пакетов под armv7-hard-float не было. Теоретически возможность кросскомпилирвоать с более мощной машины была, но неспортивно


    1. orignal
      23.10.2026 19:11

      make DEBUG=N на впс с 1 гигом памяти собирается прекрасно


      1. mittorn
        23.10.2026 19:11

        да, скорее всего сейчас это не актуально и уже соберётся. Проблема boost была в том, что он пытался реализовать возможности условного c++14-17 поверх 11, а то и c++98 страшными костылями...

        Впрочем и сейчас он этим занимается. Чего только стоят pfr со сгенерированной лапшой от 1 до 100 аргументов (которая всё равно сыпется если есть хотя бы один массив в целевом типе) или boost parameter function, через макросы определяющий передачу аргементов, подобную питону (но только до 4 аргументов ЕМНИП, что сводит на нет весь смысл это использовать)


        1. orignal
          23.10.2026 19:11

          i2pd всегда собирался с системным бустом, не понимаю зачем понадобилось собирать буст отдельно


          1. mittorn
            23.10.2026 19:11

            так системный буст на source-based дистрах магическим взмахом волшебной палочки не появляется, он собирается. В бинарных дистрах на arm в начале десятых очень скудная база пакетов была, потому проще было сразу source-based ставить


    1. Persik1
      23.10.2026 19:11

      На гиге памяти и сейчас компилятор C++ подавится современными шаблонами)


  1. kujoro
    23.10.2026 19:11

    так вроде столько и качал, я по твоему гайду ставил, и на трекер заходил ради интереса, 5мб\с точно было


    1. pureacetone Автор
      23.10.2026 19:11

      У меня на I2PSnark скорости примерно в 2 раза ниже в сравнении с i2pd-клиентом. А про ОЗУ и говорить нечего, снарк намного больше потребляет в силу JVM.


      1. kujoro
        23.10.2026 19:11

        а где ты взял на андрея 3.0 версию? на гатхабе 2.61


        1. pureacetone Автор
          23.10.2026 19:11

          Сегодня-завтра появится, в том числе в F-Droid. На скриншотах dev-билд, R4SAS уже торопится релизнуть


  1. NeoCode2
    23.10.2026 19:11

    i2p интересная штука, но слишком низкоуровневая. И именно это создает высокий порог входа, что препятствует распространению этой сети (и других подобных). i2p технически именно сеть, внутри которой предполагается делать обычные сайты (по крайней мере я так понимаю). А людям это нафиг не нужно. Людям (да и мне в том числе, чего уж там) нужно приложение. Чтобы все было "из коробки". В идеале - приложение по принципу соцсети. Друзья, тематические группы с подпиской и единой лентой новостей, поиск, внутри групп в идеале иерархическая структура как на форумах - на базе этого можно и файлообмен сделать, функция мессенджера и т.д. А с созданием web1-сайтов внутри никто уже в наше время заморачиваться не будет.


    1. Persik1
      23.10.2026 19:11

      Встроенный торрент-клиент как раз и пытается стать тем самым готовым приложением из коробки. До соцсетей далеко, но качать файлы уже можно без плясок с бубном


  1. gluki
    23.10.2026 19:11

    Но веб‑файлы не вшиты в бинарник, а лежат отдельно по пути <data-dir>/torrents/web/

    Установил, прописал [torrents] - туннель поднялся, а по ссылке на веб‑интерфейс торрент‑клиента - 404. Логично - в <data-dir>/torrents/ нет web. UPD: дёрнул её из виндового архива - работает.

    Это я что-то не так установил, или в линуксовые пакеты web ui торрент-клиента почему-то не завезли?


    1. Persik1
      23.10.2026 19:11

      Можно не страдать с распаковкой архивов, а сразу прицепить внешний transmission-remote


  1. Persik1
    23.10.2026 19:11

    Требование к boost 1.81 сразу отсекает старые стабильные дистрибутивы, придется собирать руками или крутить в контейнере


    1. orignal
      23.10.2026 19:11

      Нет. Это требование касается только торрентов, точнее даже только RPC и для старых(например убунту 22.04) собирается без них. Вот требование C++20 действительно отсекает старые, но нельзя же их поддерживать вечно.


  1. Kurnevsky
    23.10.2026 19:11

    Есть имплементация i2p на Rust - emissary. Кто-нибудь пробовал?