From 4a8a2ded8070424bb93ec2a9333590b46cfe9db7 Mon Sep 17 00:00:00 2001 From: postscriptum Date: Sat, 4 Oct 2025 18:59:30 +0300 Subject: [PATCH] add `pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi` --- public/uk/index.gmi | 1 + ...r-i2p-ecosystem-support-with-yggdrasil.gmi | 152 ++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 public/uk/pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi diff --git a/public/uk/index.gmi b/public/uk/index.gmi index 6d8bf71..b5b9f94 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -9,6 +9,7 @@ ### Нотатки +=> pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi 2025-10-04 Pyseeder: підтримка екосистеми I2P в мережі Yggdrasil => setup-i2pd-with-i2p-network-connection-over-yggdrasil.gmi 2025-10-02 Встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil => filter-outgoing-connections-with-ufw.gmi 2025-09-29 Обмеження вихідних з'єднань на Інтернет з ufw => linux-isolation-from-direct-internet-connections-based-on-qemu-virtual-machine-manager-with-vsock.gmi 2025-09-25 Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK diff --git a/public/uk/pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi b/public/uk/pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi new file mode 100644 index 0000000..68c3c18 --- /dev/null +++ b/public/uk/pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi @@ -0,0 +1,152 @@ +# Pyseeder: підтримка екосистеми I2P в мережі Yggdrasil + +Так як при першій ініціалізації вузла i2pd засобами Yggdrasil виникли деякі затримки, вирішив слідом за конектом свого роутера - підняти й додатковий ресід для інших локальних юзерів. + +## Pyseeder + +pyseeder (https://github.com/PurpleI2P/pyseeder) - утиліта командного рядка, написана мовою Python. Вона використовується для різних задач, зокрема для генерації файлу i2pseeds.su3, необхідного для пошуку вузлів при першому запуску роутера I2P (в i2pd, він звичайно вказується в i2pd.conf). Це працює приблизно так, як DNS сід гаманців BitCoin. + +Інструкції з користування pyseeder описані в README.md проєкту: +=> https://github.com/PurpleI2P/pyseeder/blob/master/README.md + +Нижче опишу лише свою конфігурацію. + +### Встановлення + +Для Debian / Linux знадобились такі пакунки: + +``` bash +apt install python3 python3-virtualenv build-essential libssl-dev libffi-dev +``` + +Від користувача, яким планується подальший запуск: + +``` bash +git clone https://github.com/PurpleI2P/pyseeder.git +cd pyseeder +virtualenv --python=python3 venv +. venv/bin/activate +pip3 install . +``` + +### Nginx + +В pyseeder, мене спочатку заплутала наявність сервера, адже для DNS сіда BitCoin - потрібен саме він. Тут же все простіше: потрібно просто згенерувати дамп "пірів" у статичний файл і розмістити його у теці яку слухає будь який Веб-сервер, зокрема Nginx. + +Створімо публічну теку: + +``` bash +mkdir /var/www/pyseeder +chown USER:GROUP /var/www/pyseeder +``` +* `USER:GROUP` - ваше значення + +Копіюємо туди файл seed.html з теки yggdrasil: +=> https://github.com/PurpleI2P/pyseeder/tree/master/yggdrasil + +``` bash +cp yggdrasil/seed.html /var/www/pyseeder +``` + +Приклад налаштувань хосту Nginx можна знайти у файлі reseed_nginx.conf: +=> https://github.com/PurpleI2P/pyseeder/blob/master/yggdrasil/reseed_nginx.conf + +Я організував свій хост наступним чином: + +``` reseed_nginx.conf +limit_req_zone $binary_remote_addr zone=reseed:512k rate=10r/m; +server { + root /var/www/pyseeder; + listen [302:68d0:f0d5:b88d::9216]:80; + # на цьому сервері також прослуховується 0400::/7 (Mycelium) + # listen [505:6847:c778:61a1::9216]:80; + index seed.html; + location /i2pseeds.su3 { + limit_req zone=reseed burst=5; + if ($http_user_agent !~* "Wget/1.11.4" ) { return 403; } + } + location /user_at_mail.i2p.crt { + limit_req zone=reseed; + } +} +``` +* не забудьте додати відповідні маски підмережі або використовуйте основну адресу на іншому порту, якщо 80 зайнятий +* також після змін треба оновити конфігурацію `systemctl reload nginx` + +### Генерація ключа і сертифіката + +``` bash +pyseeder keygen --cert /var/www/pyseeder/user_at_mail.i2p.crt --private-key /path/to/priv_key.pem --signer-id noreply@localhost +``` +* `--cert` потрібен якщо на цільовому сервері увімкнена опція `reseed.verify = true`; якщо ви плануєте стати "офіційним" ресідом, його також потрібно додати до репозиторію i2pd через PR (інакше користувачу потрібно буде вказати цей сертифікат при імпорті пірів для верифікації постачальника i2pseeds.su3) +* `--private-key` - власне **приватний** ключ, яким підписуються дані для експорту +* `--signer-id` - поки не зрозумів, чому цей аргумент обов'язковий, доповню згодом, поки вказав `noreply@localhost` +* пароль на запит можна вказати пустим + +### Генерація i2pseeds.su3 + +``` bash +YOUR_PASSWORD="Pa55w0rd" +echo $YOUR_PASSWORD | pyseeder reseed --netdb /path/to/netDb --private-key /path/to/priv_key.pem --outfile /var/www/pyseeder/i2pseeds.su3 --signer-id noreply@localhost +``` +* `YOUR_PASSWORD` - пароль, який було вказано при `pyseeder keygen` (або кропаємо все до `|` та додаємо аргумент `--no-encryption` якщо пароль відсутній) +* `--netdb` - шлях до бази мережі I2P, це може бути відвільтрована скриптом або "жива" база вузла +* `--outfile` - публічна тека на Веб-сервері, звідки інші піри зможуть її забрати +* `--signer-id` - той само, що вказувався при генерації ключів + +Для оновлення по розкладу crontab, створімо скрипт `crontab.sh`: + +``` crontab.sh + #!/bin/bash +cd /path/to/pyseeder +. venv/bin/activate +#YOUR_PASSWORD="Pa55w0rd" +#echo $YOUR_PASSWORD | pyseeder reseed --netdb /path/to/netDb --private-key /path/to/priv_key.pem --outfile /var/www/pyseeder/i2pseeds.su3 --signer-id noreply@localhost +pyseeder reseed --no-encryption --netdb /path/to/netDb --private-key /path/to/priv_key.pem --outfile /var/www/pyseeder/i2pseeds.su3 --signer-id noreply@localhost +deactivate +``` +* в прикладі вказані сценарії з використанням паролю і без (розкоментуйте потрібне) +* замініть значення `YOUR_PASSWORD`, `/path/to` і `noreply@localhost` на ваші +* додаємо права на виконання: `chmod +x crontab.sh` + +І додамо завдання: + +``` bash +crontab -e +``` +* виконується від потрібного користувача + +``` bash +@hourly /path/to/crontab.sh +``` + +## Фільтрація вузлів Yggdrasil + +В принципі, можна користуватись утилітою з командного рядка (після активації `. venv/bin/activate`) але у випадку піра Yggdrasil, бажано не просто здампити накопичену базу NetDB, але й відфільтрувати вузли Yggdrasil для локальних користувачів, зокрема - віддавати їх в пріоритеті. Цю задачу виконує скрипт: +=> https://github.com/PurpleI2P/pyseeder/blob/master/yggdrasil/y2r.sh y2r.sh + +Перед його запуском, важливо актуалізувати в ньому наступні шляхи: + +* `netdb` - донор: ймовірно, база активного вузла `/var/lib/i2pd/netDb` +* `outdb` - не публічна копія з відфільтрованими резултатами роботи `y2r.sh` +* `sed -i "s/>[0-9]\{1,1000\}$yggaddr https://devzone.org.ua/post/pyseeder-pidtrymka-ekosystemy-i2p-v-merezi-yggdrasil Веб-версія цього матеріалу з коментарями на DevZone + +### Читайте також + +=> setup-i2pd-with-i2p-network-connection-over-yggdrasil.gmi Встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil \ No newline at end of file