docs: use exact short install commands in wiki pages

ospab 2026-05-17 17:19:45 +03:00
parent 6848a83bc2
commit c22dc10341
17 changed files with 675 additions and 106 deletions

@ -1,5 +1,7 @@
# Building from Source # Building from Source
[Russian / Русский](Building-from-Source_ru)
## Prerequisites ## Prerequisites
- [Rust](https://rustup.rs/) (stable toolchain) - [Rust](https://rustup.rs/) (stable toolchain)

@ -0,0 +1,88 @@
# Сборка из исходников
![Build](https://img.shields.io/github/actions/workflow/status/ospab/ostp/release.yml?style=flat-square&label=CI%2FCD)
[English / Английский](Building-from-Source) | [← Главная](Home_ru)
## Предварительные требования
- [Rust](https://rustup.rs/) (stable toolchain)
- Git
### Для GUI (дополнительно)
- Node.js 20+
- Tauri CLI: `cargo install tauri-cli --version "^2"`
### Для кросс-компиляции
- [cross](https://github.com/cross-rs/cross): `cargo install cross`
## Сборка CLI
```bash
git clone https://github.com/ospab/ostp.git
cd ostp
cargo build --release --bin ostp
```
Результат: `target/release/ostp` (или `ostp.exe` на Windows)
## Сборка GUI
```bash
cd ostp-gui
cargo tauri build
```
Результат: `ostp-gui/src-tauri/target/release/ostp-gui.exe`
## Сборка под конкретные платформы
```bash
# Linux ARM64
cargo build --release --target aarch64-unknown-linux-musl --bin ostp
# Windows ARM64
cargo build --release --target aarch64-pc-windows-msvc --bin ostp
# Android (через cross)
cross build --release --target aarch64-linux-android --bin ostp
# Роутер (MIPS)
cross build --release --target mipsel-unknown-linux-musl --bin ostp
```
## Сборка JNI (Android)
```bash
cross build --release --target aarch64-linux-android -p ostp-jni
```
Результат: `target/aarch64-linux-android/release/libostp_jni.so`
## Поддерживаемые платформы
| Цель | Архитектура | ОС |
|---|---|---|
| `x86_64-pc-windows-msvc` | x64 | Windows |
| `aarch64-pc-windows-msvc` | ARM64 | Windows |
| `x86_64-unknown-linux-musl` | x64 | Linux |
| `aarch64-unknown-linux-musl` | ARM64 | Linux |
| `armv7-unknown-linux-musleabihf` | ARMv7 | Linux |
| `x86_64-apple-darwin` | x64 | macOS |
| `aarch64-apple-darwin` | ARM64 | macOS (M1+) |
| `mipsel-unknown-linux-musl` | MIPS LE | Linux (Роутеры) |
| `riscv64gc-unknown-linux-gnu` | RISC-V 64 | Linux |
| `aarch64-linux-android` | ARM64 | Android |
| `x86_64-unknown-freebsd` | x64 | FreeBSD |
## Запуск тестов
```bash
cargo test -p ostp-core
```
---
[← GUI-клиент](GUI-Client_ru) | [FAQ →](FAQ_ru)

@ -1,4 +1,8 @@
# Configuration # Configuration
![GitHub Release](https://img.shields.io/github/v/release/ospab/ostp?style=flat-square&color=blue)
[Russian / Русский](Configuration_ru)
## Server Configuration ## Server Configuration

103
Configuration_ru.md Normal file

@ -0,0 +1,103 @@
# Конфигурация
![GitHub Release](https://img.shields.io/github/v/release/ospab/ostp?style=flat-square&color=blue)
[English / Английский](Configuration) | [← Главная](Home_ru)
## Серверная конфигурация
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
| `mode` | string | обязательно | Должно быть `"server"` |
| `listen` | string | `"0.0.0.0:50000"` | Адрес и порт прослушивания |
| `access_keys` | string[] | обязательно | Список ключей доступа для клиентов |
| `log_level` | string | `"info"` | Уровень логирования: `debug`, `info`, `warn`, `error` |
### Пример
```json
{
"mode": "server",
"listen": "0.0.0.0:50000",
"access_keys": [
"ключ-пользователя-1",
"ключ-пользователя-2"
],
"log_level": "info"
}
```
## Клиентская конфигурация
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
| `mode` | string | обязательно | Должно быть `"client"` |
| `server` | string | обязательно | Адрес сервера (`host:port`) |
| `access_key` | string | обязательно | Ключ доступа, совпадающий с серверным |
| `socks5_bind` | string | `"127.0.0.1:1088"` | Адрес локального HTTP/SOCKS5 прокси |
| `debug` | bool | `false` | Включить подробное логирование |
| `tun` | object | `null` | Настройки TUN-туннеля |
| `exclude` | object | `null` | Правила исключения трафика |
| `mux` | object | `null` | Настройки мультиплексирования |
### TUN-туннель
| Поле | Тип | Описание |
|---|---|---|
| `enable` | bool | Включить TUN-режим (маршрутизирует весь трафик) |
| `dns` | string | DNS-сервер для туннельного интерфейса |
### Исключения
| Поле | Тип | Описание |
|---|---|---|
| `domains` | string[] | Суффиксы доменов для обхода (`"google.com"`) |
| `ips` | string[] | IP-адреса или CIDR-диапазоны для обхода (`"192.168.0.0/16"`) |
| `processes` | string[] | Имена процессов для обхода в прокси-режиме (`"chrome.exe"`) |
### Мультиплексирование
| Поле | Тип | Описание |
|---|---|---|
| `enabled` | bool | Включить мультиплексирование сессий |
| `sessions` | int | Количество параллельных OSTP-сессий |
### Полный пример клиентского конфига
```json
{
"mode": "client",
"server": "example.com:50000",
"access_key": "мой-ключ",
"socks5_bind": "127.0.0.1:1088",
"debug": false,
"tun": {
"enable": true,
"dns": "1.1.1.1"
},
"exclude": {
"domains": ["bank.ru", "local.network"],
"ips": ["192.168.0.0/16", "10.0.0.0/8"],
"processes": ["steam.exe"]
},
"mux": {
"enabled": false,
"sessions": 1
}
}
```
### TURN-реле (опционально)
Для сетей, блокирующих прямой UDP:
| Поле | Тип | Описание |
|---|---|---|
| `turn.enabled` | bool | Включить TURN-реле |
| `turn.server_addr` | string | Адрес TURN-сервера |
| `turn.username` | string | Имя пользователя TURN |
| `turn.access_key` | string | Пароль TURN |
---
[← Установка](Installation_ru) | [Протокол →](Protocol-Design_ru)

2
FAQ.md

@ -1,5 +1,7 @@
# FAQ # FAQ
[Russian / Русский](FAQ_ru)
## General ## General
### What is the difference between OSTP and other proxy protocols? ### What is the difference between OSTP and other proxy protocols?

75
FAQ_ru.md Normal file

@ -0,0 +1,75 @@
# Часто задаваемые вопросы
[English / Английский](FAQ) | [← Главная](Home_ru)
## Общие
### Чем OSTP отличается от других прокси-протоколов?
OSTP спроектирован специально для устойчивости к DPI/ТСПУ. В отличие от Shadowsocks, VMess или VLESS, OSTP:
- Не имеет magic bytes или полей версии
- Выводит все параметры обфускации из ключа доступа
- Использует UDP с Noise-протоколом для обмена ключами
- Не может быть идентифицирован анализом бинарника
### OSTP совместим с xray-core или sing-box?
Нет. OSTP — это самостоятельный протокол со своим транспортом и шифрованием. Это не плагин для существующих прокси-фреймворков.
### OSTP поддерживает нескольких пользователей?
Да. Сервер принимает несколько ключей доступа в массиве `access_keys`. Каждый ключ создаёт независимую зашифрованную сессию.
## Подключение
### Почему хендшейк не проходит?
1. **Неверный ключ** — ключи должны точно совпадать на клиенте и сервере
2. **UDP заблокирован** — некоторые сети полностью блокируют UDP. Попробуйте TURN-реле
3. **Порт заблокирован** — попробуйте порт 443 или 8443
4. **Несовпадение версий** — клиент и сервер должны быть одной версии
### Какие порты использует OSTP?
По умолчанию: UDP порт 50000. Настраивается в конфиге.
### OSTP работает по TCP?
Нет. OSTP работает только по UDP. Для сетей, блокирующих UDP, используйте встроенную функцию TURN-реле.
## Производительность
### Каков ожидаемый оверхед?
Примерно 50100 байт на пакет (AEAD-шифрование, nonce, заголовок сессии). На высокоскоростных соединениях оверхед пренебрежимо мал (<1%).
### Как работает мультиплексирование?
При включении клиент создаёт несколько OSTP-сессий к серверу одновременно. Это может повысить пропускную способность на сетях с потерями.
## Безопасность
### Какая криптография используется?
- **Обмен ключами**: Noise_NNpsk0 (X25519 + ChaChaPoly + BLAKE2s)
- **Вывод ключей**: HKDF-SHA256 (RFC 5869)
- **Транспортное шифрование**: ChaCha20-Poly1305 AEAD
- **Маски обфускации**: HMAC-SHA256
### Может ли провайдер обнаружить трафик OSTP?
OSTP спроектирован чтобы максимально затруднить обнаружение:
- Все байты на проводе неотличимы от случайных
- Нет статических сигнатур или паттернов
- Диапазон паддинга уникален для каждого ключа
- Бинарник не содержит строк протокола
Однако анализ паттернов трафика (тайминг, объёмы) может выявить туннель. OSTP включает адаптивный паддинг для смягчения этого.
### Что означает принцип Керкгоффса для OSTP?
Даже имея полный доступ к исходному коду и бинарнику, противник не сможет построить DPI-фильтр без знания валидного ключа доступа. Безопасность протокола зависит исключительно от секретности ключа.
---
[← Сборка](Building-from-Source_ru) | [Главная](Home_ru)

@ -1,5 +1,7 @@
# GUI Client # GUI Client
[Russian / Русский](GUI-Client_ru)
## Overview ## Overview
The OSTP GUI is a Windows desktop application built with Tauri v2. It provides a visual interface for connecting to OSTP servers with support for both proxy and TUN tunnel modes. The OSTP GUI is a Windows desktop application built with Tauri v2. It provides a visual interface for connecting to OSTP servers with support for both proxy and TUN tunnel modes.

57
GUI-Client_ru.md Normal file

@ -0,0 +1,57 @@
# GUI-клиент
![Platform](https://img.shields.io/badge/Platform-Windows%20x64%20%7C%20ARM64-blue?style=flat-square)
[English / Английский](GUI-Client) | [← Главная](Home_ru)
## Обзор
GUI-клиент OSTP — десктопное приложение для Windows на базе Tauri v2. Обеспечивает визуальный интерфейс подключения к серверам OSTP с поддержкой прокси и TUN-режимов.
## Требования
- Windows 10/11 (x64 или ARM64)
- Права администратора (необходимы для TUN-режима)
- `wintun.dll` и `tun2socks.exe` в той же папке (включены в архив релиза)
## Возможности
- Подключение одной кнопкой
- Метрики трафика в реальном времени
- Системный прокси и TUN-туннель
- Импорт конфигурации через `ostp://` ссылки
- Исключения по доменам, IP/CIDR и процессам
- Двуязычный интерфейс (Русский / English)
## Режимы
### Прокси-режим
Создаёт локальный HTTP/SOCKS5 прокси (по умолчанию: `127.0.0.1:1088`). Приложения нужно настроить на использование этого прокси.
### TUN-режим
Создаёт виртуальный сетевой адаптер (`ostp_tun`), перехватывающий весь системный трафик. Настройка приложений не требуется.
**TUN-режим требует:**
- Запуска от имени администратора
- `wintun.dll` в директории приложения
- `tun2socks.exe` в директории приложения
## Устранение проблем
### «tun2socks.exe отсутствует»
Скачайте с [tun2socks releases](https://github.com/xjasonlyu/tun2socks/releases) и поместите в папку приложения.
### TUN-интерфейс отображается как «ostp_tun 2»
Это происходит когда предыдущий адаптер не был очищен. Приложение теперь автоматически удаляет устаревшие адаптеры при запуске.
### Интернет не работает после отключения
Если туннель упал аварийно, маршруты могут не очиститься. Перезапустите приложение — оно очищает маршруты при запуске.
---
[← Ссылки-приглашения](Share-Links_ru) | [Сборка →](Building-from-Source_ru)

28
Home.md

@ -1,6 +1,13 @@
# OSTP — Obfuscated Secure Transport Protocol # OSTP — Ospab Stealth Transport Protocol
Welcome to the OSTP Wiki. ![GitHub Release](https://img.shields.io/github/v/release/ospab/ostp?style=flat-square&color=blue)
![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-orange.svg?style=flat-square)
![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS%20%7C%20Android-green.svg?style=flat-square)
![Build](https://img.shields.io/github/actions/workflow/status/ospab/ostp/release.yml?style=flat-square&label=CI%2FCD)
![Crypto](https://img.shields.io/badge/Crypto-Noise__NNpsk0-blueviolet?style=flat-square)
![Transport](https://img.shields.io/badge/Transport-UDP-informational?style=flat-square)
Welcome to the OSTP Wiki. | [Russian version / Русская версия](Home_ru)
## Quick Navigation ## Quick Navigation
@ -16,16 +23,19 @@ Welcome to the OSTP Wiki.
## What is OSTP? ## What is OSTP?
OSTP is a UDP-based encrypted tunneling protocol designed for maximum DPI/TSPU resistance. Every byte on the wire is cryptographically indistinguishable from random noise. **Ospab Stealth Transport Protocol** is a UDP-based encrypted tunneling protocol designed for maximum DPI/TSPU resistance. Every byte on the wire is cryptographically indistinguishable from random noise.
### Key Features ### Key Features
- **Full DPI resistance** — Kerckhoffs's principle compliant, no protocol fingerprints in binary | Feature | Description |
- **Per-session key derivation** — HKDF-SHA256 based, unique masks per packet |---|---|
- **Noise_NNpsk0 handshake** — X25519 + ChaChaPoly + BLAKE2s | **Full Obfuscation** | Kerckhoffs's principle — security depends solely on the key |
- **ARQ reliability** — Selective acknowledgments over UDP | **Noise_NNpsk0** | X25519 + ChaChaPoly + BLAKE2s — Forward Secrecy |
- **Adaptive padding** — Key-derived, per-user packet size distributions | **Reliable UDP (ARQ)** | Selective ACK, retransmission, reorder buffer |
- **Cross-platform** — Windows, Linux, macOS, Android, FreeBSD, MIPS, RISC-V | **Multiplexing** | Multiple TCP streams over a single UDP session |
| **Cross-Platform** | Windows, Linux, macOS, Android, FreeBSD, MIPS, RISC-V |
| **TUN Mode** | Full VPN via virtual network adapter |
| **Seamless Roaming** | Network switch without session interruption |
### Releases ### Releases

42
Home_ru.md Normal file

@ -0,0 +1,42 @@
# OSTP — Ospab Stealth Transport Protocol
![GitHub Release](https://img.shields.io/github/v/release/ospab/ostp?style=flat-square&color=blue)
![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-orange.svg?style=flat-square)
![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS%20%7C%20Android-green.svg?style=flat-square)
![Build](https://img.shields.io/github/actions/workflow/status/ospab/ostp/release.yml?style=flat-square&label=CI%2FCD)
![Crypto](https://img.shields.io/badge/Crypto-Noise__NNpsk0-blueviolet?style=flat-square)
![Transport](https://img.shields.io/badge/Transport-UDP-informational?style=flat-square)
Добро пожаловать в Wiki проекта OSTP. | [English version / Английская версия](Home)
## Навигация
| Страница | Описание |
|---|---|
| [Установка](Installation_ru) | Развёртывание сервера и клиента |
| [Конфигурация](Configuration_ru) | Полный справочник config.json |
| [Протокол](Protocol-Design_ru) | Wire-формат, криптография, защита от DPI |
| [GUI-клиент](GUI-Client_ru) | Приложение для Windows |
| [Ссылки-приглашения](Share-Links_ru) | Формат `ostp://` URI |
| [Сборка](Building-from-Source_ru) | Компиляция из исходников |
| [FAQ](FAQ_ru) | Часто задаваемые вопросы |
## Что такое OSTP?
**Ospab Stealth Transport Protocol** — UDP-протокол зашифрованного туннелирования, разработанный для максимальной устойчивости к DPI и ТСПУ. Каждый байт на проводе криптографически неотличим от случайного шума.
### Ключевые особенности
| Возможность | Описание |
|---|---|
| **Полная обфускация** | Принцип Керкгоффса — безопасность зависит только от ключа |
| **Noise_NNpsk0** | X25519 + ChaChaPoly + BLAKE2s — Forward Secrecy |
| **Надёжный UDP (ARQ)** | Selective ACK, ретрансмиссия, буфер переупорядочивания |
| **Мультиплексирование** | Множество TCP-потоков в одной UDP-сессии |
| **Кросс-платформа** | Windows, Linux, macOS, Android, FreeBSD, MIPS, RISC-V |
| **TUN-режим** | Полный VPN через виртуальный сетевой адаптер |
| **Бесшовный роуминг** | Смена сети без разрыва сессии |
### Скачать
Последний релиз: [GitHub Releases](https://github.com/ospab/ostp/releases)

@ -1,115 +1,61 @@
# Installation # Installation
## Server ![GitHub Release](https://img.shields.io/github/v/release/ospab/ostp?style=flat-square&color=blue)
![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS%20%7C%20Android-green.svg?style=flat-square)
### Quick Install (Linux) [Russian / Русский](Installation_ru)
OSTP (Ospab Stealth Transport Protocol) is deployed using automated setup scripts. Manual setup remains an option.
---
## Automated Script Installation
### Linux (Server / Client CLI)
Downloads the architecture-specific binary to `/opt/ostp`, configures it interactively, and registers a systemd service.
Run as root:
```bash ```bash
# Download latest release bash <(curl -Ls https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.sh)
curl -Lo ostp.tar.gz https://github.com/ospab/ostp/releases/latest/download/ostp-linux-amd64.tar.gz
tar xzf ostp.tar.gz
chmod +x ostp
``` ```
### Configuration Management commands:
Create `config.json` in the same directory:
```json
{
"mode": "server",
"listen": "0.0.0.0:50000",
"access_keys": ["your-secret-key-here"],
"log_level": "info"
}
```
### Run
```bash ```bash
./ostp sudo systemctl enable --now ostp # Start service and enable on boot
sudo systemctl restart ostp # Restart service
sudo systemctl status ostp # View running logs
``` ```
### Systemd Service ### Windows (Client CLI)
```bash PowerShell script that installs to `C:\opt\ostp`, configures client settings interactively, and registers the installation folder in your system PATH.
sudo tee /etc/systemd/system/ostp.service << 'EOF'
[Unit]
Description=OSTP Server
After=network.target
[Service] Run PowerShell as Administrator:
Type=simple ```powershell
WorkingDirectory=/opt/ostp irm https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.ps1 | iex
ExecStart=/opt/ostp/ostp
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now ostp
``` ```
## Client ---
### Windows (GUI) ## GUI Client Installation
1. Download `ostp-windows-gui-x64.zip` from [Releases](https://github.com/ospab/ostp/releases) ### Windows
2. Extract all files to a folder
3. Run `ostp-gui.exe` **as Administrator** (required for TUN mode)
4. Enter server address and access key in Settings
5. Press the power button to connect
### Windows (CLI) 1. Download the `ostp-windows-gui-{arch}.zip` archive from [GitHub Releases](https://github.com/ospab/ostp/releases).
2. Extract all contents to a folder.
3. Run `ostp-gui.exe` **as Administrator** to allow virtual TUN interface creation.
4. Input server coordinates and access key on the Settings tab, then click the connection button.
1. Download `ostp-windows-amd64.zip` from Releases ---
2. Create `config.json`:
```json ## Manual Installation (CLI Binary Only)
{
"mode": "client",
"server": "your-server:50000",
"access_key": "your-secret-key"
}
```
3. Run: `ostp.exe` 1. Obtain the pre-built CLI binary from [GitHub Releases](https://github.com/ospab/ostp/releases).
2. Create `config.json` next to the binary (see [Configuration](Configuration) for details).
### Linux (CLI) 3. Start the execution directly:
- Linux / macOS: `./ostp --config config.json`
```bash - Windows: `ostp.exe --config config.json`
# Download and configure
curl -Lo ostp.tar.gz https://github.com/ospab/ostp/releases/latest/download/ostp-linux-amd64.tar.gz
tar xzf ostp.tar.gz
chmod +x ostp
# Create client config
cat > config.json << 'EOF'
{
"mode": "client",
"server": "your-server:50000",
"access_key": "your-secret-key"
}
EOF
./ostp
```
### macOS
```bash
curl -Lo ostp.tar.gz https://github.com/ospab/ostp/releases/latest/download/ostp-darwin-arm64.tar.gz
tar xzf ostp.tar.gz
chmod +x ostp
# Same config.json as Linux
./ostp
```
### Android
Use the OSTP JNI library with your Android VPN application. See [Building from Source](Building-from-Source) for JNI compilation.
--- ---

62
Installation_ru.md Normal file

@ -0,0 +1,62 @@
# Установка
![GitHub Release](https://img.shields.io/github/v/release/ospab/ostp?style=flat-square&color=blue)
![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS%20%7C%20Android-green.svg?style=flat-square)
[English / Английский](Installation) | [← Главная](Home_ru)
OSTP (Ospab Stealth Transport Protocol) разворачивается с помощью автоматических сценариев установки.
---
## Автоматическая установка скриптом
### Linux (Сервер / Клиент CLI)
Сценарий автоматически определяет архитектуру, скачивает актуальный бинарный файл в `/opt/ostp`, запускает интерактивную конфигурацию и регистрирует службу systemd.
Запустите от имени root:
```bash
bash <(curl -Ls https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.sh)
```
Управление системной службой:
```bash
sudo systemctl enable --now ostp # Запустить службу и включить автозапуск
sudo systemctl restart ostp # Перезапустить службу
sudo systemctl status ostp # Проверить статус службы и логи
```
### Windows (Клиент CLI)
PowerShell-скрипт устанавливает клиент в каталог `C:\opt\ostp`, проводит интерактивную настройку и регистрирует исполняемый файл в системном PATH.
Запустите PowerShell от имени Администратора:
```powershell
irm https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.ps1 | iex
```
---
## Установка GUI-клиента
### Windows
1. Скачайте архив `ostp-windows-gui-{arch}.zip` со страницы [GitHub Releases](https://github.com/ospab/ostp/releases).
2. Распакуйте содержимое архива в любую папку.
3. Запустите `ostp-gui.exe` **от имени Администратора** (необходимо для автоматического создания виртуального TUN-адаптера).
4. Заполните адрес сервера и ключ доступа в Настройках, затем нажмите кнопку подключения на главном экране.
---
## Ручная установка (только CLI-бинарник)
1. Скачайте исполняемый файл для вашей платформы из [GitHub Releases](https://github.com/ospab/ostp/releases).
2. Разместите файл `config.json` рядом с бинарником (см. [Конфигурация](Configuration_ru)).
3. Запустите исполнение:
- Linux / macOS: `./ostp --config config.json`
- Windows: `ostp.exe --config config.json`
---
[← Главная](Home_ru) | [Конфигурация →](Configuration_ru)

@ -1,5 +1,11 @@
# Protocol Design # Protocol Design
![Crypto](https://img.shields.io/badge/Crypto-Noise__NNpsk0-blueviolet?style=flat-square)
![Transport](https://img.shields.io/badge/Transport-UDP-informational?style=flat-square)
![DPI](https://img.shields.io/badge/DPI-Resistant-brightgreen?style=flat-square)
[Russian / Русский](Protocol-Design_ru)
## Overview ## Overview
OSTP (Obfuscated Secure Transport Protocol) is a UDP-based encrypted tunnel designed for maximum resistance to Deep Packet Inspection (DPI) and Traffic Shaping (TSPU) systems. OSTP (Obfuscated Secure Transport Protocol) is a UDP-based encrypted tunnel designed for maximum resistance to Deep Packet Inspection (DPI) and Traffic Shaping (TSPU) systems.

122
Protocol-Design_ru.md Normal file

@ -0,0 +1,122 @@
# Дизайн протокола
![Crypto](https://img.shields.io/badge/Crypto-Noise__NNpsk0-blueviolet?style=flat-square)
![Transport](https://img.shields.io/badge/Transport-UDP-informational?style=flat-square)
![DPI](https://img.shields.io/badge/DPI-Resistant-brightgreen?style=flat-square)
[English / Английский](Protocol-Design) | [← Главная](Home_ru)
## Обзор
OSTP (Ospab Stealth Transport Protocol) — UDP-протокол зашифрованного туннелирования, разработанный для максимальной устойчивости к системам DPI и ТСПУ.
### Принципы проектирования
1. **Принцип Керкгоффса** — безопасность зависит исключительно от ключа доступа. Бинарник не содержит специфичных для протокола строк или магических констант.
2. **По-пакетная неразличимость** — каждый байт на проводе криптографически случаен. Нет сигнатур хендшейка, полей версии или фиксированных паттернов.
3. **Всё выводится из ключа** — маски обфускации, PSK и даже диапазон паддинга выводятся из ключа доступа через HKDF-SHA256.
## Wire-формат
### Пакет хендшейка
```
[session_id:4][noise_len:2][noise_payload:N][random_padding:var]
↑ XOR-маскирован ↑ Открытый текст (из него выводится маска)
```
- **session_id** (4 байта) — случайный идентификатор сессии, XOR-маскирован
- **noise_len** (2 байта) — длина Noise-полезной нагрузки, XOR-маскирован
- **noise_payload** (N байтов) — сообщение хендшейка Noise_NNpsk0
- **random_padding** (key-derived диапазон) — случайные байты против размерного фингерпринтинга
### Пакет данных (после хендшейка)
```
[session_id:4][nonce:8][AEAD_ciphertext:N]
↑ XOR-маскирован ↑ XOR-маскирован ↑ ChaCha20-Poly1305
```
### Вывод маски обфускации
Маска для 6-байтного заголовка хендшейка выводится из Noise-payload:
```
sample = packet[6..38] // Первые 32 байта payload
mask = HMAC-SHA256(obfuscation_key, sample)[0..6]
header ^= mask
```
Для пакетов данных маска выводится из шифротекста:
```
sample = packet[12..44] // Первые 32 байта шифротекста
mask = HMAC-SHA256(obfuscation_key, sample)[0..12]
header ^= mask
```
## Вывод ключей
Все секреты выводятся из одного `access_key` через HKDF-SHA256 (RFC 5869):
```
key_hash = SHA-256(access_key)
salt = key_hash[0..16]
info = key_hash[16..32]
prk = HMAC-SHA256(salt, access_key)
obfuscation_key = HKDF-Expand(prk, info || 0x01, 8)
psk = HKDF-Expand(prk, info || 0x02, 32)
pad_params = HKDF-Expand(prk, info || 0x03, 2)
```
Диапазон паддинга:
- `pad_min = 16 + (pad_params[0] % 64)` → [16, 79]
- `pad_max = pad_min + 48 + (pad_params[1] % 128)` → pad_min + [48, 175]
Разные ключи → разные размеры пакетов. Универсальный фильтр по размеру невозможен.
## Noise-протокол
OSTP использует паттерн **Noise_NNpsk0**:
```
Noise_NNpsk0(psk):
→ psk, e
← e, ee
```
- **NN** — без статических ключей (анонимный)
- **psk0** — pre-shared key внедряется на позиции 0
- **Примитивы**: X25519, ChaChaPoly, BLAKE2s
PSK выводится из ключа доступа — без валидного ключа хендшейк невозможен.
## ARQ (Automatic Repeat Request)
| Параметр | По умолчанию | Описание |
|---|---|---|
| `max_reorder` | 16384 | Максимальный разрыв между ожидаемым и полученным nonce |
| `reorder_buf` | 8192 | Максимум буферизованных пакетов не по порядку |
| `rto` | 100мс | Таймаут ретрансмиссии |
| `max_retries` | 8 | Максимум попыток ретрансмиссии |
## Анализ устойчивости к DPI
### Что видит DPI-система
- **Нет magic bytes** — первые байты XOR-маскированы
- **Нет фиксированных размеров** — паддинг зависит от ключа
- **Нет строк протокола в бинарнике** — salt/info выводятся из хеша ключа
- **Нет полей версии** — весь заголовок замаскирован
- **UDP-пакеты** — неотличимы от QUIC, WireGuard или случайного UDP
### Что остаётся идентифицируемым
- UDP-трафик на фиксированном порту (смягчается использованием 443, 8443)
- Анализ паттернов трафика (смягчается адаптивным паддингом)
- Строка Noise-паттерна в бинарнике — стандартная, используется тысячами проектов
---
[← Конфигурация](Configuration_ru) | [Ссылки-приглашения →](Share-Links_ru)

@ -1,5 +1,7 @@
# Share Links # Share Links
[Russian / Русский](Share-Links_ru)
## Format ## Format
``` ```
@ -10,10 +12,10 @@ ostp://ACCESS_KEY@HOST:PORT#LABEL
| Component | Required | Description | | Component | Required | Description |
|---|---|---| |---|---|---|
| `ACCESS_KEY` | | URL-encoded access key | | `ACCESS_KEY` | Yes | URL-encoded access key |
| `HOST` | | Server hostname or IP | | `HOST` | Yes | Server hostname or IP |
| `PORT` | | Server port | | `PORT` | Yes | Server port |
| `LABEL` | | URL-encoded server label | | `LABEL` | No | URL-encoded server label |
### Examples ### Examples

35
Share-Links_ru.md Normal file

@ -0,0 +1,35 @@
# Ссылки-приглашения
[English / Английский](Share-Links) | [← Главная](Home_ru)
## Формат
```
ostp://КЛЮЧ_ДОСТУПА@ХОСТ:ПОРТ#МЕТКА
```
### Компоненты
| Компонент | Обязательно | Описание |
|---|---|---|
| `КЛЮЧ_ДОСТУПА` | Да | URL-кодированный ключ доступа |
| `ХОСТ` | Да | Имя хоста или IP сервера |
| `ПОРТ` | Да | Порт сервера |
| `МЕТКА` | Нет | URL-кодированное название сервера |
### Примеры
```
ostp://мой-ключ@example.com:50000#Сервер%201
ostp://abc123@192.168.1.100:50000
ostp://сложный%2Fключ@server.com:443#Продакшен
```
### Импорт в клиент
- **GUI**: Вставьте ссылку в поле импорта на экране настроек
- **CLI**: `ostp --import "ostp://ключ@хост:порт"`
---
[← Протокол](Protocol-Design_ru) | [GUI-клиент →](GUI-Client_ru)

@ -1,5 +1,6 @@
**OSTP Wiki** **OSTP Wiki**
**English**
- [Home](Home) - [Home](Home)
- [Installation](Installation) - [Installation](Installation)
- [Configuration](Configuration) - [Configuration](Configuration)
@ -8,3 +9,13 @@
- [GUI Client](GUI-Client) - [GUI Client](GUI-Client)
- [Building from Source](Building-from-Source) - [Building from Source](Building-from-Source)
- [FAQ](FAQ) - [FAQ](FAQ)
**Русский**
- [Главная](Home_ru)
- [Установка](Installation_ru)
- [Конфигурация](Configuration_ru)
- [Протокол](Protocol-Design_ru)
- [Ссылки-приглашения](Share-Links_ru)
- [GUI-клиент](GUI-Client_ru)
- [Сборка](Building-from-Source_ru)
- [FAQ](FAQ_ru)