Files
free-turn-proxy/docs/modes.md
T
2026-09-22 22:33:56 +03:00

8.5 KiB
Raw Blame History

Режимы

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 нет.
./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).

./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 выключен.

./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 - обфускация выключена (скорость может быть сильно урезана шейпингом).

Сгенерировать ключ:

./server -gen-obf-key

Запуск:

./server ... -obf-profile rtpopus3 -obf-key <64-hex>
./client ... -obf-profile rtpopus3 -obf-key <64-hex>

TURN Транспорт

По умолчанию клиент подключается к TURN-реле по TCP/TLS. Флаг -transport udp переключает на UDP:

./client ... -transport udp

Warning

Транспорт UDP часто режется или блокируется системами DPI (особенно на мобильных операторах). Если у вас нестабильная связь - используйте стандартный TCP/TLS (просто не указывайте этот флаг).

Потоки и Лимиты (-n)

Параметр -n задает количество параллельных потоков к TURN-серверу (по умолчанию 12, в -provider direct - 1). Увеличение потоков может помочь поднять скорость или улучшить стабильность, но не стоит этим злоупотреблять. Слишком высокое значение (например, больше 15-20) повышает риск бана со стороны сервиса звонков. Практика показывает, что значений от 6 до 12 зачастую достаточно для комфортной работы. То же самое касается параметра -streams-per-cred - используйте разумные значения.

Captcha

Клиент сам проходит captcha. Если автоматика не справилась - открывается локальный браузер. Принудительно ручной:

./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]...].