Files
RNS-over-HTTP/README-RU.md
2025-09-26 18:42:21 -05:00

8.0 KiB
Raw Blame History

RNS-over-HTTP

Интерфейс Reticulum, который туннелирует трафик через стандартные HTTP/S POST-запросы. Это позволяет Reticulum работать в сетях, где разрешён только веб-трафик, эффективно обходя файрволы, DPI и другие ограничения.

Не-GitHub-зеркало. Кроме того, файлы проекта (скрипт интерфейса и инструкция) доступны в сети 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, если она ещё не установлена:

    pip install requests
    
  2. Скачайте скрипт интерфейса: Разместите 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).