Анонімний піринг BitTorrent з I2PSnark та i2pd

Давно цікавлюсь тематикою альтернативних мереж, зокрема - експериментую з Yggdrasil в контексті BitTorrent. Про мережу I2P (https://uk.wikipedia.org/wiki/I2P) знаю давно, але мені жодного разу не доводилось нею користуватись. Утім, організувавши на прохання деяких користувачів доступ по I2P до форуму адміністраторів альтернативних мереж, налаштувавши дзеркало свого блогу Gemini, та ретрансляцію каналів eQtv і Громадське радіо, стало цікаво також спробувати цю мережу і в контексті торентів.

Для одночасного обміну файлами в Інтернет, Yggdrasil і Mycelium - я користуюсь вільним клієнтом qBittorrent (https://www.qbittorrent.org), що з коробки працює на всі мережі (Інтернет та Yggdrasil через подвійний стек IPv4/IPv6) і має гнучкі налаштування для керування великими колекціями. Але Yggdrasil не є анонімною мережею, а qBittorrent - допускає в такому випадку непередбачені з'єднання в гібридному режимі, оскільки розроблявся перш за все для максимальної конективності, а не для анонімізації/деперсоналізації. Так, в ньому є експериментальна опція I2P та універсальна реалізація проксі SOCKS5, але я вже помічав за цим клієнтом "сюрпризи" у вигляді вихідних з'єднань на веб-сокет IPv4 при біндінгу на IPv6 та інші нюанси, що в цілому залежать від конкретної версії.

Ситуація не краще й з віднайденою мною бібліотекою librqbit (на базі якої мав намір створити приватно-орієнтований клієнт GTK для оверлейних мереж) де наприклад не можливо вимкнути PEX (https://en.wikipedia.org/wiki/Peer_exchange), для чого треба користуватись костилями blacklist. Взагалі, тему приватного користування торентами в контексті оверлейних мереж краще розкрити окремо, бо тут є що розповісти.

Інфраструктура I2P

В своїй конфігурації I2P, я використовую C++ роутер i2pd:

- оскільки він дозволяє з коробки налаштувати підключення в режимі Yggdrasil-only (минаючи прямі з'єднання в Інтернет) і може бути корисним в умовах, коли піринговий трафік через Інтернет може бути не бажаним.

Переглянувши доступні клієнти:

- відкинув вже згаданий qBittorrent і BiglyBT (https://www.biglybt.com/) через їх універсальність; XD (https://github.com/majestrate/XD) - як такий, що "крашить" i2pd. Тому з кандидатів лишився I2P-only I2PSnark.

I2PSnark

I2PSnark - є частиною Java роутера I2P.Plus:

Але моя збірка використовує i2pd (C++). На щастя, розробники заморочились і написали скрипт для генерації артефакту

i2psnark-standalone.zip

- тобто цей клієнт можна запустити як окрему програму та під'єднати до наявного демона i2pd через API/I2CP (один з протоколів комунікації застосунків мережі I2P)

Для "встановлення" в Linux, достатньо розпакувати архів до потрібної вам теки з програмами користувача і запустити скрипт `launch-i2psnark` (для Windows це наче має бути `launch-i2psnark.bat`). Якщо потрібно зібратись з сорсу - дивіться інструкції генерації артефакту відповідно до актуальної версії, особисто я не бачу сенсу білдитись тут руками. Само собою, для запуску I2PSnark повинна бути встановлена віртуальна машина Java:

apt install default-jre

i2pd

Пара слів про i2pd.

По-перше, якщо в налаштуваннях роутера не увімкнено протокол I2CP - вмикаємо:

#/etc/i2pd.conf
[i2cp]
enabled = true

По-друге, цей роутер в мене встановлено на віддаленому сервері, тому якщо запустити стандартну конфігурацію I2PSnark, він не зможе підключитись до локалхосту (127.0.0.1). Якщо у вас аналогічна ситуація, відредагуємо додатково:

#/etc/i2pd.conf
[i2cp]
address = a.a.a.a

Якщо роутер віддалений, не забуваємо відкрити відповідний порт для клієнтського хосту:

ufw allow from b.b.b.b to a.a.a.a port 7654 proto tcp

Запуск

Як згадано вище, запуск I2PSnark відбувається командою:

./launch-i2psnark

Приклад systemd

Для зручності запуску, в системах Linux можна створити системний сервіс:

#/etc/systemd/system/i2psnark.service
[Unit]
After=network.target

[Service]
Type=idle

# useradd -m i2psnark
User=i2psnark
Group=i2psnark

# за умови, що I2PSnark розпаковано до теки користувача
WorkingDirectory=/home/i2psnark
ExecStart=/home/i2psnark/i2psnark/launch-i2psnark

# опціонально, можна вказати як null
# StandardOutput=file:///home/i2psnark/debug.log
# StandardError=file:///home/i2psnark/error.log

[Install]
WantedBy=multi-user.target

Підключення до віддаленого роутера i2pd

У разі, якщо роутер i2pd віддалений, перше що треба зробити - це зайти до налаштувань WebUI:

Кнопка налаштувань I2PSnark в браузері (скріншот)

І вказати актуальний його хост (Configuration > Tunnel Configuration > I2CP Host)

Налаштування хосту I2CP в I2PSnark (скріншот)

В принципі, можна вказати до запуску, у файлі i2psnark.config:

i2psnark.i2cpHost=a.a.a.a

Налаштування довжини ланцюжка з'єднань

На що варто звернути увагу перед початком обміну файлами - це довжина "хопів" або точок ретрансляції. Ці налаштування знаходяться в тому ж розділі (Configuration > Tunnel Configuration > Inbound Settings та Outbound Settings)

Налаштування довжини тунелів I2PSnark (скріншот)

Тут можна поставити значення "2" або навіть "1", адже заплутаність маршруту - не є останнім засобом анонімізації, яку використовує I2P: зокрема клієнт I2PSnark генерує випадкові PeerID, а трафік в каналі є зашифрованим, до того ж (у моєму випадку) загорнутий в Yggdrasil. Не варто зайвий раз навантажувати транзитні вузли ціною вашого ж часу на завантаження серіалу.

Налаштування швидкості

I2PSnark має "комфортні" обмеження з коробки, тобто такі, що не перевантажують пропускний канал роутера. Тому, якщо ви, як і я, не дуже активно сьорфите мережею I2P, можна збільшити ліміти на вхідний / вихідний трафік в розділі Configuration > Torrent Options > Bandwidth limit:

Налаштування ліміту швидкості каналу I2PSnark

Налаштування локального сховища

Варто звернути увагу на те, де будуть зберігатись завантажені та поширювані файли. Вказати шлях до кореневої теки можна в розділі Configuration > Data Storage > Data directory:

Налаштування локального сховища I2PSnark

Користування

Стосовно інтерфейсу, хто користувався торентами і здатен поставити описаний вище софт - зорієнтується як додавати через веб-адмінку файли `.torrent` і посилання Magnet. Зі свого першого досвіду, можу сказати, що цей клієнт дуже "дивний" і так би мовити не інтерактивний. Тут потрібен час, щоб вивчити кожний його нюанс, тому не поспішайте сідити з нього великі колекції.

Декілька порад, що можуть стати в нагоді початківцям:

Трекери

Щодо трекерів, то в мережі I2P є різні ресурси, найвідоміший і найстаріший з них - це tracker2.postman.i2p

b32

- він вже входить до стандартного пресету I2PSnark; створюючи новий торент для відвантаження на цей трекер - переконайтесь, що його адресу додано до списку:

Додавання трекерів до нової роздачі в I2PSnark

Якщо ви користуєтесь іншим трекером і його немає в стандартному списку, додати такий (як і налаштувати власні фільтри) можна в Configuration > Trackers і Torrent create file filtering відповідно:

Налаштування користувацьких трекерів та фільтрів в I2PSnark

Поради з безпеки

Будь-який роутер I2P реалізує класичну технологію пірингу (P2P), це означає, що ваш пристрій надсилатиме запити на випадкові адреси IP, отримані в процесі роботи роутера (подібно до звичайного клієнта BitTorrent). I2P не маскує ваше користування цією мережею, а лише ідентичність в ній. Тому, якщо такі технології, зокрема що базовані на BitTorrent/DHT - частково або повністю обмежені у вашій країні як такі, підключайтесь до I2P через VPN або локальні мережі типу Yggdrasil. Проаналізувати якість налаштувань та активні підключення (наявність витоків трафіку), зручно програмою Etherape:

Якщо у вас є сумніви стосовно якості реалізації i2pd / I2PSnark, скористайтесь додатковими засобами віртуалізації, наприклад без використання мережного інтерфейсу як такого:

Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK

Посилання

Обговорення матеріалу на BBS
Веб-адаптація цього матеріалу з коментарями на DevZone

Тематичні відео

Acetone

BitTorrent over I2P. Анонимный обмен файлами через даркнет без регистрации и СМС | №12
BitTorrent роздача цього відео на tracker2.postman.i2p
Пул "Acetone Video archive" на tracker2.postman.i2p

LibreTrack

Работа с торрентами в сети I2P

Читайте також

Yggdrasil - мережа з децентралізованою маршрутизацією
Встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil