Публікація капсули Gemini в I2P на прикладі сервера Agate


Стало цікаво перевірити роботу протоколу Gemini в контексті I2P, адже вочевидь, ці технології - ніби створені одна для одної:



Сьогодні таки зібрався і вирішив спробувати опублікувати свою капсулу. При цьому, вирішив не проксувати (proxy) трафік I2P на віддалений хостинг Yesterweb, а саме задзеркалити копію ресурсу (mirror) на локальному сервері.


I2P


Тут передбачається, що вже встановлено роутер I2P. Якщо ні - перегляньте попередній матеріал:

Встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil

або скористайтесь офіційною документацією, наприклад i2pd:

https://i2pd.readthedocs.io/en/latest/


Для публікації капсули, достатньо додати наступну конфігурацію до файлу `/var/lib/i2pd/tunnels.conf`:


[gemini]
type = server
host = 127.0.0.1
port = 1965
keys = gemini.dat

Тепер потрібно перезапустити i2pd:


systemctl i2pd restart

Після цього, роутером буде згенеровано ключ тунелю - по суті, він є вашим доменом в мережі I2P (знаходиться відповідно в файлі `/var/lib/i2pd/gemini.dat`) тому бажано забекапити його копію у надійному місці для можливості відновлення.


Agate


Agate (github.com/mbrubeck/agate) - це один з відомих серверів Gemini для публікації статики Gemtext, написаний мовою Rust.


Взагалі, я хотів би опублікувати дзеркало на усі мережі: I2P, Yggdrasil і Mycelium, але сервер Agate має свою специфіку роботи з SNI: чомусь, більшість розробників в очі не бачили IPv6 і таке поняття як мульти-стек. Тому забігаючи на перед - ця інструкція підходить лише для публікації одного домену в I2P; якщо ви хочете забіндитись на різні мережі, то подивіться:

Gmid - багатофункціональний сервер для Gemini


Встановлення


Інформація доступна в репозиторії проєкту, але я зібрав для себе по вже натоптаному шляху:


git clone https://github.com/mbrubeck/agate.git
cd agate
cargo build --release
sudo install target/release/agate /usr/local/bin/agate

Встановлення останньої версії Rust в Linux


Створімо окремого користувача з домашньою текою, від якого запускатимемо сервер і де зберігатимемо статичні файли:


useradd -m agate

Systemd


#/etc/systemd/system/agate.service

[Unit]
After=network-online.target
Wants=network-online.target

[Service]
Type=simple

User=agate
Group=agate

WorkingDirectory=/home/agate
ExecStart=/usr/local/bin/agate --content /home/agate/public --addr 127.0.0.1:1965 --hostname xxxx.b32.i2p

StandardOutput=file:///home/agate/debug.log
StandardError=file:///home/agate/error.log

[Install]
WantedBy=multi-user.target

Запуск


Порт 1965 відкривати не потрібно, адже вхідний трафік йтиме з локального роутера i2pd.



Клієнт


Для доступу до ресурсів I2P, потрібен клієнт (браузер) Gemini з функціями проксування SOCKS або HTTP. Наскільки мені відомо, популярний браузер Lagrange (github.com/skyjake/lagrange/) (на момент публікації матеріалу) того не вміє. Останнім часом, активно розвивається клієнт Alhena (github.com/mochaman/alhena), але там альтернативно реалізована клієнтська частина, що виходить за рамки специфікації і підвантажує inline-медіа на фоні.


Особисто я користуюсь спеціально створеним для моїх потреб GTK браузером Yoda (github.com/YGGverse/Yoda), де реалізовано підтримку різних типів проксі а також маршрутизацію по regex і пріоритетам:


\.i2p$ http://127.0.0.1:4444

В інтерфейсі налаштувань це виглядає так:


Налаштування проксі I2P в Yoda


Після цього, можна відкрити адресу в браузері, наприклад:


gemini://shxxkkrws2m6qowjse5jpgmu64vzupnnhxrhdzrn6fr6m7ynddbq.b32.i2p


Посилання


Веб-адаптація цього матеріалу з коментарями на DevZone


Дивіться також


Специфіка роботи з віртуальними хостами Agate



/uk/