ostp/README.ru.md

9.1 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 соединению.
Мобильные приложения Красивый кроссплатформенный мобильный клиент (Flutter) для удобного администрирования.
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 года.