Files
2026-09-22 22:33:56 +03:00

113 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Режимы
## UDP-Релей (WireGuard / AmneziaWG / Hysteria)
Дефолтный режим (`-mode udp`). Клиент слушает локальный UDP-порт, сервер прозрачно форвардит UDP-пакеты в backend (например, WG `127.0.0.1:51820`).
Отлично подходит для VPN-протоколов, работающих поверх UDP: **WireGuard, AmneziaWG, Hysteria**.
## Прямой режим (`-provider direct`)
Клиент шлёт тот же DTLS с OBF-обёрткой прямо на `-peer`, без реле:
- **Сервер не меняется**: тот же `-listen` порт, те же `-obf-profile`/`-obf-key`.
- **Без звонка**: ни ссылок, ни captcha; `-links`, `-turn`, `-port`, `-transport` игнорируются.
- **Потоки**: по умолчанию `-n 1` - лимитов реле нет, лишние потоки только делят очередь.
- **Ограничение**: при белых списках мобильного оператора IP VPS недоступен - там только `vk`.
- Переключение TURN <-> direct только вручную, автоматического fallback нет.
```bash
./client -provider direct -peer <vps>:56000 -obf-profile rtpopus3 -obf-key <key>
```
## TCP-Форвардер (Xray / sing-box / VLESS)
Включается флагом `-mode tcp` на обеих сторонах. Сервер подключается к локальному TCP-бэкенду (например, Xray inbound `127.0.0.1:443`). Клиент слушает локальный TCP-порт, на который вы натравливаете свой Xray/v2rayN/sing-box.
Подходит для TCP-прокси: **VLESS, VMess, Trojan, Shadowsocks**.
Relayed-данные TURN - всегда датаграммы, даже при `-transport tcp`, поэтому поверх DTLS трафик инкапсулируется через KCP (ARQ) + smux. Тюнинг ARQ - флаги `-kcp-*` (см. `docs/flags.md`).
```bash
./server -listen 0.0.0.0:56000 -connect 127.0.0.1:443 -mode tcp
./client -listen 127.0.0.1:9000 -peer <vps>:56000 -link "<call-link>" -mode tcp
```
`-n` в этом режиме задаёт число сессий пула: каждое локальное TCP-соединение уходит целиком в одну из них (round-robin).
### Bond для одного TCP-соединения
Добавьте клиенту `-bond`: данные каждого TCP-соединения будут распределяться между доступными сессиями. На сервере достаточно `-mode tcp`, он одновременно принимает обычные и bond-клиенты. По умолчанию bond выключен.
```bash
./client -listen 127.0.0.1:9000 -peer <vps>:56000 -links "<call-link>" -mode tcp -bond -n 4
```
Состав каналов фиксируется при открытии TCP-соединения; с одной доступной сессией bond тоже работает. Поддерживается до 256 сессий суммарно по всем ссылкам. Новые сессии используются следующими соединениями. При отказе участвующей сессии текущее соединение закрывается, а Xray может открыть новое через оставшиеся. Бесшовного переноса уже переданных данных между каналами нет. Медленный канал задерживает сборку потока; прирост скорости зависит от сети.
Для bond обновите и клиент, и сервер: сервер без его поддержки отклонит такой клиент при проверке режима. Обычный TCP сохраняет прежний протокол. В JSON клиента настройка называется `proxy.bond`, в `freeturn://` - `bond`.
Встроенный WireGuard (`-tunnel`) с `-mode tcp` не сочетается: он гонит датаграммы.
Режим должен совпадать на обеих сторонах: клиент помечает им первую запись, и сервер с другим `-mode` закрывает соединение с явной ошибкой вместо молчаливого зависания.
## OBF (wire-профили обфускации)
> [!WARNING]
> **Обфускация обязательна для хорошей скорости.** Сервис звонков шейпит (режет) любой трафик, который не похож на медиаданные звонка (даже если он зашифрован в DTLS). Обфускация маскирует ваши пакеты под голосовой RTP-трафик, позволяя обходить шейпинг.
`-obf-profile` выбирает wire-профиль маскировки TURN-payload. Профиль и ключ должны совпадать на клиенте и сервере.
Доступные профили:
- **`rtpopus3`** (рекомендуется) - RTP/opus + RFC 8285 extension (`ssrc-audio-level` + `transport-cc`) + ChaCha20-Poly1305. Полная эмуляция современного WebRTC-аудиопотока звонка.
- **`rtpopus2`** - RTP/opus + базовый RFC 8285 header extension.
- **`rtpopus`** - базовый RTP/opus-заголовок + ChaCha20-Poly1305 AEAD.
- **`none`** - обфускация выключена (скорость может быть сильно урезана шейпингом).
Сгенерировать ключ:
```bash
./server -gen-obf-key
```
Запуск:
```bash
./server ... -obf-profile rtpopus3 -obf-key <64-hex>
./client ... -obf-profile rtpopus3 -obf-key <64-hex>
```
## TURN Транспорт
По умолчанию клиент подключается к TURN-реле по TCP/TLS. Флаг `-transport udp` переключает на UDP:
```bash
./client ... -transport udp
```
> [!WARNING]
> Транспорт UDP часто режется или блокируется системами DPI (особенно на мобильных операторах). Если у вас нестабильная связь - используйте стандартный TCP/TLS (просто не указывайте этот флаг).
## Потоки и Лимиты (-n)
Параметр `-n` задает количество параллельных потоков к TURN-серверу (по умолчанию 12, в `-provider direct` - 1).
Увеличение потоков может помочь поднять скорость или улучшить стабильность, **но не стоит этим злоупотреблять**. Слишком высокое значение (например, больше 15-20) повышает риск бана со стороны сервиса звонков. Практика показывает, что значений от `6` до `12` зачастую достаточно для комфортной работы.
То же самое касается параметра `-streams-per-cred` - используйте разумные значения.
## Captcha
Клиент сам проходит captcha. Если автоматика не справилась - открывается локальный браузер. Принудительно ручной:
```bash
./client -manual-captcha ...
```
Персона auth-запросов (UA + TLS JA3 + client hints + порядок заголовков + device) - всегда Chrome; флаг `-platform` выбирает класс устройства (desktop/mobile). Значения самосогласованы, без внешнего состояния. Ручная captcha идёт через ту же персону.
## DNS
Флаг `-dns-mode` управляет транспортом резолвера самого клиента (API звонков, токены, captcha) - не DNS-маршрутизацией пользовательского трафика.
- `plain` - только UDP/53;
- `doh` - только DNS-over-HTTPS (Yandex DoH);
- `auto` (дефолт) - сначала UDP/53, sticky-fallback на DoH при полном отказе.
Свои UDP/53 резолверы: `-dns-servers ip[:port][,ip[:port]...]`.