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
|
||||
|
||||
[Russian / Русский](Building-from-Source_ru)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [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
|
||||
|
||||

|
||||
|
||||
[Russian / Русский](Configuration_ru)
|
||||
|
||||
## Server Configuration
|
||||
|
||||
| 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
|
||||
|
||||
[Russian / Русский](FAQ_ru)
|
||||
|
||||
## General
|
||||
|
||||
### 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
|
||||
|
||||
[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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
## 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
|
||||
# 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`
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||

|
||||

|
||||

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