gemlog/public/uk/reticulum-meshchat-with-connection-over-yggdrasil.gmi
2025-10-09 02:03:56 +03:00

205 lines
No EOL
11 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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://github.com/markqvist/Reticulum/wiki/Community-Node-List) та інтерфейси (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
```
## Посилання
=> reticulum-meshchat-with-connection-over-yggdrasil/reticulum-over-yggdrasil-peers-in-2025.png Візуалізація локальної мережі Reticulum з підключенням через Yggdrasil (станом на 2025)
=> https://devzone.org.ua/post/reticulum-vstanovlennia-na-prykladi-meshchat-z-pidkliuchenniam-cherez-yggdrasil Веб-версія цього матеріалу з коментарями на DevZone
### Читайте також
=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією