mirror of https://github.com/ospab/ostp.git
197 lines
9.4 KiB
Markdown
197 lines
9.4 KiB
Markdown
# OSTP — Ospab Stealth Transport Protocol
|
||
|
||
[English](README.md)
|
||
|
||

|
||

|
||

|
||
|
||
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. |
|
||
| **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
|
||
bash <(curl -Ls https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.sh)
|
||
```
|
||
|
||
### Windows (PowerShell от Администратора)
|
||
```powershell
|
||
irm https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.ps1 | iex
|
||
```
|
||
|
||
---
|
||
|
||
## Конфигурация
|
||
|
||
Создать конфиг по умолчанию:
|
||
```bash
|
||
./ostp --init server # VPS
|
||
./ostp --init client # Локальная машина
|
||
```
|
||
|
||
### Сервер (`config.json`)
|
||
```jsonc
|
||
{
|
||
"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`)
|
||
```jsonc
|
||
{
|
||
"mode": "client",
|
||
"server": "IP_СЕРВЕРА:50000",
|
||
"access_key": "ВАШ_КЛЮЧ",
|
||
"socks5_bind": "127.0.0.1:1088",
|
||
"debug": false,
|
||
// 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"]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Использование
|
||
|
||
```bash
|
||
# Запуск с конфигом
|
||
./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с на сервере |
|
||
|
||
---
|
||
|
||
## Сборка из исходников
|
||
|
||
```bash
|
||
# Требования: Rust toolchain (1.75+)
|
||
cargo build --release
|
||
|
||
# Кросс-компиляция для Linux
|
||
cross build --release --target x86_64-unknown-linux-gnu
|
||
```
|
||
|
||
---
|
||
|
||
## Документация
|
||
|
||
- [Архитектура](docs/ru/architecture.md)
|
||
- [Спецификация протокола](docs/ru/specification.md)
|
||
- [Дизайн обфускации](docs/ru/obfuscation.md)
|
||
- [Администрирование сервера](docs/ru/server.md)
|
||
- [Настройка клиента](docs/ru/client.md)
|
||
- [Интеграции](docs/ru/integrations.md)
|
||
|
||
---
|
||
|
||
## Лицензия
|
||
|
||
Business Source License 1.1. Бесплатно для личного и некоммерческого использования.
|
||
Переходит в MIT License 14 мая 2030 года.
|