Files
2025-09-26 18:42:21 -05:00

139 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# **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://<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)**
### **Поддомен**
```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`).