diff --git a/Building-from-Source.md b/Building-from-Source.md index a7957ef..fb13ef4 100644 --- a/Building-from-Source.md +++ b/Building-from-Source.md @@ -1,5 +1,7 @@ # Building from Source +[Russian / Русский](Building-from-Source_ru) + ## Prerequisites - [Rust](https://rustup.rs/) (stable toolchain) diff --git a/Building-from-Source_ru.md b/Building-from-Source_ru.md new file mode 100644 index 0000000..f65ff4d --- /dev/null +++ b/Building-from-Source_ru.md @@ -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) diff --git a/Configuration.md b/Configuration.md index 9ae6688..7e71bf2 100644 --- a/Configuration.md +++ b/Configuration.md @@ -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 diff --git a/Configuration_ru.md b/Configuration_ru.md new file mode 100644 index 0000000..fc3bbd5 --- /dev/null +++ b/Configuration_ru.md @@ -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) diff --git a/FAQ.md b/FAQ.md index 4e20d20..56ebb25 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1,5 +1,7 @@ # FAQ +[Russian / Русский](FAQ_ru) + ## General ### What is the difference between OSTP and other proxy protocols? diff --git a/FAQ_ru.md b/FAQ_ru.md new file mode 100644 index 0000000..6773c1c --- /dev/null +++ b/FAQ_ru.md @@ -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-реле. + +## Производительность + +### Каков ожидаемый оверхед? + +Примерно 50–100 байт на пакет (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) diff --git a/GUI-Client.md b/GUI-Client.md index fcf3477..1518964 100644 --- a/GUI-Client.md +++ b/GUI-Client.md @@ -1,5 +1,7 @@ # GUI Client +[Russian / Русский](GUI-Client_ru) + ## 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. diff --git a/GUI-Client_ru.md b/GUI-Client_ru.md new file mode 100644 index 0000000..44b5b7d --- /dev/null +++ b/GUI-Client_ru.md @@ -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) diff --git a/Home.md b/Home.md index b58540e..f044340 100644 --- a/Home.md +++ b/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 @@ -16,16 +23,19 @@ Welcome to the OSTP Wiki. ## 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 -- **Full DPI resistance** — Kerckhoffs's principle compliant, no protocol fingerprints in binary -- **Per-session key derivation** — HKDF-SHA256 based, unique masks per packet -- **Noise_NNpsk0 handshake** — X25519 + ChaChaPoly + BLAKE2s -- **ARQ reliability** — Selective acknowledgments over UDP -- **Adaptive padding** — Key-derived, per-user packet size distributions -- **Cross-platform** — Windows, Linux, macOS, Android, FreeBSD, MIPS, RISC-V +| Feature | Description | +|---|---| +| **Full Obfuscation** | Kerckhoffs's principle — security depends solely on the key | +| **Noise_NNpsk0** | X25519 + ChaChaPoly + BLAKE2s — Forward Secrecy | +| **Reliable UDP (ARQ)** | Selective ACK, retransmission, reorder buffer | +| **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 diff --git a/Home_ru.md b/Home_ru.md new file mode 100644 index 0000000..e12c705 --- /dev/null +++ b/Home_ru.md @@ -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) diff --git a/Installation.md b/Installation.md index 44efd7c..18b8dbc 100644 --- a/Installation.md +++ b/Installation.md @@ -1,115 +1,61 @@ # 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 -# Download latest release -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 +bash <(curl -Ls https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.sh) ``` -### Configuration - -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 - +Management commands: ```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 -sudo tee /etc/systemd/system/ostp.service << 'EOF' -[Unit] -Description=OSTP Server -After=network.target +PowerShell script that installs to `C:\opt\ostp`, configures client settings interactively, and registers the installation folder in your system PATH. -[Service] -Type=simple -WorkingDirectory=/opt/ostp -ExecStart=/opt/ostp/ostp -Restart=always -RestartSec=3 - -[Install] -WantedBy=multi-user.target -EOF - -sudo systemctl enable --now ostp +Run PowerShell as Administrator: +```powershell +irm https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.ps1 | iex ``` -## Client +--- -### Windows (GUI) +## GUI Client Installation -1. Download `ostp-windows-gui-x64.zip` from [Releases](https://github.com/ospab/ostp/releases) -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 -### 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 -{ - "mode": "client", - "server": "your-server:50000", - "access_key": "your-secret-key" -} -``` +## Manual Installation (CLI Binary Only) -3. Run: `ostp.exe` - -### Linux (CLI) - -```bash -# 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. +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). +3. Start the execution directly: + - Linux / macOS: `./ostp --config config.json` + - Windows: `ostp.exe --config config.json` --- diff --git a/Installation_ru.md b/Installation_ru.md new file mode 100644 index 0000000..72f1666 --- /dev/null +++ b/Installation_ru.md @@ -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) diff --git a/Protocol-Design.md b/Protocol-Design.md index b623765..0c85564 100644 --- a/Protocol-Design.md +++ b/Protocol-Design.md @@ -1,5 +1,11 @@ # 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 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. diff --git a/Protocol-Design_ru.md b/Protocol-Design_ru.md new file mode 100644 index 0000000..46a3acc --- /dev/null +++ b/Protocol-Design_ru.md @@ -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) diff --git a/Share-Links.md b/Share-Links.md index 69ad07f..18bbb29 100644 --- a/Share-Links.md +++ b/Share-Links.md @@ -1,5 +1,7 @@ # Share Links +[Russian / Русский](Share-Links_ru) + ## Format ``` @@ -10,10 +12,10 @@ ostp://ACCESS_KEY@HOST:PORT#LABEL | Component | Required | Description | |---|---|---| -| `ACCESS_KEY` | ✅ | URL-encoded access key | -| `HOST` | ✅ | Server hostname or IP | -| `PORT` | ✅ | Server port | -| `LABEL` | ❌ | URL-encoded server label | +| `ACCESS_KEY` | Yes | URL-encoded access key | +| `HOST` | Yes | Server hostname or IP | +| `PORT` | Yes | Server port | +| `LABEL` | No | URL-encoded server label | ### Examples diff --git a/Share-Links_ru.md b/Share-Links_ru.md new file mode 100644 index 0000000..76f45a6 --- /dev/null +++ b/Share-Links_ru.md @@ -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) diff --git a/_Sidebar.md b/_Sidebar.md index ae71509..ea755f5 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -1,5 +1,6 @@ **OSTP Wiki** +**English** - [Home](Home) - [Installation](Installation) - [Configuration](Configuration) @@ -8,3 +9,13 @@ - [GUI Client](GUI-Client) - [Building from Source](Building-from-Source) - [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)