VK TURN Proxy
July 4, 2026 · View on GitHub
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.
Быстрый Старт: WireGuard
1. Запустите Сервер На VPS
Скачайте бинарник для 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. Пароль может быть любой строкой — главное, чтобы он совпадал на клиенте и сервере.
2. Настройте WireGuard На Клиенте
В клиентском конфиге WireGuard замените endpoint сервера на локальный адрес VK TURN Proxy:
[Peer]
Endpoint = 127.0.0.1:9000
# ...
[Interface]
MTU = 1280
# ...
3. Запустите Клиент
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 9
Windows 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 9
macOS:
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".
Android
Скачайте бинарник 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).
Сервер Как systemd-Сервис
Пример /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
Docker
Образ публикуется в GitHub Container Registry:
docker pull ghcr.io/mysorez/vk-turn-proxy:latest
Host 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 / Xray
В режиме -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.