8.0 KiB
RNS-over-HTTP
Интерфейс Reticulum, который туннелирует трафик через стандартные HTTP/S POST-запросы. Это позволяет Reticulum работать в сетях, где разрешён только веб-трафик, эффективно обходя файрволы, DPI и другие ограничения.
Не-GitHub-зеркало. Кроме того, файлы проекта (скрипт интерфейса и инструкция) доступны в сети Reticulum по адресу RNS-over-HTTP.
Обзор
RNS-over-HTTP создаёт двунаправленный транспортный уровень, используя простую клиент-серверную модель:
-
Сервер: Запускается на машине с публичным IP-адресом и прослушивает HTTP-запросы.
-
Клиент: Может находиться за файрволом или NAT, ему требуется только исходящий доступ в интернет.
Клиент опрашивает сервер с помощью HTTP POST-запросов, отправляя любые исходящие данные в теле запроса и получая входящие данные в теле ответа. Это делает трафик похожим на обычную веб-активность.
Как это работает
Интерфейс имитирует постоянное соединение, используя механизм, подобный long-polling:
- Клиент отправляет HTTP POST-запрос на сервер, помещая все ожидающие данные в тело запроса.
- Сервер получает запрос. Он обрабатывает данные от клиента и немедленно отправляет обратно любые данные, находящиеся в очереди для клиента, в теле HTTP-ответа.
- Клиент получает ответ и обрабатывает данные.
- После короткого настраиваемого интервала опроса клиент повторяет процесс.
Этот непрерывный цикл создаёт надёжный, хотя и с более высокой задержкой, канал связи.
Особенности
-
Обход файрволов и DPI: Туннелирует любой трафик через стандартные порты HTTP/S (80/443).
-
Двунаправленная связь: Полнодуплексная передача данных.
-
Простая настройка: Никаких сложных зависимостей, только Python и
requests. -
Надёжность: Автоматическое повторное подключение с экспоненциальной задержкой.
-
Гибкость: Поддерживает пользовательские размеры MTU и настраиваемые интервалы опроса.
-
Совместимость с прокси: Бесшовно работает за обратными прокси-серверами, такими как Caddy или Nginx.
Начало работы
Требования
-
Python 3.9 или новее
-
pipдля установки пакетов
Установка
-
Установите библиотеку
requests, если она ещё не установлена:pip install requests -
Скачайте скрипт интерфейса: Разместите
http_interface.pyв известном месте на клиентской и серверной машинах, например, в~/.reticulum/interfaces/.
Конфигурация
Настройте PipeInterface в вашем файле ~/.reticulum/config как на сервере, так и на клиенте.
Конфигурация сервера
Сервер прослушивает входящие подключения от клиентов.
[[HTTP Interface]]
type = PipeInterface
enabled = True
# Команда для запуска серверного скрипта. По умолчанию прослушивает все интерфейсы.
command = python3 /path/to/your/http_interface.py server --host 0.0.0.0 --port 8080
# Необязательно: задержка перед перезапуском интерфейса в случае сбоя.
respawn_delay = 5
name = HTTP Interface Server
Конфигурация клиента
Клиент подключается к публичному URL-адресу сервера.
[[HTTP Interface]]
type = PipeInterface
enabled = True
# Команда для запуска клиентского скрипта. Укажите в --url адрес вашего сервера.
command = python3 /path/to/your/http_interface.py client --url http://<your-server-ip-or-domain>
# Необязательно: задержка перед перезапуском интерфейса в случае сбоя.
respawn_delay = 5
name = HTTP Interface Client
Параметры командной строки
Вы можете настроить поведение скрипта с помощью этих аргументов:
--mtu: Максимальный размер пакета (Maximum Transmission Unit) в байтах (по умолчанию:4096).--poll-interval: Интервал опроса клиента в секундах (по умолчанию:0.1).--verboseили-v: Включить подробное отладочное журналирование.--host: Хост для прослушивания сервером (по умолчанию:0.0.0.0).--port: Порт для прослушивания сервером (по умолчанию:8080).--disable-user-agent-check: Отключить проверку User-Agent на сервере.
Настройка обратного прокси-сервера (пример для Caddy)
Поддомен
# Caddyfile для example.yourdomain.com
example.yourdomain.com {
reverse_proxy 127.0.0.1:8080
header {
# Скрыть версию серверного ПО
-Server
# Запретить анализ MIME-типа
X-Content-Type-Options nosniff
}
}
Основной домен
yourdomain.com {
reverse_proxy 127.0.0.1:8080
header {
# Скрыть версию серверного ПО
-Server
# Запретить анализ MIME-типа
X-Content-Type-Options nosniff
}
}
Соображения по безопасности
-
Используйте HTTPS: Это помогает обойти некоторые файрволы и DPI, которые потенциально могут видеть данные Reticulum.
-
Проверка User-Agent: По умолчанию сервер проверяет заголовок
User-Agent(RNS-HTTP-Tunnel/1.0). Это обеспечивает базовую защиту от веб-сканеров и случайного сканирования. Если вам нужно обойти сложные системы DPI, вы можете изменить этот заголовок в скрипте, чтобы имитировать обычный браузер, и отключить проверку на сервере (--disable-user-agent-check).