8.9 KiB
Публікація капсули Gemini в I2P на прикладі сервера Agate
Стало цікаво перевірити роботу протоколу Gemini в контексті I2P, адже вочевидь, ці технології - ніби створені одна для одної:
- мінімальний розмір контенту, та одно-поточні запити до сервера: що добре для швидкості відгуку та легкі для мережі I2P в цілому, адже не тягатимуть купу асинхронних скриптів, трекерів, стилів, медіа та іншого мотлоху
- приватно-орієнтованість: немає заголовків з рефералами, сторонніх підвантажень контенту, а отже - не потрібні костилі з ізольованими контейнерами, окремі браузери з PAC чи правила фаєрволу, що фільтруватимуть потенційні витоки з'єднань на Інтернет
- відсутність потреби у виділеному IP: роутер I2P може поставити собі кожен, для цього не потрібно навіть відкривати порт
- ідеально для соціальних децентралізованих застосунків: авторизація на базі TLS не передбачає передачу на сервер класичних для Веб e-mail, паролів та іншої потенційно чутливої інформації
Сьогодні таки зібрався і вирішив спробувати опублікувати свою капсулу (у просторі Gemini - так називається сайт) При цьому, вирішив не проксувати трафік I2P на віддалений хостинг Yesterweb, а саме задзеркалити копію ресурсу (mirror) на локальному сервері.
I2P
Тут передбачається, що вже встановлено роутер I2P. Якщо ні - перегляньте попередній матеріал або скористайтесь офіційною документацією (i2pd)
Для публікації капсули, достатньо додати наступну конфігурацію до файлу /var/lib/i2pd/tunnels.conf:
[gemini]
type = server
host = 127.0.0.1
port = 1965
keys = gemini.dat
gemini- умовна назва вашого профілю- шлях до
tunnels.confможе відрізнятись, в залежності від налаштувань
Тепер потрібно перезапустити i2pd:
systemctl i2pd restart
Після цього, роутером буде згенеровано ключ тунелю - по суті, він є вашим доменом в мережі I2P (знаходиться відповідно в файлі /var/lib/i2pd/gemini.dat) тому бажано забекапити його копію у надійному місці для можливості відновлення.
Agate
Agate - це один з відомих серверів Gemini для публікації статики Gemtext, написаний мовою Rust.
Взагалі, я хотів би опублікувати дзеркало на усі мережі: I2P, Yggdrasil і Mycelium, але сервер Agate має свою специфіку роботи з SNI: чомусь, більшість розробників в очі не бачили IPv6 і таке поняття як мульти-стек. Тому забігаючи на перед - ця інструкція підходить лише для публікації одного домену в I2P; якщо ви хочете забіндитись на різні мережі, то подивіться сервер gmid (clang)
Встановлення
Інформація доступна в репозиторії проєкту, але я зібрав для себе по вже натоптаному шляху:
git clone https://github.com/mbrubeck/agate.git
cd agate
cargo build --release
sudo install target/release/agate /usr/local/bin/agate
Створімо окремого користувача з домашньою текою, від якого запускатимемо сервер і де зберігатимемо статичні файли:
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
xxxx.b32.i2p- ваш домен в I2P/home/agate/public- тека зі статичними файлами для публікації
Запуск
Порт 1965 відкривати не потрібно, адже вхідний трафік йтиме з локального роутера i2pd.
systemctl start agate- запускаємо серверsystemctl enable agate- додаємо в автозапуск при старті системиsystemctl status agate- перевіряємо роботу
Клієнт
Для доступу до ресурсів I2P, потрібен клієнт (браузер) Gemini з функціями проксування SOCKS або HTTP. Наскільки мені відомо, популярний браузер Lagrange (на момент публікації матеріалу) того не вміє. Останнім часом, активно розвивається клієнт Alhena, але там альтернативно реалізована клієнтська частина, що виходить за рамки специфікації і підвантажує inline-медіа на фоні.
Особисто я користуюсь спеціально створеним для моїх потреб GTK браузером Yoda, де реалізовано підтримку різних типів проксі а також маршрутизацію по regex і пріоритетам:
\.i2p$ http://127.0.0.1:4444
- regex + локальний проксі відповідно
- стандартно, сервер HTTP в i2pd працює на порту 4444
- правило регулярного виразу актуальне для версії 0.12.2+
В інтерфейсі налаштувань це виглядає так:
- на прикладі видно окремий рядок налаштувань з іншого проксі (Yggstack) для адрес Yggdrasil, не звертайте на нього уваги - його вимкнено, але якщо у вас є інші активні правила, для них можна вказати пріоритет (замість
0)
Після цього, можна відкрити адресу в браузері, наприклад:
gemini://shxxkkrws2m6qowjse5jpgmu64vzupnnhxrhdzrn6fr6m7ynddbq.b32.i2p
