mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-02-19 06:22:41 +00:00
add pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi
This commit is contained in:
parent
b9013a4f12
commit
4a8a2ded80
2 changed files with 153 additions and 0 deletions
|
|
@ -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
|
=> 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
|
=> 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
|
=> linux-isolation-from-direct-internet-connections-based-on-qemu-virtual-machine-manager-with-vsock.gmi 2025-09-25 Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK
|
||||||
|
|
|
||||||
152
public/uk/pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi
Normal file
152
public/uk/pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi
Normal file
|
|
@ -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</" /srv/pyseeder/output/seed.html`
|
||||||
|
* інші можна лишити як є (тимчасові файли стандартно зберігатимуться в `/tmp/*`)
|
||||||
|
|
||||||
|
Цей скрипт зручно виконувати через crontab з іншого скрипта, перед з командою `pyseeder reseed ...`
|
||||||
|
|
||||||
|
## Тестування
|
||||||
|
|
||||||
|
Для перевірки, на цільовому сервері (з попередньо встановленим pyseeder) виконуємо команду:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
pyseeder transport.pull --urls http://[302:68d0:f0d5:b88d::9216]/ --outfile /path/to/i2pseeds.su3
|
||||||
|
```
|
||||||
|
* для запобігання помилки парсера, важливо вказати слеш в кінці URL
|
||||||
|
|
||||||
|
## Посилання
|
||||||
|
|
||||||
|
=> 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue