====== Ресид I2P ======
Ресид - служебный сервер в сети I2P, предоставляющий актуальную базу пиров при первом запуске роутера i2pd, посредством API.
Подобно BitCoin DNS, инициализация осуществляется путём запроса пиров с "официальных" серверов, указанных в коде роутера или опциональных:
[reseed]
# urls = https://reseed.i2p-projekt.de/,https://i2p.mooo.com/netDb/,https://netdb.i2p2.no/
# yggurls = http://[324:71e:281a:9ed3::ace]:7070/,http://[301:65b9:c7cd:9a36::1]:18801/,http://[320:8936:ec1a:31f1::216]/,http://[316:f9e0:f22e:a74f::216]/
* в текущей версии i2pd, наличие слэша в конце строки URL - обязательно
либо указывается путь к локальному файлу:
[reseed]
file = /path/to/i2pseeds.su3
===== Pyseeder =====
[[ https://github.com/PurpleI2P/pyseeder | pyseeder ]] - утилита, позволяющая генерировать API дамп %%i2pseeds.su3%%, используя собранную в процессе работы роутера i2pd базу netDb (обычно расположена в %%/var/lib/i2pd/netDb%%)
Поскольку в сети I2P ограниченное количество ресидов Yggdrasil, при наличии такой возможности, будет полезно организовать дополнительный сервер.\\
Для этого, достаточно сгенерировать сетевой дамп в директорию Веб-сервера, например Nginx:
$ YOUR_PASSWORD="Pa55w0rd"
$ echo $YOUR_PASSWORD | pyseeder reseed --netdb /path/to/netDb --private-key data/priv_key.pem --outfile /var/www/myhost/i2pseeds.su3 --signer-id user@mail.i2p
* где %%output/i2pseeds.su3%% - условно может быть %%/var/www/myhost/i2pseeds.su3%%
База netDb содержит пиры всех адресных типов, перед выполнением команды %%pyseeder reseed%% для ресида Yggdrasil полезно отфильтровать (в приоритете) только локальные узлы.\\
Делается это скриптом [[ https://github.com/PurpleI2P/pyseeder/blob/master/yggdrasil/y2r.sh | y2r.sh ]], предварительно указав актуальные пути:
* %%netdb%%
* %%outdb%%
* %%temp%%
* %%success%%
* %%padding%%
* %%sed -i "s/>[0-9]\{1,1000\}>$yggaddr" /srv/pyseeder/output/seed.html%%
Также, перед публикацией сервера, потребуется скопировать лэндинг-файл [[ https://github.com/PurpleI2P/pyseeder/blob/master/yggdrasil/seed.html | seed.html ]] в %%/var/www/myhost/seed.html%% (или %%/var/www/myhost/index.html%%) - в котором скрипт %%y2r.sh%% будет обновлять счётчик пиров.
Команду %%pyseeder reseed%% и файл %%y2r.sh%% удобно последовательно собрать в один общий скрипт и выполнять его по расписанию crontab:
#!/bin/bash
cd /path/to/pyseeder
# фильтруем NetDb
yggdrasil/y2r.sh
# генерируем i2pseeds.su3
. 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/myhost/i2pseeds.su3 --signer-id noreply@localhost
pyseeder reseed --no-encryption --netdb /path/to/netDb --private-key /path/to/priv_key.pem --outfile /var/www/myhost/i2pseeds.su3 --signer-id noreply@localhost
deactivate
* в примере, пароль сертификата не используется, вместо этого используется аргумент %%--no-encryption%%
Пример конфигурации файла Nginx есть [[ https://github.com/PurpleI2P/pyseeder/blob/master/yggdrasil/reseed_nginx.conf | в репозитории ]] и может иметь следующий вид:
limit_req_zone $binary_remote_addr zone=reseed:512k rate=10r/m;
server {
root /var/www/myhost;
listen [302:68d0:f0d5:b88d::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;
}
}
Проверить работоспособность API можно командой:
pyseeder transport.pull --urls http://[302:68d0:f0d5:b88d::9216]/ --outfile /path/to/i2pseeds.su3