
В этой статье я опишу свои страдания по настройке Reticulum. С одной стороны когда разберешься, все довольно просто, но пока разобрался…
Reticulum — сетевой стек на основе криптографии для построения локальных и глобальных сетей с помощью легкодоступного оборудования. Это не готовое приложение, а протокол, который можно использовать как фундамент для создания собственных решений: чатов, файлообменников, удалённых терминалов, веб-сервисов и других сетевых приложений.
Страница проекта: https://github.com/markqvist/Reticulum Официальный сайт: https://reticulum.network/manual/index.html
Иными словами, это аналог нашего привычного tcp/ip протокола, на котором построена локальная сеть, только Reticulum построен на радио модулях Lora или Bluetooth к примеру. Но больше конечно меня интересует именно Lora, так как она с хорошей антенной бьет на километры.
Ну и естественно для протокола Reticulum нужны свои приложения для работы. Например меня сначала интересовал SSH и удалённое подключение к серверу на linux, который находится далеко. И у Reticulum есть такая программа, которая называется RNSH.
Собственно в статье установим сам reticulum, установим RNSH. Настроим две эти программы и попробуем соединиться.
Программирование Lora модулей прошивкой Reticulum:
Самый простой способ запрограммировать Lora модули под Reticulum, это их Web интерфейс, который называется https://flasher.rns.moscow/ или тут: https://liamcottle.github.io/rnode-flasher/
Я вторым способом прошивался, но первый Российский, на случай дебильных блокировок… Ну и в первом флешере больше поддерживаемых модулей.
У меня под рукой скопилось 2 модуля разных от Heltec, вот я их и взял для реализации проекта.
Модуль Heltec T114: https://ali.click/vgda71y?erid=2SDnjeDCaSe
Модуль Heltec Lora32 V3: https://ali.click/mjda71n?erid=2SDnjeZxQPU
В веб интерфейсе я думаю все интуитивно понятно, просто следовать по шагам.
- Выбрать плату.
- Скачать прошивку. И прошить плату
- Подготовить EEPROM.
- Установить Hash прошивки.
- Готово.
Единственный момент, это в самом низу страницы, там настройки TNC Mode. Там нужно выбрать частоту на которой будет вещание, Усиление, канал и так далее. И эти настройки на двух модулях должны быть одинаковые. А выглядят они так:

Эти настройки еще нужно запомнить, так как в конфиге их будет прописывать.
Поздравляю мы прошили Lora модули, теперь идём к установке Reticulum на наши сервера.
Установка Reticulum:
Установка Reticulum на linux довольно простая. Устанавливается через pip:
pip install rns
Но у меня при установке выдало ошибку:

Ошибка не критичная, она означает, что в целях безопасности не даёт установить rnsd, по этому у нас либо вариант понижать безопасность, либо устанавливать через pipx. Я выбираю второй вариант.
По этому сначала установим pipx:
Обновляем пакеты:
apt update
Устанавливаем pipx:
apt insall pipx -y
Очищаем переменные окружения:
pipx ensurepath
source ~/.bashrc
Ну а далее устанавливаем уже rns:
pipx install rns
Поздравляю, мы установили Reticulum.
Его нужно установить на Принимающую сторону и на клиента.
Далее прошитые модули Lora вставляем в USB нашего сервера и узнаём по какому пути он определился:
ls -l /dev/serial/by-id/
У одного сервера вывод был такой: /dev/ttyUSB0

У второго /dev/ttyACM0:

Запоминаем эти пути, дальше мы их будем прописывать в конфиг Ретикулум.
Идём редактировать конфиг:
nano ~/.reticulum/config
Первое, тут добавляем 2 строчки под enable_transport = Yes
enable_transport = Yes allow_unknown_identities = Yes respond_to_probes = Yes
И выглядит это так:

Это делаем на обоих нодах. Ну и в самом конце в блоке [interfaces] прописываем конфиг ноды:
[[RNode LoRa Interface]]
type = RNodeInterface
enabled = yes
port = /dev/ttyUSB0
frequency = 868000000
bandwidth = 250000
txpower = 2
spreadingfactor = 7 # ← Должно быть ЧИСЛО от 7 до 12
codingrate = 5 # ← Должно быть ЧИСЛО от 5 до 8
mode = gateway
allow_overall = yes
Из этого конфига нужно понять, что:
port = /dev/ttyUSB0 – Это путь порта куда подключена нода reticulum.
frequency = 868000000 – Это частота на которой модуль будет работать.
bandwidth = 250000 – Это пропускная способность.
txpower = 2 – Это мощность сигнала, если ноды близко на столе лежат как у меня, то пусть будет 2, а так если на дальнее расстояние, то можно 22 поставить.
spreadingfactor = 7 – Это фактор расширения. Влияет на дальность и скорость. Чем выше число (7-12), тем выше дальность, но ниже скорость и наоборот.
codingrate = 5 – Это Скорость кодирования (CR). Добавляет избыточность в пакет для защиты от помех. Может быть от 5 до 8, где 5 — самые быстрые пакеты, а 8 — самые надежные
mode = gateway – Это Режим работы интерфейса. В двухузловой сети это обязательный параметр. gateway заставляет узел активно помогать другим узлам находить пути для связи, обеспечивая маршрутизацию
allow_overall = yes – Это Разрешает передачу данных. Если установить false, интерфейс будет только слушать эфир. По умолчанию (и для вашей задачи) он должен быть включен.
На двух серверах одинаковые настройки выставляем, сохраняем конфиг и можем запускать Reticulum.
На принимающем сервере всегда должна быть запущена программа rnsd. Запускается она одной командой
rnsd

Но так-же для диагностики, можно её запустить в режиме логирования:
rnsd -vvvv

Из сообщений о запуске видно, как с ключем -vvvv вывода гораздо больше становится и когда клиент пытается к серверу подключиться, с этим выводом тоже будет это видно в логах.
Когда сервер запущен, он может принимать данные и отвечать.
RNSH – Аналог SSH для Reticulum:
И меня тут интересовало, можно ли таким образом подключиться по SSH через этот радиоканал построенный на Lora модулях.
Но так-как тут все-же не tcp стек, то обычный ssh работать не будет, но существует специальная программа у reticulum, которая позволяет это делать.
Программа называется rnsh.
Устанавливается она:
pip install rnsh
или
pipx install rnsh
После установки, запускается сервис командой:
rnsh --listen -v

При запуске увидите вывод в консоль и тут Важно уникальный номер увидеть.
rnsh listening for commands on <3602a757aeb7753e13ca4833d357b45b>
Этот номер 3602a757aeb7753e13ca4833d357b45b это адрес нашего сервера. И на клиенте, которым будем подключаться, нужно будет этот адрес вписывать, чтоб подключиться к серверу.
А запущен сервис rnsh запущен должен быть на сервере, к которому мы будем подключаться по этому аналогу ssh.
Когда я пытался подружить между собой 2 компьютера по reticulum, у меня ни сразу это получилось, как оказалось. там еще все очень безопасно на ключах и я не уверен помог ли мне этот метод, но все-же это действие рекомендую выполнить на обеих компьютерах.
rnid -i ~/.reticulum/identity.key -a force -v
И вот при выполнении данной команды, на клиенте, с которого будем подключаться по rnsh, покажет:

Loaded Identity <f0cb05d51a1b6594d91ab07298d5bbec> from /root/.reticulum/identity.key
Где f0cb05d51a1b6594d91ab07298d5bbec уникальный адрес, который нужно на сервере rnsh добавить в разрешенные узлы для подключения.
По этому возвращаемся на сервер и вписываем команду:
echo "f0cb05d51a1b6594d91ab07298d5bbec" > ~/.config/rnsh/allowed_identities
Которая добавит f0cb05d51a1b6594d91ab07298d5bbec в разрешенные узлы.
С сервером закончили, теперь к нему можно с клиента подключаться.
На клиенте же не обязательно, чтоб были запущены ни rnsd, ни rnsh. Достаточно будет просто написать команду подключения к серверу rnsh и у нас запустится и rnsd и rnsh соответственно.
Но конечно rnsd и rnsh должны быть предварительно установлены.
Адрес сервера мы уже узнали и это: 3602a757aeb7753e13ca4833d357b45b
И команда для подключения к удалённому серверу:
rnsh 3602a757aeb7753e13ca4833d357b45b -v -w 60
Ключ -v -w 60 нужен для того, чтоб по таймауту не откидывало, а подольше давало времени для установки соединения. Все таки ноды у меня рядом и они не быстрые.
Обратите внимание, у меня серверов выступает машина с именем root@orangepi5-plus. А машина с которой я подключаюсь, называется root@orangepi6plus
На скрине видно, что я выполняю команду rnsh 3602a757aeb7753e13ca4833d357b45b -v -w 60 Далее у меня запускается rnsd, потом rnsh и проходит подключение к root@orangepi5-plus и консоль так начинает называться.

Скорость конечно не быстрая, но управлять и получать данные мы вполне можем.
Вот к примеру я запросил операционную систему, которая стоит на orangepi5-plus:

Теперь мы можем за километр управлять сервером удалённо по радиоканалу. Перегрузить его, применить какие-то настройки.
Но так-же мы можем получать вывод данных и к себе в консоль, тем самым записав например вывод в файл или БД. Там дальше фантазия не ограничивается.
Например можно навесить датчики на один миниПК сделав метеостанцию к примеру. Отнести на большое расстояние его, где не добивает wifi и получать данные с этих датчиков по reticulum.
Например, чтоб получить вывод команды “sensors” себе в консоль, достаточно ввести следующую команду:
rnsh 3602a757aeb7753e13ca4833d357b45b -v -w 60 sensors
Вывод такой:

И да, это именно вывод sensors с orange pi 5 plus, потому что orange pi 6 plus выводит sensors по другому:

Вывод:
Когда у меня первый раз получилось подключиться по reticulum к удалённому компьютеру, я был счастлив как ребёнок. Для меня это прям какая-то магия была. Очень интересно. Надеюсь повторив этот пример вы тоже испытаете исключительно положительные эмоции.
Конечно RNSH это не единственный инструмент. Еще можно файлы передавать, общаться как в чате. Но с этим я уже познакомлюсь потом.