mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-02-19 06:22:41 +00:00
add reticulum-meshchat-with-connection-over-yggdrasil.gmi
This commit is contained in:
parent
7a3152c75f
commit
8d0130cebd
2 changed files with 199 additions and 0 deletions
|
|
@ -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
|
=> 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
|
=> 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
|
=> filter-outgoing-connections-with-ufw.gmi 2025-09-29 Обмеження вихідних з'єднань на Інтернет з ufw
|
||||||
|
|
|
||||||
198
public/uk/reticulum-meshchat-with-connection-over-yggdrasil.gmi
Normal file
198
public/uk/reticulum-meshchat-with-connection-over-yggdrasil.gmi
Normal file
|
|
@ -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
|
||||||
|
```
|
||||||
Loading…
Add table
Add a link
Reference in a new issue