Reticulum — стек, спроектированный под каналы, которые обычная сеть считает неработающими
Представьте канал, у которого пропускная способность измеряется битами в секунду, а не мегабитами. КВ-радио на 300 бод. LoRa-модуль, отдающий полтора килобита в хорошую погоду. Спутник с секундными задержками. Витая пара между корпусами, которую периодически перерубает экскаватор. На такой среде классический стек ведёт себя плохо: рукопожатия требуют нескольких раундов, таймауты срабатывают раньше, чем приходит ответ, служебные протоколы вроде DHCP и DNS добавляют своих ожиданий.
Из этого наблюдения и вырос Reticulum. Его проектировали от обратного: считаем, что канал скверный, и это не авария, а рабочее состояние. Нижняя граница по спецификации — 5 бит/с при MTU 500 байт; верхний ориентир, который называют разработчики, — гигабит. Проект не заброшен: сборка RNS 1.3.8 датирована 10 июля 2026 года, а формат кадра и программный интерфейс объявлены устоявшимися.
ℹ️ Справка
Аудитория у этой штуки специфическая: радиолюбители, LoRa-энтузиасты, связисты на объектах без интернета, любители протянуть канал через недружелюбную среду. Владельцу домашнего гигабита и арендованного VPS Reticulum не заменит ничего — задача у него другая.
Три ожидания, которые не сбудутся
Ярлык «децентрализованный интернет» цепляют к проекту постоянно, и именно он порождает разочарования. Расставим границы заранее.
Единой сети нет. Подключиться «к Reticulum» некуда: вы либо цепляетесь к конкретному чужому узлу, либо разворачиваете собственный сегмент. Авторы описывают свою работу как инструмент для создания тысяч сетей — не одной большой.
Анонимности уровня Tor тут нет. Да, шифрование принудительное и выключить его нельзя, а адрес источника в кадр не кладётся. Но узлам-транспортам доступны адреса получателей, размеры кадров и моменты их появления, а передатчик в эфире пеленгуется вне зависимости от стойкости криптографии.
IP никуда не денется. Стек целиком живёт в пространстве пользователя и способен работать поверх обычного TCP. Модулей ядра нет, сетевых интерфейсов в системе не создаётся.
pip install rns
# на Debian/Ubuntu/Raspberry Pi и свежих macOS:
pip install rns --break-system-packages
# либо изолированно:
pipx install rns
Затем поднимается демон, он же генерирует шаблон настроек:
rnsd --exampleconfig > ~/.reticulum/config # шаблон с комментариями
rnsd -vvv # запуск с подробным логом
rnstatus # состояние интерфейсов
Настройки хранятся по пути ~/.reticulum/config, синтаксис — INI со вложенными секциями. Вот как выглядит узел на VPS, который и принимает подключения, и пересылает чужой трафик:
Закрытый сегмент делается через IFAC — аутентификацию на уровне интерфейса. Шифрование данных она не подменяет, её задача — не пускать посторонние узлы:
Значение passphrase хранится в конфиге открыто. Выставьте файлу режим 600, а на машине с несколькими пользователями отдельно прикиньте, кто ещё дотягивается до домашнего каталога учётки, из-под которой работает rnsd.
Как это устроено внутри
Схема на основе руководства Reticulum, раздел Understanding Reticulum
Interface — любая среда, способная передать байты
Физика прячется за нижним слоем. Поддерживаются Ethernet и WiFi (соседи обнаруживаются мультикастом через AutoInterface), TCP и UDP, последовательные порты, KISS-модемы и TNC пакетного радио, LoRa на устройствах RNode, а также произвольная внешняя программа, с которой общаются через stdio.
Единственное условие к среде — полудуплекс со скоростью выше 5 бит/с и MTU от 500 байт. Дальше вопрос только конфигурации.
Адресом служат 16 байт усечённого SHA-256, посчитанного от публичного ключа и имени назначения; на письме это выглядит как <13425ec15b621c1d928589718000d814>. Если 128 бит мало, длину поднимают до 256.
Принципиальный момент — идентификатор рождается локально, на самом узле, без запросов наружу. Ни регистратора, ни DHCP, ни нарезки подсетей. Переезд узла в другую часть сети адрес не меняет: он остаётся достижимым. Видимым для остальных новый адрес становится за секунды или минуты — по мере расхождения анонса.
Назначения бывают четырёх сортов:
single — шифрованный юникаст на уникальный публичный ключ, проходит через несколько хопов;
plain — открытый, только в пределах локального сегмента, многохоповая маршрутизация недоступна;
group — симметричное AES-256 на заранее розданном ключе;
link — абстракция канала, разбирается ниже.
Набор алгоритмов задан жёстко, выбирать нечего: X25519 в обмене ключами, Ed25519 в подписях, AES-256-CBC с PKCS7 в симметрике, HKDF при деривации, HMAC-SHA256 для аутентификации, токены по спецификации Fernet. Открытый линк не установится ни при каких настройках, а нешифрованные кадры считаются невалидными и выбрасываются.
Кадр — 19 байт накладных расходов
Схема на основе описания wire format в руководстве Reticulum
Разметка кадра простая и компактная: заголовок в два байта, адресная часть на 16 или 32 байта, байт контекста, следом полезная нагрузка объёмом до 465 байт. В первом байте заголовка упакованы флаги — IFAC, тип заголовка, флаг контекста, режим распространения, тип назначения, тип пакета; второй байт отведён под счётчик хопов.
Такая экономия и даёт цифры, которыми проект любит иллюстрировать себя: 51 байт на запрос установки линка, 167 байт на анонс, 115 байт на подтверждение линка.
Link — канал ценой в 297 байт
Под именем Link скрывается одноразовый шифрованный канал, натянутый на найденный путь. Схема установки такая: инициатор отправляет запрос, принимающая сторона делает свежую пару X25519, обе стороны через ECDH выводят общий секрет, а принимающая подписывает доказательство ключом Ed25519.
Суммарная стоимость процедуры — 297 байт в трёх пакетах. Поддержание уже открытого канала обходится в 0,45 бит/с. Для контраста: TLS поверх TCP на подобном канале договаривался бы минутами.
Из конструкции вытекает приятное следствие: пока идёт установка, инициатор не сообщает о себе ничего — принимающей стороне достаётся лишь одноразовый ключ. Одноразовость же обеспечивает и forward secrecy.
📌 Заметка
Оцените масштаб. Канал на 5 бит/с переварит установку Link примерно за восемь минут — и она пройдёт. Связка TCP+TLS на этой скорости не договорится вообще: раньше отработают таймауты.
Transport — путь строится из услышанного
Маршрутизации в классическом понимании здесь не завезли: ни обмена таблицами, ни метрик, ни зон. Работает другое — анонсы. Узел заявляет о себе, соседи повторяют заявление дальше, и каждый, кто его принял, заводит запись вида «этот адрес доступен через такого-то соседа, столько-то хопов».
Значения по умолчанию: потолок в 128 хопов, под анонсы резервируется 2 % полосы интерфейса, ретрансмит однократный со случайной задержкой, повторы отбрасываются.
Пересылка чужого трафика по умолчанию отключена. Превращение узла в транспортный делается явно:
[reticulum]
enable_transport = Yes
На транспортном узле оседают таблицы линков и накопленное знание об анонсах. Именно он и располагает картиной того, кто с кем контактирует — пусть содержимое ему и недоступно.
Что уже написано поверх
Стек сам по себе бесполезен; ценность — в комплекте прикладных программ:
rnstatus — состояние интерфейсов и трафик;
rnpath — просмотр и сброс известных путей;
rnprobe — диагностика связности до конкретного адреса;
rncp — копирование файлов между узлами;
rnid — управление идентичностями, шифрование и расшифровка файлов;
rnsh — интерактивный удалённый шелл;
rnx — запуск одной команды на удалённом узле с возвратом вывода;
rngit и git-remote-rns — git-ремоут поверх Reticulum, с подписью и валидацией коммитов.
Выше утилит расположен прикладной слой. LXMF — протокол переписки, спокойно переносящий задержки и обрывы: сообщение долежит до восстановления связи. На нём построены Sideband (графический клиент под Android, Linux, macOS и Windows — файлы, голосовые, карты, телеметрия) и Nomad Network — текстовая среда со страницами и обменом файлами.
✅ Как правильно
Порядок первого знакомства, который экономит нервы:
запустить rnsd на VPS с TCPServerInterface и включённым enable_transport;
с ноутбука подцепиться через TCPClientInterface и убедиться в результате по rnstatus;
прогнать rnprobe до адреса VPS, изучить хопы командой rnpath;
передать файл через rncp, открыть сессию rnsh;
и лишь затем подключать радио — оно приносит собственный набор сложностей.
Слабые места
Без этого раздела получился бы рекламный текст, поэтому перечислю честно.
Скорость реализации. Эталонный код написан на Python. Пять бит в секунду он обслужит без вопросов, гигабит — уже вопрос. Для систем, где недоступна PyCA/cryptography, существует пакет rnspure, и работает он ощутимо медленнее.
Метаданные остаются. Закрыть содержимое не значит спрятать сам факт разговора. Транспортным узлам видны адреса получателей, объёмы и тайминги. В радиоэфире к этому добавляется физика: излучение пеленгуется, и криптография тут бессильна.
Эфир регулируется. Правовой статус LoRa на 433/868/915 МГц и пакетного радио в VHF различается от страны к стране: где-то нужна лицензия, где-то ограничены мощность и доля времени в эфире, где-то шифрование в любительских диапазонах прямо под запретом. Выяснять это стоит до покупки железа, а не после.
🔒 Безопасность
Перед первым выходом в эфир изучите местное регулирование выбранного диапазона. Лицензионные требования, потолок мощности, ограничения duty cycle и допустимость шифрования отличаются по юрисдикциям, и ссылка на незнание не работает.
Сообщество узкое. Десяти ответов на профильном форуме по вашей проблеме не найдётся. Документация у проекта развёрнутая, но круг пользователей маленький.
❗ Главное
Браться за Reticulum разумно там, где привычный стек уже сдался: канал чересчур медленный, рваный либо враждебный. Когда IP работает и беспокоит только приватность, инструменты нужны другие — WireGuard, Tor, обычные VPN-решения.
Есть ли тут те, кто гонял Reticulum не ради интереса, а под конкретную задачу? Любопытны два момента: какая дальность и стабильность реально получились на LoRa между зданиями, и пробовал ли кто-то держать rnsh либо rncp как резервный способ достучаться до сервера, когда основной канал отвалился.
Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
Представьте канал, у которого пропускная способность измеряется битами в секунду, а не мегабитами. КВ-радио на 300 бод. LoRa-модуль, отдающий полтора килобита в хорошую погоду. Спутник с секундными задержками. Витая пара между корпусами, которую периодически перерубает экскаватор. На такой среде классический стек ведёт себя плохо: рукопожатия требуют нескольких раундов, таймауты срабатывают раньше, чем приходит ответ, служебные протоколы вроде DHCP и DNS добавляют своих ожиданий.
Из этого наблюдения и вырос Reticulum. Его проектировали от обратного: считаем, что канал скверный, и это не авария, а рабочее состояние. Нижняя граница по спецификации — 5 бит/с при MTU 500 байт; верхний ориентир, который называют разработчики, — гигабит. Проект не заброшен: сборка RNS 1.3.8 датирована 10 июля 2026 года, а формат кадра и программный интерфейс объявлены устоявшимися.
ℹ️ Справка
Аудитория у этой штуки специфическая: радиолюбители, LoRa-энтузиасты, связисты на объектах без интернета, любители протянуть канал через недружелюбную среду. Владельцу домашнего гигабита и арендованного VPS Reticulum не заменит ничего — задача у него другая.
Три ожидания, которые не сбудутся
Ярлык «децентрализованный интернет» цепляют к проекту постоянно, и именно он порождает разочарования. Расставим границы заранее.
Поднимаем узел: pip, конфиг, два интерфейса
Дистрибутив ставится обычным питоновским способом:
Затем поднимается демон, он же генерирует шаблон настроек:
Настройки хранятся по пути
~/.reticulum/config, синтаксис — INI со вложенными секциями. Вот как выглядит узел на VPS, который и принимает подключения, и пересылает чужой трафик:Встречный блок на ноутбуке выглядит зеркально:
Закрытый сегмент делается через IFAC — аутентификацию на уровне интерфейса. Шифрование данных она не подменяет, её задача — не пускать посторонние узлы:
⚠️ Осторожно
Значение
passphraseхранится в конфиге открыто. Выставьте файлу режим600, а на машине с несколькими пользователями отдельно прикиньте, кто ещё дотягивается до домашнего каталога учётки, из-под которой работаетrnsd.Как это устроено внутри
Interface — любая среда, способная передать байты
Физика прячется за нижним слоем. Поддерживаются Ethernet и WiFi (соседи обнаруживаются мультикастом через
AutoInterface), TCP и UDP, последовательные порты, KISS-модемы и TNC пакетного радио, LoRa на устройствах RNode, а также произвольная внешняя программа, с которой общаются через stdio.Единственное условие к среде — полудуплекс со скоростью выше 5 бит/с и MTU от 500 байт. Дальше вопрос только конфигурации.
AutoInterfacegroup_id,devices,multicast_address_typeTCPServerInterfacelisten_ip,listen_port(по умолчанию 4242)TCPClientInterfacetarget_host,target_port,kiss_framingUDPInterfacelisten_port,forward_ip,forward_portRNodeInterfaceport,frequency,bandwidth,spreadingfactor,codingrate,txpowerI2PInterfaceconnectable,peersDestination — самовыдаваемый идентификатор
Адресом служат 16 байт усечённого SHA-256, посчитанного от публичного ключа и имени назначения; на письме это выглядит как
<13425ec15b621c1d928589718000d814>. Если 128 бит мало, длину поднимают до 256.Принципиальный момент — идентификатор рождается локально, на самом узле, без запросов наружу. Ни регистратора, ни DHCP, ни нарезки подсетей. Переезд узла в другую часть сети адрес не меняет: он остаётся достижимым. Видимым для остальных новый адрес становится за секунды или минуты — по мере расхождения анонса.
Назначения бывают четырёх сортов:
Набор алгоритмов задан жёстко, выбирать нечего: X25519 в обмене ключами, Ed25519 в подписях, AES-256-CBC с PKCS7 в симметрике, HKDF при деривации, HMAC-SHA256 для аутентификации, токены по спецификации Fernet. Открытый линк не установится ни при каких настройках, а нешифрованные кадры считаются невалидными и выбрасываются.
Кадр — 19 байт накладных расходов
Разметка кадра простая и компактная: заголовок в два байта, адресная часть на 16 или 32 байта, байт контекста, следом полезная нагрузка объёмом до 465 байт. В первом байте заголовка упакованы флаги — IFAC, тип заголовка, флаг контекста, режим распространения, тип назначения, тип пакета; второй байт отведён под счётчик хопов.
Такая экономия и даёт цифры, которыми проект любит иллюстрировать себя: 51 байт на запрос установки линка, 167 байт на анонс, 115 байт на подтверждение линка.
Link — канал ценой в 297 байт
Под именем
Linkскрывается одноразовый шифрованный канал, натянутый на найденный путь. Схема установки такая: инициатор отправляет запрос, принимающая сторона делает свежую пару X25519, обе стороны через ECDH выводят общий секрет, а принимающая подписывает доказательство ключом Ed25519.Суммарная стоимость процедуры — 297 байт в трёх пакетах. Поддержание уже открытого канала обходится в 0,45 бит/с. Для контраста: TLS поверх TCP на подобном канале договаривался бы минутами.
Из конструкции вытекает приятное следствие: пока идёт установка, инициатор не сообщает о себе ничего — принимающей стороне достаётся лишь одноразовый ключ. Одноразовость же обеспечивает и forward secrecy.
📌 Заметка
Оцените масштаб. Канал на 5 бит/с переварит установку Link примерно за восемь минут — и она пройдёт. Связка TCP+TLS на этой скорости не договорится вообще: раньше отработают таймауты.
Transport — путь строится из услышанного
Маршрутизации в классическом понимании здесь не завезли: ни обмена таблицами, ни метрик, ни зон. Работает другое — анонсы. Узел заявляет о себе, соседи повторяют заявление дальше, и каждый, кто его принял, заводит запись вида «этот адрес доступен через такого-то соседа, столько-то хопов».
Значения по умолчанию: потолок в 128 хопов, под анонсы резервируется 2 % полосы интерфейса, ретрансмит однократный со случайной задержкой, повторы отбрасываются.
Пересылка чужого трафика по умолчанию отключена. Превращение узла в транспортный делается явно:
На транспортном узле оседают таблицы линков и накопленное знание об анонсах. Именно он и располагает картиной того, кто с кем контактирует — пусть содержимое ему и недоступно.
Что уже написано поверх
Стек сам по себе бесполезен; ценность — в комплекте прикладных программ:
rnstatus— состояние интерфейсов и трафик;rnpath— просмотр и сброс известных путей;rnprobe— диагностика связности до конкретного адреса;rncp— копирование файлов между узлами;rnid— управление идентичностями, шифрование и расшифровка файлов;rnsh— интерактивный удалённый шелл;rnx— запуск одной команды на удалённом узле с возвратом вывода;rngitиgit-remote-rns— git-ремоут поверх Reticulum, с подписью и валидацией коммитов.Выше утилит расположен прикладной слой. LXMF — протокол переписки, спокойно переносящий задержки и обрывы: сообщение долежит до восстановления связи. На нём построены Sideband (графический клиент под Android, Linux, macOS и Windows — файлы, голосовые, карты, телеметрия) и Nomad Network — текстовая среда со страницами и обменом файлами.
✅ Как правильно
Порядок первого знакомства, который экономит нервы:
rnsdна VPS сTCPServerInterfaceи включённымenable_transport;TCPClientInterfaceи убедиться в результате поrnstatus;rnprobeдо адреса VPS, изучить хопы командойrnpath;rncp, открыть сессиюrnsh;Слабые места
Без этого раздела получился бы рекламный текст, поэтому перечислю честно.
Скорость реализации. Эталонный код написан на Python. Пять бит в секунду он обслужит без вопросов, гигабит — уже вопрос. Для систем, где недоступна PyCA/cryptography, существует пакет
rnspure, и работает он ощутимо медленнее.Метаданные остаются. Закрыть содержимое не значит спрятать сам факт разговора. Транспортным узлам видны адреса получателей, объёмы и тайминги. В радиоэфире к этому добавляется физика: излучение пеленгуется, и криптография тут бессильна.
Эфир регулируется. Правовой статус LoRa на 433/868/915 МГц и пакетного радио в VHF различается от страны к стране: где-то нужна лицензия, где-то ограничены мощность и доля времени в эфире, где-то шифрование в любительских диапазонах прямо под запретом. Выяснять это стоит до покупки железа, а не после.
🔒 Безопасность
Перед первым выходом в эфир изучите местное регулирование выбранного диапазона. Лицензионные требования, потолок мощности, ограничения duty cycle и допустимость шифрования отличаются по юрисдикциям, и ссылка на незнание не работает.
Сообщество узкое. Десяти ответов на профильном форуме по вашей проблеме не найдётся. Документация у проекта развёрнутая, но круг пользователей маленький.
❗ Главное
Браться за Reticulum разумно там, где привычный стек уже сдался: канал чересчур медленный, рваный либо враждебный. Когда IP работает и беспокоит только приватность, инструменты нужны другие — WireGuard, Tor, обычные VPN-решения.
Источники
💬 Вопрос к сообществу
Есть ли тут те, кто гонял Reticulum не ради интереса, а под конкретную задачу? Любопытны два момента: какая дальность и стабильность реально получились на LoRa между зданиями, и пробовал ли кто-то держать
rnshлибоrncpкак резервный способ достучаться до сервера, когда основной канал отвалился.TOP HOSTERS: KAMATERA (30 дней бесплатного теста!)
Универсальный хостер №1 - 4VPS.su (2Гб\с сервера) - 10% скидка на первый заказ или 15% бонус на первое пополнение