# Reticulum / MeshChat з підключенням через Yggdrasil UPD. знайшов малварь (https://github.com/liamcottle/reticulum-meshchat/issues/128) в редакції `002360399cbb517461e0bc366ee45255c754a1a5` - ймовірно, ботнет чи спам агент в залежностях pip/npm. Матеріал залишаю але сам більше не користуюсь рішеннями на базі пакетних помийок. До протоколу це відношення не має. 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 ``` ## Резервне копіювання Якщо ви користуєтесь MeshChat на постійній основі та маєте прив'язані до свого ключа облікові записи в мережі Nomad, можливо, захочете зберегти резервну копію або ж просто перенести облікові дані на інший пристрій. Для цього є декілька способів, якщо інших не додадуть в UI MeshChat згодом: * скопіювати повні профілі після зупинки сервісу: `~/reticulum-meshchat/storage` і `~/.reticulum` * скопіювати тільки ключ для генерації адреси LXMF: `~/reticulum-meshchat/storage/identity` Також, з міркувань безпеки, я б порадив розставити на ці файли права `0600`. ## Посилання => 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 - мережа з децентралізованою маршрутизацією