ostp/README.ru.md

9.8 KiB
Raw Permalink Blame History

OSTP — Ospab Stealth Transport Protocol

English

GitHub Release License: BSL 1.1 Platform: Windows | Linux | macOS | Android

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 года.