diff --git a/public/uk/index.gmi b/public/uk/index.gmi index b606905..6d8bf71 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -9,6 +9,7 @@ ### Нотатки +=> 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 => setup-icecast-ezstream-web-radio-on-linux.gmi 2025-09-24 Веб-радіо в Linux: встановлення сервера Icecast та базове налаштування ротації з Ezstream diff --git a/public/uk/setup-i2pd-with-i2p-network-connection-over-yggdrasil.gmi b/public/uk/setup-i2pd-with-i2p-network-connection-over-yggdrasil.gmi new file mode 100644 index 0000000..aa4c045 --- /dev/null +++ b/public/uk/setup-i2pd-with-i2p-network-connection-over-yggdrasil.gmi @@ -0,0 +1,215 @@ +# Встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil + +I2P - це альтернативна мережа, характерною рисою якої є анонімізація користувача. На відміну від Tor, має принципово іншу модель маршрутизації, де стек IP не використовується як такий, а дані відправника вільно циркулюють роєм через випадкові вузли ретрансляції, допоки не досягнуть точки призначення. Таким чином, відправник даних є не визначеним мережею. + +Утім, для підключення до I2P глобально, часто використовується Інтернет. Особливістю цього гайду є спосіб підключення до мережі I2P без прямих звернень Інтернет, через додатковий шар Yggdrasil. Може бути корисним у випадках, якщо ваш провайдер блокує піринговий трафік. + +Метою цього матеріалу не є детальний опис принципу роботи мережі I2P і анонімізація зокрема. Матеріал створено лише у якості нотатки, з досвіду публікації Веб-сайту для української спільноти адміністраторів альтернативних мереж на прохання деяких користувачів, для чого й був потрібен локальний роутер. Якщо вам не потрібно публікувати сайт чи анонімно користуватися мережею I2P, можна просто скористатися наявними вихідними SOCKS/HTTP проксі, в т.ч. для Yggdrasil. + +## Роутер + +Існує декілька відомих мені реалізацій роутера I2P: + +=> https://github.com/i2p/i2p.i2p i2p.i2p (Java) - оригінальна реалізація +=> https://github.com/i2p/i2p-rs i2p-rs (Rust) - стан готовності цього проєкту мені не відомий +=> https://github.com/PurpleI2P/i2pd i2pd (C++) - найбільш повноцінна реалізація, що підтримує з коробки режим роботи Yggdrasil-only + +### i2pd + +Для i2pd є готові збірки та репозиторії для різних дистрибутивів, але сам я завжди надаю перевагу збірці останніх версій програм з початкового коду. Нижче описаний саме такий спосіб, можливо з часом він може втратити свою актуальність через оновлення кодової реалізації. Детальна інструкція доступна в документації: +=> https://i2pd.readthedocs.io/en/latest/devs/building/unix/ + +нижче - приклад встановлення для Debian / Linux. + +### Встановлення + +``` bash +git clone https://github.com/PurpleI2P/i2pd.git +cd i2pd/build +cmake . +make +``` + +Власне, для Debian, можна зібрати пакунок .deb (що може бути більш правильним з точки зору адміністрування) але я встановлював вручну, адже буде зкомпільовано лише один бінарний файл i2pd, який потрібно перемістити до системної теки: + +``` bash +sudo make install +``` + +### Створення системного користувача + +Роутер i2pd я запускатиму від окремого системного користувача зі стандартними привілеями: + +``` +useradd -m i2pd +``` + +### Конфігурація i2pd + +Тепер потрібно створити файл конфігурації, його я розмістив за адресою /etc/i2pd.conf, хоча ви можете додати його до теки користувача, при цьому змінивши шляхи у прикладах нижче: + +``` bash +nano /etc/i2pd.conf +``` + +Оригінальний файл конфігурації [доступний в репозиторії](https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/i2pd.conf), нижче я наведу тільки змінені його опції, але буде правильним звірити їх актуальність на момент встановлення: + +``` /etc/i2pd.conf +# рівень деталізації журналів, я змінив щоб не засмічувати пам'ять +loglevel = error + +# вимикаємо стандартні інтерфейси, +# так як в цьому прикладі підключення відбувається через Yggdrasil +ipv4 = false +ipv6 = false + +# вимикаємо не задіяну в конфігурації Yggdrasil функціональність +[ntcp2] +enabled = false +[ssu2] +enabled = false + +# доступ до веб-адмінки роутера +# цей пункт можна лишити стандартним, +# але в мене в address вказано статичну адресу (віддаленого сервера) +# IP не повинен бути 0.0.0.0, бо доступ буде відхилено через фільтр +[http] +address = 127.0.0.1 +auth = true +user = user +pass = pass + +# дані опції потрібні, якщо ви користуєтесь I2P, наприклад в браузері +# в мене роутер працює на сервері (для веб-сайту) тому ці сокети вимкнено +[socksproxy] +enabled = false +[httpproxy] +enabled = false + +# в мережі I2P використовується окремий протокол комунікації, +# якщо ви не плануєте підключатись до роутера через клієнтський софт, вимикаємо +[sam] +enabled = false + +# вмикаємо конфігурацію роутера для роботи в режимі Yggdrasil +[meshnets] +yggdrasil = true +``` + +Так як я не змінював стандартні шляхи, через помилку запуску згодом, додатково руками створив теку для збереження даних профілю (у вас це може бути тека користувача або інша) + +``` bash +mkdir /var/lib/i2pd +chown i2pd:i2pd /var/lib/i2pd +``` + +Також, вручну скопіював сертифікати ініціальних вузлів до створеної теки /var/lib/i2pd: +=> https://github.com/PurpleI2P/i2pd/tree/openssl/contrib/certificates +інакше в конфігі доведеться вимкнути опцію `reseed.verify` + +### Systemd + +Тепер створімо сервіс systemd. В мене він відрізняється від стандартного: +=> https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/i2pd.service + +``` /etc/systemd/system/i2pd.service +#/etc/systemd/system/i2pd.service + +[Unit] +Wants=network.target + +# сервіс повинен запускатись після сервісу Yggdrasil +# у вас тут може бути інша конфігурація, залежна від конкретної мережі +# та способу її ініціації +After=yggdrasil.service + +[Service] + +# запуск від окремого користувача +User=i2pd +Group=i2pd + +# роутер використовує дочірні процеси +Type=forking + +ExecStart=/usr/local/bin/i2pd --conf=/etc/i2pd.conf --daemon --service + +# лишив як в оригіналі, можливо це потрібно для реалізації i2pd +LimitNOFILE=8192 + +# фактично, шлях журналів буде таким, як вказано в /etc/i2pd.conf +# StandardOutput=file:///home/i2pd/debug.log +# StandardError=file:///home/i2pd/error.log + +[Install] +WantedBy=multi-user.target +``` +* `systemctl enable i2pd` - автостарт +* `systemctl start i2pd` - запуск (на цьому етапі, роутер Yggdrasil має бути активним) +* `systemctl status i2pd` - статус + +### Ініціальний запуск роутера + +При першому запуску, ініціалізація мережі в мене відбувалась не одразу: системний сервіс вилітав з помилками підключення до вузлів. Наскільки я розумію, це пов'язано з відсутністю або малою кількістю ресідів Yggdrasil в мережі I2P. Якщо у вас вже є аналогічний вузол, що працює на такому (локальному) конфігі, можна спробувати імпортувати профіль мережі з нього або підняти звідти ресід: це робиться утилітою [pyseeder](https://github.com/PurpleI2P/pyseeder). Якщо ви знаєте адресу Yggdrasil вузла онлайн, то можете просто спробувати додати його в конфігурацію `reseed.yggurls` і перезапустити i2pd. + +Якщо конекту досі немає, і ваш роутер по якимось причинам вже пускався в режимі Інтернет, варто (після зупинки сервіса i2pd) спробувати видалити теку: + +``` bash +rm -rf /var/lib/i2pd/netDb +``` + +або якщо тека нова і там немає налаштувань тунелів, то очистити її повністю: + +``` bash +rm -rf /var/lib/i2pd/* +``` + +Після змін вище, не забуваємо перезапустити роутер: + +``` bash +systemctl restart i2pd +``` + +Через деякий час, ініціалізація мережі таки відбулась, але що було причиною точно не знаю. + +Перевірити статус роботи роутера можна перейшовши у браузері за адресою його адмінки. Цю адресу ми вказували в опції `http.address` + +### Публікація Веб-сайту в I2P + +Власне, сайт (та будь який інший сервіс) публікується доволі просто: для цього використовуються так звані "тунелі" які проксуватимуть внутрішній трафік I2P на вказаний локальний сервіс, наприклад сервер Nginx. + +Створімо новий файл /var/lib/i2pd/tunnels.conf, або відредагуємо існуючий, якщо його немає: + +``` /var/lib/i2pd/tunnels.conf +[nginx] +# протокол +type = http +# хост, який прослуховує веб-сервер або Nginx +host = 127.0.0.1 +# порт, у моєму випадку SSL/443 не використовується +port = 80 +# внутрішній порт вхідного трафіку з I2P +inport = 80 +# ідентифікатор тунелю, цей файл буде створено автоматично +keys = nginx.dat +``` + +Адреси .i2p не є частиною ваших приватних ключів, як це реалізовано в Yggdrasil, натомість адреса I2P є ідентифікатором маршруту. На прикладі нашої конфігурації вище, вам потрібно зберегти резервну копію nginx.dat що відповідає за публічну адресу Веб-сайту. + +Подивитись яка у вас адреса - можна у Веб-адмінці роутера, у вкладці "I2P tunnels" > "Server Tunnels". Опціонально, можна зареєструвати короткий домен, але така система реєстрації не є централізованою і має ряд вимог (зокрема щодо термінів обслуговування), від того це тема для окремого матеріалу. + +### Додаткові заходи + +Як сказано на початку матеріалу, його метою не є анонімізація. Роботу роутера я не перевіряв на предмет витоків з'єднань в Інтернет, публікація анонімного сайту (a.k.a. eepsite) - окрема тема. Якщо для вас це чутливе питання, зверніть увагу на попередні публікації, що можуть частково допомогти з ізоляцією потенційних витоків: + +=> linux-isolation-from-direct-internet-connections-based-on-qemu-virtual-machine-manager-with-vsock.gmi Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK +=> filter-outgoing-connections-with-ufw.gmi Обмеження вихідних з'єднань на Інтернет з ufw +=> safe-yggdrasil-websites-browsing-with-yggstack.gmi Безпечний перегляд сайтів Yggdrasil з Yggstack + +## Посилання + +=> https://devzone.org.ua/post/vstanovlennia-routera-i2p-z-pidkliuchenniam-cherez-yggdrasil Веб-версія цього матеріалу з коментарями на DevZone + +### Читайте також + +=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією \ No newline at end of file