# Режимы ## 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 :56000 -obf-profile rtpopus3 -obf-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 :56000 -link "" -mode tcp ``` `-n` в этом режиме задаёт число сессий пула: каждое локальное TCP-соединение уходит целиком в одну из них (round-robin). ### Bond для одного TCP-соединения Добавьте клиенту `-bond`: данные каждого TCP-соединения будут распределяться между доступными сессиями. На сервере достаточно `-mode tcp`, он одновременно принимает обычные и bond-клиенты. По умолчанию bond выключен. ```bash ./client -listen 127.0.0.1:9000 -peer :56000 -links "" -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]...]`.