ostp/README.ru.md

9.2 KiB
Raw Blame History

OSTP — Ospab Stealth Transport Protocol

English · Wiki · Contributing · Миграция v0.3.1

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

Быстрый кастомный зашифрованный транспортный протокол на Rust.

OSTP (Ospab Stealth Transport Protocol) — кастомный транспортный протокол. Реализует собственный ARQ-транспорт поверх UDP, а также режим UoT (UDP-over-TCP). Каждый байт, включая заголовки пакетов, криптографически неотличим от случайного шума, что делает его устойчивым к системам глубокого анализа трафика (DPI).

[!IMPORTANT] Обновляетесь с версии v0.2.x? Пожалуйста, ознакомьтесь с Руководством по миграции конфигурации v0.3.1.


Возможности

Возможность Описание
Обфускация трафика Каждый пакет, включая заголовки, неотличим от случайного шума. 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 без внешних зависимостей (встроенный network stack на базе smoltcp).
xHTTP Стелс (UoT) Туннель UDP-over-TCP, который полностью скрывает трафик. Поскольку все данные полностью зашифрованы и имеют префикс длины, он обходит DPI фильтры, блокирующие неизвестный UDP трафик, передавая всё по обычному TCP соединению.
Мобильные и Web приложения Красивый кроссплатформенный мобильный клиент (Flutter) и современная Web панель управления (React/Vite) для удобного администрирования.
TURN Relay RFC 5766 TURN для окружений, где прямой UDP заблокирован.
Hot-Reload Перезагрузка конфига в рантайме без перезапуска (ключи, исключения, mux, TURN).
Кросс-платформа Windows, Linux, macOS, Android. Один бинарник, без зависимостей.

Архитектура

graph TD
    subgraph Client ["Клиент"]
        A[Браузер / Прил.] -->|SOCKS5 / HTTP| B(Bridge Multiplexer)
        TUN[TUN Интерфейс] -->|IP Пакеты| B
        
        subgraph OSTPCoreClient ["OSTP Core Протокол"]
            B --> C{Protocol Machine}
            C -->|Noise Handshake| D[ChaCha20Poly1305 AEAD]
            D -->|Обфусцированный UDP| E((UDP Сокет))
        end
    end

    E <==>|Зашифрованный UDP Туннель| F

    subgraph Server ["Сервер"]
        F((UDP Сокет)) --> G{Dispatcher}
        
        subgraph OSTPCoreServer ["OSTP Core Backend"]
            G -->|Auth & Decrypt| H[Session & State Guard]
            H -->|TCP Поток| I[Relay Loop]
        end
        
        G -->|Active Probing / Unauth| FB[TCP Fallback Proxy]
        FB -->|Перенаправление| NGINX[nginx / Caddy]
        
        I -->|Outbound| WWW((Интернет))
    end

Установка

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",
  "version": "0.3.1",
  "log": { "level": "info" },
  "inbounds": [
    { "type": "local_proxy", "tag": "socks-in", "protocol": "socks", "listen": "127.0.0.1", "port": 1088 },
    { "type": "tun", "tag": "tun-in", "auto_route": false, "mtu": 1140 }
  ],
  "outbounds": [
    {
      "type": "ostp",
      "tag": "proxy",
      "server": "IP_СЕРВЕРА",
      "port": 50000,
      "access_key": "ВАШ_КЛЮЧ",
      "transport": { "type": "udp" },
      "multiplex": { "enabled": false, "sessions": 1 }
    },
    { "type": "direct", "tag": "direct" },
    { "type": "block", "tag": "block" }
  ],
  "routing": {
    "rules": [
      { "domain_suffix": ["example.local"], "outbound": "direct" },
      { "ip_cidr": ["192.168.0.0/16"], "outbound": "direct" }
    ],
    "default_outbound": "proxy"
  }
}

Примечание: Обновляетесь с v0.2.x? Прочтите Гайд по миграции на v0.3.1.


Использование

# Запуск с конфигом
./ostp --config config.json

# Или просто (ищет config.json рядом с бинарником)
./ostp

TUN-режим (Windows)

Использует встроенный сетевой стек smoltcp и виртуальный адаптер wintun (необходима wintun.dll). Требует запуска с правами Администратора.

TUN-режим (Linux)

Использует встроенный сетевой стек smoltcp и /dev/net/tun. Требует запуска от имени root (или наличия CAP_NET_ADMIN).


Спецификация протокола

Уровень Механизм
Обмен ключами Noise NNpsk0 (X25519 + ChaChaPoly + BLAKE2s) zero-RTT
Шифрование 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 года.