From 8d0130cebd87eee0aac8f938b64d2cdb7f2e84ee Mon Sep 17 00:00:00 2001 From: postscriptum Date: Tue, 7 Oct 2025 16:41:48 +0300 Subject: [PATCH] add `reticulum-meshchat-with-connection-over-yggdrasil.gmi` --- public/uk/index.gmi | 1 + ...eshchat-with-connection-over-yggdrasil.gmi | 198 ++++++++++++++++++ 2 files changed, 199 insertions(+) create mode 100644 public/uk/reticulum-meshchat-with-connection-over-yggdrasil.gmi diff --git a/public/uk/index.gmi b/public/uk/index.gmi index b5b9f94..75f84d4 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -9,6 +9,7 @@ ### Нотатки +=> reticulum-meshchat-with-connection-over-yggdrasil.gmi 2025-10-07 Reticulum: встановлення на прикладі MeshChat з підключенням через Yggdrasil => 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 => filter-outgoing-connections-with-ufw.gmi 2025-09-29 Обмеження вихідних з'єднань на Інтернет з ufw diff --git a/public/uk/reticulum-meshchat-with-connection-over-yggdrasil.gmi b/public/uk/reticulum-meshchat-with-connection-over-yggdrasil.gmi new file mode 100644 index 0000000..1b490f6 --- /dev/null +++ b/public/uk/reticulum-meshchat-with-connection-over-yggdrasil.gmi @@ -0,0 +1,198 @@ +# Reticulum: встановлення на прикладі MeshChat з підключенням через Yggdrasil + +Reticulum (https://github.com/markqvist/Reticulum) - відносно новий протокол зв'язку, створений в першу чергу для радіо-мереж з метою захищеної, децентралізованої передачі даних в умовах високої затримки сигналу, але може працювати в оверлейному режимі (поверх інших мереж). На відміну від наявних реалізацій локальних мереж CJDNS, Yggdrasil, Mycelium та інших, в основі не використовує стек IP як такий, натомість реалізує передачу даних в етері через пірингові ретранслятори, вже знайомі користувачам I2P як "хопи". + +Сфери застосування технології Reticulum можуть бути різними: в цивільному сегменті - розробляються такі протоколи обміну даними як LXMF (https://github.com/markqvist/lxmf) та вже функціонуюча його засобами соціальна платформа NomadNet (https://github.com/markqvist/NomadNet), що віддалено може нагадувати гібрид ZeroNet і Gemini Protocol поверх I2P, з функціональністю месенджера. + +В технічну складову роботи мережі вдаватись не буду, оскільки сам в ній тільки розбираюсь. Натомість, пропоную ознайомитись з Reticulum на рівні користувача, встановивши клієнтське програмне забезпечення соціальної платформи та налаштувавши вузол ретрансляції для локальних користувачів мереж Yggdrasil та Mycelium. + +## Клієнт + +Оригінальний клієнт NomadNet я пробував встановлювати багато разів, але інтерфейс TUI видавався не зручним; через вибраний мною не стабільний пір я також не міг підключитися до внутрішніх сайтів і зрозуміти як це працює. Невдовзі, перечитуючи документацію, вирішив спробувати MeshChat (https://github.com/liamcottle/reticulum-meshchat), який використовує ті само технології, але надає їх в сучасному та інтуїтивно зрозумілому форматі Web UI (засобами Vue / Node.js) + +Окрім перегляду ресурсів NomadNet, текстового месенджера та голосових викликів, MeshChat надає деякі інструменти адміністрування і візуалізації мережі Reticulum. + +Для встановлення MeshChat в Debian / Linux, є проста і робоча інструкція: +=> https://github.com/liamcottle/reticulum-meshchat/blob/master/docs/meshchat_on_raspberry_pi.md + +### Системні залежності + +Реалізації самої мережі Reticulum та застосунку MeshChat зокрема - написані мовою Python: + +``` bash +sudo apt install git python3-pip +``` + +Для збірки Web UI сервера MeshChat, додатково знадобляться інструменти Node.js + +``` bash +curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg +NODE_MAJOR=22 +echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list +sudo apt update +sudo apt install nodejs +``` + +Також додамо системного користувача з текою для даних профілю: + +``` bash +sudo useradd -m reticulum +``` + +### Встановлення + +Командами нижче буде встановлено маршрутизатор Reticulum, сервер MeshChat та зкомпільовано його Веб-інтерфейс: + +``` bash +su reticulum +cd ~ +git clone https://github.com/liamcottle/reticulum-meshchat +cd reticulum-meshchat +pip install -r requirements.txt --break-system-packages +npm install --omit=dev +npm run build-frontend +``` + +Забігаючи наперед, при запуску в мене була помилка: +=> https://github.com/liamcottle/reticulum-meshchat/issues/110 + +тут я руками створив теку: + +``` bash +mkdir -p ~/reticulum-meshchat/public +``` + +### Системний сервіс + +Сервер зручно пускати через systemd. Для цього створімо сервіс (в мене він трохи відрізняється від оригіналу) + +``` /etc/systemd/system/reticulum-meshchat.service +#/etc/systemd/system/reticulum-meshchat.service + +[Unit] +Description=reticulum-meshchat + +After=network.target +Wants=network-online.target +StartLimitIntervalSec=0 + +[Service] +Type=simple + +User=reticulum +Group=reticulum + +WorkingDirectory=/home/reticulum/reticulum-meshchat + +# я пускаю слідом за Yggdrasil та Mycelium, в мене там затримка в 5 секунд для інших залежностей +# ExecStartPost=/bin/sleep 10s + +# можна (і варто) вказати конкретний хост і порт, з якого відбуватиметься підключення до веб-адмінки +ExecStart=/usr/bin/env /usr/bin/python3 /home/reticulum/reticulum-meshchat/meshchat.py --headless --host 127.0.0.1 --port 1234 + +# куди писати журнали +StandardOutput=file:///home/reticulum/debug.log +StandardError=file:///home/reticulum/error.log + +[Install] +WantedBy=multi-user.target +``` +* `sudo systemctl enable reticulum-meshchat` - авто-запуск при старті системи +* `sudo systemctl start reticulum-meshchat` - запуск +* `sudo systemctl status reticulum-meshchat` - перевірка статусу + +### Фаєрвол + +Якщо сервер пускається локально, відкривати порт для адмінки не потрібно, просто заходимо на http://localhost:1234 + +На віддаленій машині, потрібно відкрити відповідний порт TCP (на прикладі вище - `1234`) + +``` bash +sudo ufw allow from xx.xx.xx.xx to xx.xx.xx.xx port 1234 proto tcp +``` +* `xx.xx.xx.xx` - IP сервера та клієнта відповідно + +## Підключення до Reticulum через Yggdrasil / Mycelium + +Підключитись до Reticulum в оверлейному режимі (mesh) можна різними засобами. Особисто я користуюсь мережами Yggdrasil і Mycelium, тому нижче приклад розгортання конекту для такої екосистеми. + +Наразі, мені відома одна точка доступу для Yggdrasil / TCP: +=> https://yggdrasil-network.github.io/services.html#reticulum-nodes + +вона додається в налаштування роутера Reticulum, після чого потрібно перезавантажити сервер MeshChat, що через нього підключається: + +``` ~/.reticulum/config +#~/.reticulum/config +[interfaces] + [[rothbard_RNS_transport_ZA_ygg]] + type = TCPClientInterface + enabled = true + target_host = 200:73eb:2e4:14be:aac7:90b3:784b:71a3 + target_port = 4242 +``` +* ця нода не є стабільною, якщо у вас відвалиться конект, то майте на увазі (спробуйте віднайти та додати інші) + +## Налаштування вузла ретрансляції + +Коли ви успішно підключились до мережі Reticulum, буде корисним поділитись доступом до мережі з іншими. + +Для цього, до налаштувань роутера Reticulum потрібно додати / змінити наступні налаштування: + +``` ~/.reticulum/config +#~/.reticulum/config + +# дозволити транзитний трафік (стандартно False) +enable_transport = True + +[interfaces] + + # вказуємо серверний інтерфейс, на якому будемо "слухати" вхідні підключення + # якщо у вас використовується Інтернет IPv6 і ви не хочете його використовувати, + # краще вказати дві окремі опції для локальних інтерфейсів Mycelium і Yggdrasil. + [[TCP Server Interface]] + type = TCPServerInterface + interface_enabled = True + listen_ip = :: + listen_port = 4242 +``` + +Таким чином, з іншого сервера, я можу підключитись на обидві мережі Mycelium і Yggdrasil: + +``` ~/.reticulum/config +#~/.reticulum/config +[interfaces] + + # клієнтські інтерфейси (ведуть на ::) + [[ygg]] + type = TCPClientInterface + enabled = true + target_host = 202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148 + target_port = 4242 + [[myc]] + type = TCPClientInterface + enabled = true + target_host = 505:6847:c778:61a1:5c6d:e802:d291:8191 + target_port = 4242 +``` +* ви можете додати будь які інші протоколи з поміж доступних (https://reticulum.network/manual/interfaces.html), в тому числі UDP або навіть I2P (зробити це можна також через Веб-адмінку MeshChat) + +Для доступу до сервера, в залежності від його типу, потрібно також відкрити відповідні порти (у прикладі це `4242`) + +``` bash +sudo ufw allow from 0200::/7 to 202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148 port 4242 proto tcp +sudo ufw allow from 0400::/7 to 505:6847:c778:61a1:5c6d:e802:d291:8191 port 4242 proto tcp +``` +* актуалізуйте ваші адреси IPv6 (`ifconfig`) + +Після цього перезавантажуємо сервіс: + +``` bash +sudo systemctl restart reticulum-meshchat +``` + +Перевіряємо + +``` bash +sudo systemctl status reticulum-meshchat +netstat -tulpn | grep 4242 +``` \ No newline at end of file