Анонімний піринг 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++). На щастя, розробники заморочились і написали скрипт для генерації артефакту
- тобто цей клієнт можна запустити як окрему програму та під'єднати до наявного демона 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
- або запускаємо роутер з аргументом `--i2cp.enabled=true`
По-друге, цей роутер в мене встановлено на віддаленому сервері, тому якщо запустити стандартну конфігурацію I2PSnark, він не зможе підключитись до локалхосту (127.0.0.1). Якщо у вас аналогічна ситуація, відредагуємо додатково:
#/etc/i2pd.conf [i2cp] address = a.a.a.a
- `a.a.a.a` - IP адреса віддаленого i2pd роутера, це може бути локальна IPv4 або IPv6 адреса
Якщо роутер віддалений, не забуваємо відкрити відповідний порт для клієнтського хосту:
ufw allow from b.b.b.b to a.a.a.a port 7654 proto tcp
- `b.b.b.b` - адреса, де встановлено клієнт I2PSnark
- `a.a.a.a` - адреса роутера i2pd
- якщо `a.a.a.a` == `127.0.0.1` або `::1` (тобто I2PSnark і i2pd на одному пристрої) то відкривати порт не потрібно
Запуск
Як згадано вище, запуск I2PSnark відбувається командою:
./launch-i2psnark
- після цього має автоматично відкритись вкладка типового браузера за адресою http://127.0.0.1:8002/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
- `systemctl start i2psnark` - старт
- `systemctl enable i2psnark` - додати в авто-запуск
- `systemctl status i2psnark` - перевірка статусу
- `systemctl stop i2psnark` - зупинити
Підключення до віддаленого роутера i2pd
У разі, якщо роутер i2pd віддалений, перше що треба зробити - це зайти до налаштувань WebUI:
І вказати актуальний його хост (Configuration > Tunnel Configuration > I2CP Host)
В принципі, можна вказати до запуску, у файлі i2psnark.config:
i2psnark.i2cpHost=a.a.a.a
Налаштування довжини ланцюжка з'єднань
На що варто звернути увагу перед початком обміну файлами - це довжина "хопів" або точок ретрансляції. Ці налаштування знаходяться в тому ж розділі (Configuration > Tunnel Configuration > Inbound Settings та Outbound Settings)
Тут можна поставити значення "2" або навіть "1", адже заплутаність маршруту - не є останнім засобом анонімізації, яку використовує I2P: зокрема клієнт I2PSnark генерує випадкові PeerID, а трафік в каналі є зашифрованим, до того ж (у моєму випадку) загорнутий в Yggdrasil. Не варто зайвий раз навантажувати транзитні вузли ціною вашого ж часу на завантаження серіалу.
Налаштування швидкості
I2PSnark має "комфортні" обмеження з коробки, тобто такі, що не перевантажують пропускний канал роутера. Тому, якщо ви, як і я, не дуже активно сьорфите мережею I2P, можна збільшити ліміти на вхідний / вихідний трафік в розділі Configuration > Torrent Options > Bandwidth limit:
Налаштування локального сховища
Варто звернути увагу на те, де будуть зберігатись завантажені та поширювані файли. Вказати шлях до кореневої теки можна в розділі Configuration > Data Storage > Data directory:
- Якщо в Data directory через файловий менеджер або FTP додати торент-файли, вони будуть автоматично розпізнані клієнтом і з'являться в списку на головній сторінці Веб-панелі, а дані торентів - будуть завантажені відносно її кореня
- I2PSnark підтримує символічні посилання, тому якщо у вас для сховища примонтовані різні диски з файлами, для них в Data directory можна створити вказівники командою `ln -s`
Користування
Стосовно інтерфейсу, хто користувався торентами і здатен поставити описаний вище софт - зорієнтується як додавати через веб-адмінку файли `.torrent` і посилання Magnet. Зі свого першого досвіду, можу сказати, що цей клієнт дуже "дивний" і так би мовити не інтерактивний. Тут потрібен час, щоб вивчити кожний його нюанс, тому не поспішайте сідити з нього великі колекції.
Декілька порад, що можуть стати в нагоді початківцям:
- При першому запуску, дочекайтесь індексації каталогу і відбудови усіх роздач у спику. Поки вона не завершиться, не варто додавати нові, бо вони з'являться тільки після завершення усіх попередніх процесів у черзі. Можливо, це пов'язано з реалізацією UI/API, але таке враження що I2PSnark працює в одному потоці і не реагує, коли ви шлете через WebUI нову команду. Це дуже збиває з толку, бо консоль і журнали не реєструють ініціацію нових подій.
- Не додавайте кастомні шляхи при імпорті торентів з WebUI, окрім того що вказано в Data directory. Я так робив та після хард-ребуту (зникло світло), в мене відвалились роздачі розміщені за рамками стандартної теки - довелось руками писати символічні посилання. Ці шляхи я згодом віднайшов у профілі I2PSnark (/path/to/i2psnark.config.d/xx/xx.config), але їх зміна в мене не працює; можливо там є часові мітки або ще щось мені не відоме.
- Зверніть увагу, що в екосистемі I2P торенти мають не формальний ліміт файлів (inode) 2000 на торент. Таке ж значення вказане в I2PSnark. Хоча ця опція є в налаштуваннях, вона доступна тільки на читання. В принципі, ви можете її змінити в конфігурації профілю (i2psnark.maxFilesPerTorrent=5000) і перезапустити клієнт, але інші користувачі I2PSnark не зможуть її обробити, якщо як і ви, не змінили цей стандартний ліміт локально. Тобто ваша роздача буде напів-сумісною з мережею: також, відомі трекери валідують кількість файлів на торент. Якщо ваша роздача містить більше 2000 файлів, їх варто або заархівувати або розбити на окремі торенти, які згодом організувати в рамках так званого "пулу" або "колекції".
Трекери
Щодо трекерів, то в мережі I2P є різні ресурси, найвідоміший і найстаріший з них - це tracker2.postman.i2p
- він вже входить до стандартного пресету I2PSnark; створюючи новий торент для відвантаження на цей трекер - переконайтесь, що його адресу додано до списку:
- можна вказати альтернативні трекери (колонка Alternates) для кращої конективності DHT;
- поле "Content Filters" - наскільки я розумію, дозволяє прибрати з роздачі системні файли;
- поле "Data to seed" - назва файлу або теки у файловій системі (відносно Data directory) або абсолютний альтернативний шлях, який з досвіду вище я використовувати не раджу.
Якщо ви користуєтесь іншим трекером і його немає в стандартному списку, додати такий (як і налаштувати власні фільтри) можна в Configuration > Trackers і Torrent create file filtering відповідно:
Поради з безпеки
Будь-який роутер I2P реалізує класичну технологію пірингу (P2P), це означає, що ваш пристрій надсилатиме запити на випадкові адреси IP, отримані в процесі роботи роутера (подібно до звичайного клієнта BitTorrent). I2P не маскує ваше користування цією мережею, а лише ідентичність в ній. Тому, якщо такі технології, зокрема що базовані на BitTorrent/DHT - частково або повністю обмежені у вашій країні як такі, підключайтесь до I2P через VPN або локальні мережі типу Yggdrasil. Проаналізувати якість налаштувань та активні підключення (наявність витоків трафіку), зручно програмою Etherape:
Якщо у вас є сумніви стосовно якості реалізації i2pd / I2PSnark, скористайтесь додатковими засобами віртуалізації, наприклад без використання мережного інтерфейсу як такого:
Посилання
Тематичні відео
Acetone
LibreTrack