i2pd 3.0: Первый мажорный релиз за 11 лет

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

http://i2pgeo.i2p/downloads/i2pmap-global-EU-dark.pdf
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
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++

Источник: https://habr.com/ru/articles/1098476/


Интересные статьи

Интересные статьи

После реализации любого алгоритма обработки сигналов в MATLAB или Simulink® следующим логичным шагом будет проверка работоспособности алгоритма на реальных данных, полученных от аппаратной программно-...
Когда CRM в Битрикс24 начинает открывать список сделок по 10 секунд, обычно первым делом подозревают сервер, нагрузку или саму платформу. Но на практике узкое место часто лежит ближе к базе: фильтры п...
Привет, хабровчане! На связи Алиса — тимлид в e-commerce агентстве KISLOROD.Кто о чем, а я продолжаю рассказывать, как сшипперить Bitrix и Laravel. В первой части я рассказывала, как по...
Привет! Это Илья, руководитель проектов в Webest. Домен нужен каждому проекту, но подобрать доменное имя — тот ещё квест. Мы решили эту задачу, разработав ИИ-генератор доменных имён. В его основе Yand...
Один из крупных клиентов нашей компании попал в грустную ситуацию: базы данных подросли, потребности тоже, купили мощные NUMA-сервера, установили любимую файловую систему ZFS (ZFS — для краткости: фор...