Перейти к содержанию

Обнаружение интерфейсов

Reticulum включает встроенную функциональность для обнаружения подключаемых интерфейсов через саму сеть Reticulum. Это особенно полезно в ситуациях, когда необходимо выполнить одно или несколько следующих действий:

  • Обнаружить доступные точки входа в сеть Интернет
  • Найти точки доступа радиосвязи в физическом мире
  • Поддерживать соединение с экземплярами RNS с неизвестными или изменяющимися IP-адресами

Обнаруженные интерфейсы могут быть автоматически подключены Reticulum, что позволяет настроить произвольный интерфейс как загрузочное соединение, которое может быть отключено после обнаружения и подключения более подходящих интерфейсов.


Механизм обнаружения

Механизм обнаружения интерфейсов использует анонсы (announces), отправляемые через саму сеть Reticulum, и поддерживает как публично доступные интерфейсы, так и приватное зашифрованное обнаружение, доступное только для указанных сетевых идентификаторов.

Также можно указать, какие сетевые идентификаторы должны считаться допустимыми источниками обнаруженных интерфейсов, чтобы игнорировать интерфейсы, опубликованные неизвестными субъектами.

Примечание

Сетевой идентификатор — это обычный набор ключей идентичности Reticulum, который может использоваться одним или несколькими транспортными узлами для идентификации их принадлежности к одной общей сети. В контексте обнаружения интерфейсов это позволяет легко управлять подключением только к тем сетям, которые вас интересуют, даже если эти сети используют множество отдельных физических транспортных узлов.

Это также удобно для автоматического подключения обнаруженных интерфейсов только для сетей, которым вы доверяете.

Информацию о том, как сделать ваши интерфейсы обнаруживаемыми, смотрите в главе Обнаруживаемые интерфейсы этого руководства. В текущем разделе мы сосредоточимся на том, как фактически обнаруживать и подключать интерфейсы, доступные в сети.


Базовая настройка

В простейшей форме включение обнаружения интерфейсов сводится к установке discover_interfaces = yes в конфигурации Reticulum:

[reticulum]
...
discover_interfaces = yes
...

Как только эта опция включена, ваш экземпляр RNS начнёт прослушивать анонсы обнаружения интерфейсов и сохранять их для последующего использования или проверки.


Просмотр обнаруженных интерфейсов

Вы можете просмотреть список обнаруженных интерфейсов с помощью утилиты rnstatus:

$ rnstatus -d

## Name           Type             Status    Last Heard    Value    Location
Sideband Hub     BackboneInterface         1h ago        16       46.2316, 6.0536
RNS Amsterdam    BackboneInterface         32m ago       16       52.3865, 4.9037

Для просмотра более подробной информации об обнаруженных интерфейсах, включая фрагменты конфигурации для вставки непосредственно в секцию [interfaces], используйте опцию rnstatus -D:

$ rnstatus -D sideband

Transport ID      : 521c87a83afb8f29e4455e77930b973b
Name              : Sideband Hub
Type              : BackboneInterface
Status            : Available
Transport         : Enabled
Distance          : 2 hops
Discovered        : 9h and 40m ago
Last Heard        : 1h and 15m ago
Location          : 46.2316, 6.0536
Address           : sideband.connect.reticulum.network:7822
Stamp Value       : 16

Configuration Entry:
[[Sideband Hub]]
type = BackboneInterface
enabled = yes
remote = sideband.connect.reticulum.network
target_port = 7822
transport_identity = 521c87a83afb8f29e4455e77930b973b

Экспорт в JSON

В дополнение к локальному просмотру информации об обнаруженных интерфейсах, утилита rnstatus может экспортировать данные в машиночитаемом формате JSON с помощью опции rnstatus -d --json. Это может быть полезно для экспорта данных во внешние приложения, такие как страницы статуса, карты точек доступа и т.д.

$ rnstatus -d --json

Расширенная конфигурация

Для управления тем, какие источники считаются допустимыми для обнаруженных интерфейсов, можно указать дополнительные параметры конфигурации для системы обнаружения интерфейсов.

Параметры конфигурации

Параметр Описание
interface_discovery_sources Список сетевых или транспортных идентификаторов, от которых будут приниматься интерфейсы. Если этот параметр установлен, все остальные игнорируются. Если не установлен, обнаруженные интерфейсы принимаются от любого источника, но всё ещё подчиняются требованиям к значению штампа
required_discovery_value Минимальное значение штампа, необходимое для того, чтобы анонс интерфейса считался допустимым. Чтобы сделать вычислительно сложной спам-атаку сети большим количеством неработающих или вредоносных интерфейсов, каждый анонсированный интерфейс требует действительный криптографический штамп настраиваемой сложности
autoconnect_discovered_interfaces По умолчанию 0. Указывает максимальное количество обнаруженных интерфейсов, которые должны быть автоматически подключены в любой момент времени. Если установлено значение больше 0, Reticulum автоматически управляет подключениями обнаруженных интерфейсов, включая и отключая их в зависимости от доступности. Вы можете в любое время добавить обнаруженные интерфейсы в свою конфигурацию вручную для постоянного сохранения их доступности
network_identity Указывает сетевой идентификатор для этого экземпляра RNS. Эта идентичность используется как для подписи (и потенциально шифрования) исходящих анонсов обнаружения интерфейсов, так и для расшифровки входящей информации обнаружения

Пример конфигурации

[reticulum]
...
discover_interfaces = yes
interface_discovery_sources = 521c87a83afb8f29e4455e77930b973b
required_discovery_value = 16
autoconnect_discovered_interfaces = 3
network_identity = ~/.reticulum/storage/identities/my_network
...

Обнаруживаемые интерфейсы

Чтобы сделать ваш интерфейс обнаруживаемым другими узлами сети, необходимо настроить соответствующие параметры в конфигурации вашего экземпляра RNS.

Требования к публикации

Для того чтобы интерфейс мог быть обнаружен:

  1. Включите обнаружение интерфейсов — установите discover_interfaces = yes
  2. Настройте сетевой идентификатор — укажите путь к файлу идентичности в network_identity
  3. Разрешите анонсирование — интерфейс должен быть помечен как обнаруживаемый в конфигурации

Пример конфигурации обнаруживаемого интерфейса

[interfaces]
[[My Public Hub]]
type = TCPInterface
enabled = yes
interface_enabled = yes
discoverable = yes
remote = 0.0.0.0
target_port = 7822
network_identity = ~/.reticulum/storage/identities/my_network

Важно: Убедитесь, что ваш брандмауэр разрешает входящие подключения на указанный порт, если вы хотите сделать интерфейс общедоступным.


Сценарии использования

1. Резервное соединение

Настройте автоматическое подключение к общедоступным узлам при потере связи с основными интерфейсами:

[reticulum]
discover_interfaces = yes
autoconnect_discovered_interfaces = 2
required_discovery_value = 16

2. Частная сеть

Ограничьте обнаружение интерфейсов только доверенными участниками сети:

[reticulum]
discover_interfaces = yes
interface_discovery_sources = 521c87a83afb8f29e4455e77930b973b,8f3e2a1c4b5d6e7f
network_identity = ~/.reticulum/storage/identities/private_net

3. Мобильный узел

Для мобильных узлов с динамически изменяющимся IP-адресом:

[interfaces]
[[Mobile Node]]
type = TCPInterface
enabled = yes
discoverable = yes
remote = 0.0.0.0
target_port = 7822

Мобильный узел будет автоматически анонсировать свой текущий адрес, и другие узлы смогут подключаться к нему независимо от изменения IP.


Безопасность

Защита от спама

Механизм криптографических штампов делает экономически невыгодным создание большого количества фальшивых интерфейсов. Значение required_discovery_value определяет вычислительную сложность создания действительного анонса:

Значение штампа Сложность Рекомендация
8-12 Низкая Тестовые сети, локальные развёртывания
14-18 Средняя Публичные сети общего назначения
20+ Высокая Критические инфраструктуры, приватные сети

Доверенные источники

Использование interface_discovery_sources позволяет создать whitelist доверенных идентификаторов. Это особенно важно для:

  • Корпоративных развёртываний
  • Закрытых сообществ
  • Критических инфраструктур

Диагностика

Частые проблемы и решения

Проблема Возможная причина Решение
Не обнаруживаются интерфейсы discover_interfaces = no Установите discover_interfaces = yes
Игнорируются анонсы Несоответствие interface_discovery_sources Добавьте источник в список или удалите параметр
Нет автоподключения autoconnect_discovered_interfaces = 0 Установите значение больше 0
Ошибка расшифровки Неправильный network_identity Проверьте путь к файлу идентичности

Логи и отладка

Включите подробное логирование для диагностики проблем обнаружения:

[reticulum]
loglevel = debug

В логах ищите сообщения, содержащие Interface discovery для отслеживания процесса обнаружения.


См. также