# **RNS-over-HTTP** Интерфейс Reticulum, который туннелирует трафик через стандартные HTTP/S POST-запросы. Это позволяет Reticulum работать в сетях, где разрешён только веб-трафик, эффективно обходя файрволы, DPI и другие ограничения. [Не-GitHub-зеркало](https://lavaforge.org/Ivan/RNS-over-HTTP). Кроме того, файлы проекта (скрипт интерфейса и инструкция) доступны в сети Reticulum по адресу `RNS-over-HTTP`. ## **Обзор** RNS-over-HTTP создаёт двунаправленный транспортный уровень, используя простую клиент-серверную модель: * **Сервер**: Запускается на машине с публичным IP-адресом и прослушивает HTTP-запросы. * **Клиент**: Может находиться за файрволом или NAT, ему требуется только исходящий доступ в интернет. Клиент опрашивает сервер с помощью HTTP POST-запросов, отправляя любые исходящие данные в теле запроса и получая входящие данные в теле ответа. Это делает трафик похожим на обычную веб-активность. ## **Как это работает** Интерфейс имитирует постоянное соединение, используя механизм, подобный long-polling: 1. Клиент отправляет HTTP POST-запрос на сервер, помещая все ожидающие данные в тело запроса. 2. Сервер получает запрос. Он обрабатывает данные от клиента и немедленно отправляет обратно любые данные, находящиеся в очереди для клиента, в теле HTTP-ответа. 3. Клиент получает ответ и обрабатывает данные. 4. После короткого настраиваемого интервала опроса клиент повторяет процесс. Этот непрерывный цикл создаёт надёжный, хотя и с более высокой задержкой, канал связи. ## **Особенности** * **Обход файрволов и DPI**: Туннелирует любой трафик через стандартные порты HTTP/S (80/443). * **Двунаправленная связь**: Полнодуплексная передача данных. * **Простая настройка**: Никаких сложных зависимостей, только Python и `requests`. * **Надёжность**: Автоматическое повторное подключение с экспоненциальной задержкой. * **Гибкость**: Поддерживает пользовательские размеры MTU и настраиваемые интервалы опроса. * **Совместимость с прокси**: Бесшовно работает за обратными прокси-серверами, такими как Caddy или Nginx. ## **Начало работы** ### **Требования** * Python 3.9 или новее * `pip` для установки пакетов ### **Установка** 1. **Установите библиотеку** `requests`**, если она ещё не установлена:** ```bash pip install requests ``` 2. **Скачайте скрипт интерфейса:** Разместите `http_interface.py` в известном месте на клиентской и серверной машинах, например, в `~/.reticulum/interfaces/`. ## **Конфигурация** Настройте `PipeInterface` в вашем файле `~/.reticulum/config` как на сервере, так и на клиенте. ### **Конфигурация сервера** Сервер прослушивает входящие подключения от клиентов. ```ini [[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-адресу сервера. ```ini [[HTTP Interface]] type = PipeInterface enabled = True # Команда для запуска клиентского скрипта. Укажите в --url адрес вашего сервера. command = python3 /path/to/your/http_interface.py client --url http:// # Необязательно: задержка перед перезапуском интерфейса в случае сбоя. 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)** ### **Поддомен** ```caddy # Caddyfile для example.yourdomain.com example.yourdomain.com { reverse_proxy 127.0.0.1:8080 header { # Скрыть версию серверного ПО -Server # Запретить анализ MIME-типа X-Content-Type-Options nosniff } } ``` ### **Основной домен** ```caddy 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`).