mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-02-19 06:22:41 +00:00
150 lines
No EOL
12 KiB
Text
150 lines
No EOL
12 KiB
Text
# Анонімний піринг 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:
|
||
=> https://github.com/PurpleI2P/i2pd
|
||
|
||
- оскільки він дозволяє з коробки налаштувати підключення в режимі Yggdrasil-only (минаючи прямі з'єднання в Інтернет) і може бути корисним в умовах, коли піринговий трафік через Інтернет може бути не бажаним.
|
||
|
||
Переглянувши доступні клієнти:
|
||
=> https://i2pd.readthedocs.io/en/latest/tutorials/filesharing/
|
||
|
||
- відкинув вже згаданий qBittorrent і BiglyBT (https://www.biglybt.com/) через їх універсальність; XD (https://github.com/majestrate/XD) - як такий, що "крашить" i2pd. Тому з кандидатів лишився I2P-only I2PSnark.
|
||
|
||
### I2PSnark
|
||
|
||
I2PSnark - є частиною Java роутера I2P.Plus:
|
||
=> https://gitlab.com/i2pplus/I2P.Plus
|
||
|
||
Але моя збірка використовує i2pd (C++). На щастя, розробники заморочились і написали скрипт для генерації артефакту
|
||
=> https://gitlab.com/i2pplus/I2P.Plus/-/jobs/artifacts/master/raw/i2psnark-standalone.zip?job=Java8 i2psnark-standalone.zip
|
||
|
||
- тобто цей клієнт можна запустити як окрему програму та під'єднати до наявного демона i2pd через API/I2CP (один з протоколів комунікації застосунків мережі I2P)
|
||
|
||
Для "встановлення" в Linux, достатньо розпакувати архів до потрібної вам теки з програмами користувача і запустити скрипт `launch-i2psnark` (для Windows це наче має бути `launch-i2psnark.bat`). Якщо потрібно зібратись з сорсу - дивіться інструкції генерації артефакту відповідно до актуальної версії, особисто я не бачу сенсу білдитись тут руками. Само собою, для запуску I2PSnark повинна бути встановлена віртуальна машина Java:
|
||
|
||
``` bash
|
||
apt install default-jre
|
||
```
|
||
|
||
### i2pd
|
||
|
||
Пара слів про i2pd.
|
||
|
||
По-перше, якщо в налаштуваннях роутера не увімкнено протокол I2CP - вмикаємо:
|
||
|
||
``` /etc/i2pd.conf
|
||
#/etc/i2pd.conf
|
||
[i2cp]
|
||
enabled = true
|
||
```
|
||
* або запускаємо роутер з аргументом `--i2cp.enabled=true`
|
||
|
||
По-друге, цей роутер в мене встановлено на віддаленому сервері, тому якщо запустити стандартну конфігурацію I2PSnark, він не зможе підключитись до локалхосту (127.0.0.1). Якщо у вас аналогічна ситуація, відредагуємо додатково:
|
||
|
||
``` /etc/i2pd.conf
|
||
#/etc/i2pd.conf
|
||
[i2cp]
|
||
address = a.a.a.a
|
||
```
|
||
* `a.a.a.a` - IP адреса віддаленого i2pd роутера, це може бути локальна IPv4 або IPv6 адреса
|
||
|
||
Якщо роутер віддалений, не забуваємо відкрити відповідний порт для клієнтського хосту:
|
||
|
||
``` bash
|
||
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 відбувається командою:
|
||
|
||
``` bash
|
||
./launch-i2psnark
|
||
```
|
||
* після цього має автоматично відкритись вкладка типового браузера за адресою http://127.0.0.1:8002/i2psnark/
|
||
|
||
### Підключення до віддаленого роутера i2pd
|
||
|
||
У разі, якщо роутер i2pd віддалений, перше що треба зробити - це зайти до налаштувань WebUI:
|
||
|
||
=> anonymous-torrents-with-i2psnark-over-i2pd/i2psnark-settings-button.png Кнопка налаштувань I2PSnark в браузері (скріншот)
|
||
|
||
І вказати актуальний його хост (Configuration > Tunnel Configuration > I2CP Host)
|
||
|
||
=> anonymous-torrents-with-i2psnark-over-i2pd/i2cp-host-configuration.png Налаштування хосту I2CP в I2PSnark (скріншот)
|
||
|
||
В принципі, можна вказати до запуску, у файлі `/i2psnark/i2psnark.config.d/i2psnark.config`:
|
||
|
||
``` /i2psnark/i2psnark.config.d/i2psnark.config
|
||
i2psnark.i2cpHost=a.a.a.a
|
||
```
|
||
|
||
### Налаштування довжини ланцюжка з'єднань
|
||
|
||
На що варто звернути увагу перед початком обміну файлами - це довжина "хопів" або точок ретрансляції. Ці налаштування знаходяться в тому ж розділі (Configuration > Tunnel Configuration > Inbound Settings та Outbound Settings)
|
||
|
||
=> anonymous-torrents-with-i2psnark-over-i2pd/tunnel-hops-settings-in-i2psnark.png Налаштування довжини тунелів I2PSnark (скріншот)
|
||
|
||
Тут можна поставити значення "2" або навіть "1", адже заплутаність маршруту - не є останнім засобом анонімізації, яку використовує I2P: зокрема клієнт I2PSnark генерує випадкові PeerID, а трафік в каналі є зашифрованим, до того ж (у моєму випадку) загорнутий в Yggdrasil. Не варто зайвий раз навантажувати транзитні вузли ціною вашого ж часу на завантаження серіалу.
|
||
|
||
### Користування
|
||
|
||
Для зручності запуску, в системах Linux можна створити системний сервіс:
|
||
|
||
``` /etc/systemd/system/i2psnark.service
|
||
#/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` - зупинити
|
||
|
||
Стосовно інтерфейсу, хто користувався торентами і здатен поставити описаний вище софт - зорієнтується як додавати через веб-адмінку файли .torrent і посилання Magnet.
|
||
|
||
Для адміністрування роздач пачкою, створюється умовна тека `/path/to/data`, якщо в її корінь додати торент-файли, вони будуть автоматично розпізнані клієнтом і з'являться в списку на головній сторінці Веб-панелі, а дані торентів - будуть завантажені відносно її кореня.
|
||
|
||
Щодо трекерів, то в мережі I2P є різні ресурси, найвідоміший і найстаріший з них - це tracker2.postman.i2p (він вже входить до стандартного пресету)
|
||
|
||
Якщо у вас є сумніви стосовно якості реалізації i2pd / I2PSnark, скористайтесь додатковими засобами віртуалізації, наприклад без використання мережного інтерфейсу як такого:
|
||
=> linux-isolation-from-direct-internet-connections-based-on-qemu-virtual-machine-manager-with-vsock.gmi Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK
|
||
|
||
## Посилання
|
||
|
||
=> gemini://bbs.geminispace.org/s/I2P/33859 Обговорення матеріалу на BBS
|
||
=> https://devzone.org.ua/post/anonimne-korystuvannia-bittorrent-z-i2psnark-ta-i2pd Веб-адаптація цього матеріалу з коментарями на DevZone
|
||
|
||
### Читайте також
|
||
|
||
=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією
|
||
=> setup-i2pd-with-i2p-network-connection-over-yggdrasil.gmi Встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil |