# Режимы ## UDP-Релей (WireGuard / AmneziaWG / Hysteria) Дефолтный режим (`-mode udp`). Клиент слушает локальный UDP-порт, сервер прозрачно форвардит UDP-пакеты в backend (например, WG `127.0.0.1:51820`). Отлично подходит для VPN-протоколов, работающих поверх UDP: **WireGuard, AmneziaWG, Hysteria**. ## Прямой туннель (Direct AWG) Если на VPS поднят сервис `freeturn-awg` и порт `51820/udp` открыт наружу, клиенты AmneziaWG/AmneziaVPN подключаются **напрямую к серверу**, минуя релей: - **VK Calls не участвует**: звонки и TURN-серверы не используются, клиент подключается напрямую к VPS. - **Маскировка**: вместо `rtpopus3` работает встроенная обфускация **AmneziaWG 3.1** (`Jc`, `Jmin`, `Jmax`, `S1`..`S4`, `H1`..`H4`, `HeaderProtectionKey`). - **Скорость и пинг**: нативный прямой UDP без накладных расходов релея. - **Импорт**: импорт конфига или сканирование QR-кода по веб-ссылке (`freeturn client qr `). ## 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). Встроенный WireGuard (`-tunnel`) с `-mode tcp` не сочетается: он гонит датаграммы. Режим должен совпадать на обеих сторонах: клиент помечает им первую запись, и сервер с другим `-mode` закрывает соединение с явной ошибкой вместо молчаливого зависания. ## OBF (wire-профили обфускации) > [!WARNING] > **Обфускация обязательна для хорошей скорости.** VK агрессивно шейпит (режет) любой трафик, который не похож на медиаданные звонка (даже если он зашифрован в DTLS). Обфускация маскирует ваши пакеты под голосовой RTP-трафик, позволяя обходить шейпинг. `-obf-profile` выбирает wire-профиль маскировки TURN-payload. Профиль и ключ должны совпадать на клиенте и сервере. Доступные профили: - **`rtpopus3`** (рекомендуется) - RTP/opus + RFC 8285 extension (`ssrc-audio-level` + `transport-cc`) + ChaCha20-Poly1305. Полная эмуляция современного WebRTC-аудиопотока звонков VK. - **`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-серверу (по умолчанию 10). Увеличение потоков может помочь поднять скорость или улучшить стабильность, **но не стоит этим злоупотреблять**. Слишком высокое значение (например, больше 15-20) повышает риск получения бана со стороны VK. Практика показывает, что значений от `6` до `12` зачастую достаточно для комфортной работы. То же самое касается параметра `-streams-per-cred` - используйте разумные значения. ## Captcha Клиент сам проходит VK captcha. Если автоматика не справилась - открывается локальный браузер. Принудительно ручной: ```bash ./client -manual-captcha ... ``` Персона auth-запросов (UA + TLS JA3 + client hints + порядок заголовков + device) - всегда Chrome; флаг `-platform` выбирает класс устройства (desktop/mobile). Значения самосогласованы, без внешнего состояния. Ручная captcha ходит на VK через ту же персону. ## DNS Флаг `-dns-mode` управляет транспортом резолвера самого клиента (VK 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]...]`.