mirror of https://github.com/ospab/ostp.git
9.8 KiB
9.8 KiB
OSTP — Ospab Stealth Transport Protocol
OSTP — высокопроизводительный транспортный протокол, устойчивый к цензуре. Туннелирует TCP-трафик поверх UDP с полной обфускацией. Устойчив к Deep Packet Inspection (DPI), активному зондированию и статистическому анализу трафика.
Возможности
| Возможность | Описание |
|---|---|
| Обфускация трафика | Каждый пакет, включая заголовки, неотличим от случайного шума. Session ID и nonce маскируются HMAC-ключами, уникальными для каждого пакета. |
| Noise Protocol | Noise_NNpsk0_25519_ChaChaPoly_BLAKE2s — аутентификация через PSK, forward secrecy, без раскрытия идентичности. |
| Reliable UDP (ARQ) | Selective ACK/NACK с rate-limited ретрансмиссией, настраиваемым reorder-буфером и exponential backoff. Разработан для 10 Гбит/с. |
| Мультиплексирование | Несколько логических TCP-потоков поверх одной зашифрованной UDP-сессии с per-stream flow control. |
| Бесшовный роуминг | Клиент может менять сети (WiFi ↔ 4G) без разрыва сессии — сервер отслеживает session-ID, а не IP-адрес. |
| TUN-режим | Полносистемный VPN через интеграцию с tun2socks на Windows и Linux. |
| xHTTP Стелс (UoT) | Туннель UDP-over-TCP, замаскированный под обычный HTTP/1.1 или TLS трафик для обхода белых списков ТСПУ (DPI). |
| TURN Relay | RFC 5766 TURN для окружений, где прямой UDP заблокирован. |
| Hot-Reload | Перезагрузка конфига в рантайме без перезапуска (ключи, исключения, mux, TURN). |
| Кросс-платформа | Windows, Linux, macOS, Android. Один бинарник, без зависимостей. |
Архитектура
┌────────────────────────────────────────────────────────────┐
│ Клиент │
│ ┌──────────┐ ┌──────────┐ ┌───────────────────────┐ │
│ │ Браузер │──▸│ SOCKS5/ │──▸│ Bridge (Mux) │ │
│ │ / Прил. │ │ HTTP │ │ ┌─────────────────┐ │ │
│ │ │ │ Прокси │ │ │ ProtocolMachine │ │ │
│ └──────────┘ └──────────┘ │ │ (Noise + AEAD) │ │ │
│ │ └────────┬────────┘ │ │
│ ┌──────────┐ │ │ │ │
│ │ TUN Mode │──────────────────┤ UDP-сокет │ │
│ │tun2socks │ │ (32МБ буферы, │ │
│ └──────────┘ │ обфускация) │ │
│ └───────────┬────────────┘ │
└────────────────────────────────────────────┼────────────────┘
│ UDP
┌────────────────────────────────────────────┼────────────────┐
│ Сервер │ │
│ ┌─────────────────────────────────────────┴──────────┐ │
│ │ Dispatcher │ │
│ │ (Поиск сессий, роуминг, защита от replay) │ │
│ └──────────────┬──────────────────────────────────────┘ │
│ │ │
│ ┌──────────────▾──────────────────┐ │
│ │ Relay Loop (TCP per-stream) │──▸ Интернет / Backend │
│ └─────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
Установка
Linux
bash <(curl -Ls https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.sh)
Windows (PowerShell от Администратора)
irm https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.ps1 | iex
Конфигурация
Создать конфиг по умолчанию:
./ostp --init server # VPS
./ostp --init client # Локальная машина
Сервер (config.json)
{
"mode": "server",
"listen": "0.0.0.0:50000",
"access_keys": ["ВАШ_КЛЮЧ"],
"debug": false,
// Опционально: проксировать трафик через upstream
"outbound": {
"enabled": false,
"protocol": "socks5",
"address": "127.0.0.1",
"port": 9050,
"default_action": "proxy"
}
}
Клиент (config.json)
{
"mode": "client",
"server": "IP_СЕРВЕРА:50000",
"access_key": "ВАШ_КЛЮЧ",
"socks5_bind": "127.0.0.1:1088",
"debug": false,
// Настройки транспорта (udp или uot)
"transport": {
"mode": "udp",
"stealth_sni": "vk.com",
"stealth_port": 443
},
// TUN-режим (полносистемный VPN)
"tun": {
"enable": false,
"dns": "1.1.1.1"
},
// Мультиплексирование: несколько UDP-сессий
"mux": {
"enabled": false,
"sessions": 2
},
// TURN-реле для заблокированных сетей
"turn": {
"enabled": false,
"server_addr": "turn.example.com:3478",
"username": "user",
"access_key": "pass"
},
// Исключения (идут напрямую, минуя туннель)
"exclude": {
"domains": ["example.local"],
"ips": ["192.168.0.0/16"]
}
}
Использование
# Запуск с конфигом
./ostp --config config.json
# Или просто (ищет config.json рядом с бинарником)
./ostp
TUN-режим (Windows)
Требуется tun2socks.exe в той же директории. Автоматически запрашивает права Администратора.
TUN-режим (Linux)
Требуется root. Нужен бинарник tun2socks (рядом или в $PATH).
Спецификация протокола
| Уровень | Механизм |
|---|---|
| Обмен ключами | Noise NNpsk0 (X25519 + ChaChaPoly + BLAKE2s) |
| Шифрование | ChaCha20-Poly1305 AEAD на каждый пакет |
| Обфускация заголовков | HMAC-SHA256 маска session_id + nonce, уникальная для каждого пакета |
| Надёжность | Selective ACK с cumulative + SACK диапазонами |
| Ретрансмиссия | Rate-limited NACK (30мс cooldown) + exponential backoff RTO |
| Flow Control | Окно in-flight (только retransmittable фреймы) |
| Keepalive | Ping/Pong с измерением RTT каждые 5с |
| Таймаут сессии | 60с на клиенте, 300с на сервере |
Сборка из исходников
# Требования: Rust toolchain (1.75+)
cargo build --release
# Кросс-компиляция для Linux
cross build --release --target x86_64-unknown-linux-gnu
Документация
- Архитектура
- Спецификация протокола
- Дизайн обфускации
- Администрирование сервера
- Настройка клиента
- Интеграции
Лицензия
Business Source License 1.1. Бесплатно для личного и некоммерческого использования. Переходит в MIT License 14 мая 2030 года.