mirror of https://github.com/ospab/ostp.git
docs: use exact short install commands in wiki pages
parent
6848a83bc2
commit
c22dc10341
|
|
@ -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 @@
|
||||||
|
# Сборка из исходников
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[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,5 +1,9 @@
|
||||||
# Configuration
|
# Configuration
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[Russian / Русский](Configuration_ru)
|
||||||
|
|
||||||
## Server Configuration
|
## Server Configuration
|
||||||
|
|
||||||
| Field | Type | Default | Description |
|
| Field | Type | Default | Description |
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,103 @@
|
||||||
|
# Конфигурация
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[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
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?
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
# GUI-клиент
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[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
28
Home.md
|
|
@ -1,6 +1,13 @@
|
||||||
# OSTP — Obfuscated Secure Transport Protocol
|
# OSTP — Ospab Stealth Transport Protocol
|
||||||
|
|
||||||
Welcome to the OSTP Wiki.
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
# OSTP — Ospab Stealth Transport Protocol
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
Добро пожаловать в 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)
|
||||||
130
Installation.md
130
Installation.md
|
|
@ -1,115 +1,61 @@
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
## Server
|

|
||||||
|

|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
# Установка
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
[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
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
[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.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
# Дизайн протокола
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
[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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
11
_Sidebar.md
11
_Sidebar.md
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue