VK TURN Proxy — клиент и сервер для прокидывания локального UDP-трафика через TURN-реле, получаемые из ссылки на VK Calls. Типичный сценарий — поднять server на VPS рядом с WireGuard, а на клиентском устройстве запустить client, который слушает локальный адрес вроде 127.0.0.1:9000.
Caution
Проект предназначен для обучения, исследований и администрирования собственных стендов. Используйте его только там, где у вас есть право запускать такой трафик и менять сетевую конфигурацию.
- Как это работает
- Возможности
- Что нужно
- Быстрый старт: WireGuard
- Android
- systemd-сервис
- Docker
- VLESS / Xray
- Флаги клиента
- Флаги сервера
- Сборка из исходников
- Решение проблем
- Похожие проекты
- Лицензия
Схема для WireGuard:
WireGuard client → 127.0.0.1:9000 → VK TURN Proxy client
→ VK TURN relay → VK TURN Proxy server на VPS
→ 127.0.0.1:51820 → WireGuard server
Клиент берёт временные TURN-учётные данные из ссылки VK Calls, открывает несколько DTLS-соединений к TURN-реле и отправляет через них трафик к server на VPS. Трафик обфусцируется под WebRTC OPUS-аудио (RTP-заголовки + ChaCha20-Poly1305 AEAD), что делает его неотличимым от реального звонка.
- VK Calls как источник TURN-учётных данных (2 стабильных app_id, ротация).
- Несколько параллельных TURN-потоков через
-n(кратно 9). - RTP-AEAD обфускация DTLS-пакетов: трафик похож на WebRTC OPUS для DPI.
- Ключ шифрования выводится из пароля через HKDF — никаких hex-ключей.
- DTLS Connection ID для снижения DPI-отпечатка.
- Автоматическое прохождение VK captcha (v2, checkbox).
- WireGuard UDP backend.
- VLESS/Xray TCP backend через
-vless. - Docker-образ для серверной части.
- VPS с публичным IP.
- На VPS уже должен слушать backend:
- WireGuard: обычно
127.0.0.1:51820/udp; - Xray/VLESS: обычно
127.0.0.1:443/tcp.
- WireGuard: обычно
- Ссылка на активный VK Calls вида
https://vk.com/call/join/.... - На клиенте: WireGuard или другой локальный клиент, который будет ходить в
127.0.0.1:9000.
Скачайте бинарник для Linux amd64:
curl -L -o server https://github.com/MYSOREZ/vk-turn-proxy/releases/latest/download/server-linux-amd64
chmod +x serverЗапустите сервер, указав адрес WireGuard и пароль:
./server -listen 0.0.0.0:56000 -connect 127.0.0.1:51820 -wrap -password "ВАШ_ПАРОЛЬ"Порт 56000/udp должен быть доступен снаружи. Если WireGuard слушает другой порт — замените 51820. Пароль может быть любой строкой — главное, чтобы он совпадал на клиенте и сервере.
В клиентском конфиге WireGuard замените endpoint сервера на локальный адрес VK TURN Proxy:
[Peer]
Endpoint = 127.0.0.1:9000
# ...
[Interface]
MTU = 1280
# ...Linux:
curl -L -o client https://github.com/MYSOREZ/vk-turn-proxy/releases/latest/download/client-linux-amd64
chmod +x client
./client -peer 1.2.3.4:56000 -vk "https://vk.ru/call/join/ВАШ_ХЕШ" -password "ВАШ_ПАРОЛЬ" -listen 127.0.0.1:9000 -n 9Windows PowerShell:
Invoke-WebRequest -Uri https://github.com/MYSOREZ/vk-turn-proxy/releases/latest/download/client-windows-amd64.exe -OutFile client.exe
.\client.exe -peer 1.2.3.4:56000 -vk "https://vk.ru/call/join/ВАШ_ХЕШ" -password "ВАШ_ПАРОЛЬ" -listen 127.0.0.1:9000 -n 9macOS:
curl -L -o client https://github.com/MYSOREZ/vk-turn-proxy/releases/latest/download/client-darwin-arm64
chmod +x client
./client -peer 1.2.3.4:56000 -vk "https://vk.ru/call/join/ВАШ_ХЕШ" -password "ВАШ_ПАРОЛЬ" -listen 127.0.0.1:9000 -n 9После запуска клиента включите WireGuard.
-vkпринимает как полную ссылку, так и только хеш (часть после/call/join/). Несколько ссылок через запятую:-vk "ХЕШ1,ХЕШ2".
Скачайте бинарник client-android-arm64 из Releases и запустите через Termux или встройте в своё приложение:
termux-wake-lock
./client -peer 1.2.3.4:56000 -vk "https://vk.ru/call/join/ВАШ_ХЕШ" -password "ВАШ_ПАРОЛЬ" -listen 127.0.0.1:9000 -n 9В WireGuard укажите Endpoint = 127.0.0.1:9000 и MTU = 1280. Добавьте Termux в исключения WireGuard (split tunneling).
Пример /etc/systemd/system/vk-turn-proxy.service:
[Unit]
Description=VK TURN Proxy server
After=network.target
[Service]
Type=simple
ExecStart=/opt/vk-turn-proxy/server -listen 0.0.0.0:56000 -connect 127.0.0.1:51820 -wrap -password "ВАШ_ПАРОЛЬ"
Restart=always
RestartSec=5
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.targetПрименить:
sudo systemctl daemon-reload
sudo systemctl enable --now vk-turn-proxy.service
sudo systemctl status vk-turn-proxy.serviceОбраз публикуется в GitHub Container Registry:
docker pull ghcr.io/mysorez/vk-turn-proxy:latestHost network (рекомендуется, если backend на том же хосте):
docker run --rm --network host \
ghcr.io/mysorez/vk-turn-proxy:latest \
-listen 0.0.0.0:56000 -connect 127.0.0.1:51820 -wrap -password "ВАШ_ПАРОЛЬ"Bridge mode:
docker run --rm -p 56000:56000/udp \
ghcr.io/mysorez/vk-turn-proxy:latest \
-listen 0.0.0.0:56000 -connect HOST_IP:51820 -wrap -password "ВАШ_ПАРОЛЬ"В режиме -vless server подключается к локальному TCP backend (например Xray).
Сервер:
./server -listen 0.0.0.0:56000 -connect 127.0.0.1:443 -vless -wrap -password "ВАШ_ПАРОЛЬ"Клиент — для VLESS используйте отдельную сборку с поддержкой TCP (см. вашу конфигурацию).
С bonding (несколько параллельных DTLS через одно TCP):
./server -listen 0.0.0.0:56000 -connect 127.0.0.1:443 -vless -vless-bond -wrap -password "ВАШ_ПАРОЛЬ"| Флаг | По умолчанию | Описание |
|---|---|---|
-peer |
обязательный | адрес сервера на VPS, например 1.2.3.4:56000 |
-vk |
обязательный | ссылка(и) VK Calls или хеш(и), через запятую |
-password |
обязательный | пароль для шифрования (совпадает на клиенте и сервере) |
-listen |
127.0.0.1:9000 |
локальный адрес для WireGuard или другого клиента |
-n |
24 |
количество воркеров, кратно 9 (минимум 9) |
-ping-only |
false |
замерить RTT через TURN и выйти |
-device-id |
unknown |
ID устройства (для логов) |
-captcha-mode |
auto |
режим капчи: auto, wv (WebView), rjs (Go solver) |
-vk-auth |
anonymous |
режим авторизации VK: anonymous или account |
-vk-anon-path |
vkcalls |
анонимный путь получения TURN-кредов: vkcalls (основной, через api.vk.me) или legacy (старая цепочка через login.vk.ru/api.vk.ru) |
-vk-creds-file |
пусто | JSON-файл с TURN-кредами от аккаунта VK |
-stats-interval |
30 |
интервал статистики в секундах (0 = выключить) |
-turn |
из ссылки | переопределить IP TURN-сервера |
-port |
из ссылки | переопределить порт TURN-сервера |
| Флаг | По умолчанию | Описание |
|---|---|---|
-listen |
0.0.0.0:56000 |
адрес прослушивания |
-connect |
обязательный | backend-адрес: 127.0.0.1:51820 (WireGuard) или 127.0.0.1:443 (VLESS) |
-wrap |
false |
включить RTP-AEAD обфускацию (требует -password) |
-password |
пусто | пароль для -wrap, ключ выводится через HKDF |
-vless |
false |
TCP/VLESS режим |
-vless-bond |
false |
bonding для VLESS |
-debug |
false |
подробные логи |
Нужен Go 1.22+.
go build -o client ./client
go build -o server ./serverКросс-сборка для Linux amd64:
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o server-linux-amd64 ./server
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o client-linux-amd64 ./clientКросс-сборка для Android arm64 (требует NDK):
export CC=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang
GOOS=android GOARCH=arm64 CGO_ENABLED=1 go build -trimpath -ldflags "-s -w" -o client-android-arm64 ./client- Сначала запускайте VK TURN Proxy client, потом включайте WireGuard.
- Убедитесь, что
-passwordодинаковый на клиенте и сервере. - Если соединение не устанавливается — проверьте, что порт
56000/udpоткрыт на VPS (firewall, ufw). - Если WireGuard забирает весь трафик — добавьте IP TURN-реле в исключения маршрутизации.
- Если соединение нестабильное — попробуйте уменьшить
-n 9(минимум). - Если VK просит капчу слишком часто — попробуйте сменить ссылку VK Calls.
- Если клиент завис на получении кредов — проверьте, что ссылка VK Calls живая.
- Для отладки добавьте
-stats-interval 5на клиенте,-debugна сервере.
Авторы этого репозитория не отвечают за работу сторонних проектов.
Server:
- https://github.com/Urtyom-Alyanov/turn-proxy — реализация на Rust.
- https://github.com/NedgNDG/vk-proxy-auto-installer — автоустановщик VK TURN Proxy.
Android:
- https://github.com/samosvalishe/turn-proxy-android
- https://github.com/MYSOREZ/vk-turn-proxy-android
- https://github.com/kiper292/wireguard-turn-android
- https://github.com/WINGS-N/WINGSV
- https://github.com/oxsidee/vkpn
- https://github.com/amurcanov/proxy-turn-vk-android
iOS:
macOS:
GPL-3.0. См. LICENSE.