proxy-turn-vk-android

Introduction: WireGuard‑туннель через DTLS‑медиарелей ВК TURN‑серверов: трафик проходит от клиента к вашему личному VPS‑серверу через промежуточные медиарелей‑серверы ВК.
More: Author   ReportBugs   
Tags:

Android SDK Go Version Kotlin Stars

WDTT — это Android-приложение для создания защищённого WireGuard-туннеля поверх TURN/DTLS. Клиент поднимает локальный VPN-интерфейс на устройстве, получает WireGuard-конфигурацию от вашего VPS и передаёт транспорт через TURN-серверы VK, маскируя соединение под обычный зашифрованный медиатрафик звонка.


MyCollages (1)

Возможности Android-версии

  • Полноценный VPN-режим: приложение использует VpnService и WireGuard GoBackend, поэтому трафик выбранных приложений проходит через системный VPN-интерфейс без ручного импорта конфигов.
  • TURN/DTLS-транспорт: нативный Go-клиент получает временные TURN-учётные данные VK-звонка и поднимает DTLS-соединения к relay-серверу, через который передаётся трафик до вашего VPS.
  • WRAP без захардкоженного ключа: внешний RTP AEAD/ChaCha20-Poly1305 слой выводится из пароля подключения через HKDF. Один пароль — один WRAP-ключ, ключ не хранится в APK.
  • RTP AEAD обфускация: транспорт маскируется под RTP/WebRTC аудиотрафик с OPUS payload type, а полезная нагрузка шифруется AEAD-слоем поверх DTLS/WireGuard.
  • Деплой с телефона: вкладка «Деплой» подключается к серверу по SSH, загружает wdtt-server, создаёт systemd-сервис, включает NAT/firewall и открывает рабочие UDP-порты.
  • Парольная модель доступа: сервер поддерживает главный пароль, до 10 активных пользовательских паролей, 16-символьную генерацию, привязку пароля к устройству, истечение срока и управление через Telegram-бота.
  • Горячее обновление WRAP-ключей: создание, удаление и истечение паролей обновляют набор WRAP-ключей на сервере без перезапуска ядра.
  • Исключения приложений: можно выбрать, какие приложения идут через туннель, а какие работают напрямую. Поддерживаются режимы ЧС и БС, а изменения применяются перезагрузкой WireGuard без полного перенастраивания.
  • Капча VK Smart Captcha: по умолчанию включён режим «Авто капча»: Go v2-решатель, Auto WebView и ручной WebView используются по цепочке без выбора режима пользователем. При отключении авто-режима доступны ручные настройки метода.
  • Живой лог-вьюер: события Go-клиента, DTLS, WireGuard, WRAP, капчи, деплоя и статистики отображаются в приложении с группировкой одинаковых сообщений и счётчиками повторов.
  • Фоновая устойчивость: Foreground Service, WakeLock, WifiLock, мониторинг смены сети и watchdog помогают переживать Doze, смену Wi-Fi/LTE и падение нативного процесса.
  • VK Auth fallback: клиент использует 2 проверенных VK client_id и переключается между ними при ошибках авторизации.
  • DNS fallback: сначала используются Yandex DNS 77.88.8.8 / 77.88.8.1, а при отказе или таймаутах выполняется fallback на системный провайдерский DNS устройства.
  • Темы и оформление: Material 3, Jetpack Compose, Inter, светлая/тёмная тема, Dynamic Colors на Android 12+ и встроенные палитры.
  • Автообновления: приложение проверяет GitHub releases, показывает диалог обновления и периодически повторяет проверку в фоне.

Что нового в версии 1.1.8

[!IMPORTANT] Если сервер уже деплоился под актуальный WRAP/RTP AEAD протокол из ветки 1.1.7+, повторный деплой для 1.1.8 не нужен. Если вы обновляетесь со старой серверной версии без password-based WRAP и RTP AEAD, выполните деплой сервера заново.

  • VK Auth: переход с 5 client_id на 2 проверенных client_id: 6287487 и 8202606. Клиент сначала использует 6287487, затем 8202606, после чего повторяет fallback-цикл.
  • Стабильность VK API: удалены проблемные client_id, из-за которых могло появляться Unknown method passed для calls.getAnonymousToken.
  • DNS: добавлен fallback на системный провайдерский DNS, если наблюдаются проблемы с Yandex DNS 77.88.8.8 / 77.88.8.1.
  • VK Join Link: исправлена обработка полных ссылок VK Call Join, чтобы вместо корректного хеша в запрос не попадало значение вроде https:.
  • WRAP/DTLS: исправлен ложный стоп с сообщением «Неверный пароль подключения», когда один поток ловил DTLS timeout, но остальные потоки уже были активны.
  • WRAP-ключи: захардкоженный WRAP-ключ заменён на HKDF-деривацию из пароля подключения. Сервер держит активные ключи в памяти и обновляет их при изменении паролей.
  • Обфускация: добавлен RTP-over-ChaCha20-Poly1305 AEAD слой, маскирующий внешний транспорт под WebRTC аудиопоток.
  • Диспетчер: переход с Round-Robin на Adaptive Chunking в single-flow режиме с сохранением высокой агрегатной скорости multi-flow.
  • Потоки и хеши: добавлена поддержка 4-го хеша VK-звонка; при 4 хешах доступно до 108 потоков. Исправлен баг слайдера потоков.
  • Капча: режим прохождения стал автоматическим: сначала Go v2, затем Auto WebView, затем финальная Go-попытка и только после этого ручной WebView.
  • Автообновление: исправлена проверка обновлений, которая раньше могла выполняться только один раз при старте приложения.
  • Keepalive: добавлен DTLS keepalive для длительных сессий, чтобы снизить вероятность reader EOF.

Как это работает

Android-приложение → VpnService / WireGuard GoBackend → локальный UDP 127.0.0.1:9000
      → Go-клиент WDTT → WRAP RTP AEAD → VK TURN / DTLS → wdtt-server на VPS → интернет
  1. Приложение запускает нативный Go-клиент libclient.so и передаёт ему адрес VPS, VK-хеши звонка, пароль туннеля и количество потоков.
  2. Go-клиент выводит WRAP-ключ из пароля подключения, получает TURN-учётные данные через VK-звонок, при необходимости решает VK Smart Captcha и устанавливает DTLS-соединения через TURN relay.
  3. Внешний WRAP-слой упаковывает DTLS-пакеты в RTP AEAD/ChaCha20-Poly1305, чтобы ключ не был захардкожен в APK и мог отличаться у каждого пароля.
  4. Первый рабочий канал запрашивает у VPS WireGuard-конфигурацию через GETCONF, передавая локальный порт, device-id и пароль подключения.
  5. Сервер проверяет пароль: главный пароль работает как владелец, сгенерированные пароли имеют срок действия и привязываются к первому устройству.
  6. Android-часть парсит полученный WireGuard-конфиг, поднимает системный VPN-туннель и применяет исключения приложений.
  7. Watchdog следит за Go-процессом, активными воркерами и сетевыми изменениями, перезапуская транспорт при сбоях.

Видеогайд по настройке и использованию WDTT (Показано на версии v1.1.4.)

hq720

Смотреть гайд на YouTube


Важно гайд показан на уже устаревшей версии 1.1.4 но в нем есть много полезной информации, показана работа и настройка. Приобретение VPS и т,д. В новых версиях 1.1.8+ формат хешей изменен - достаточно вставить просто чистый хеш или проще = целиком ссылку звонка.

Быстрый старт

  1. Скачайте актуальный APK со страницы релизов.
  2. Установите приложение на Android-смартфон.
  3. Подготовьте айпи, логин, пароль от имеющегося VPS.
  4. В VK создайте или откройте групповой звонок и скопируйте ссылку вида vk.com/call/join/xxxxxxxxxxx. где xxxxxxxxxxx ваш хеш, или просто вставьте ссылку.
  5. Откройте WDTT и перейдите во вкладку «Деплой».
  6. Введите IP/домен VPS, SSH-логин, пароль и SSH-порт.
  7. В «Секретах» задайте главный пароль туннеля. При необходимости добавьте Telegram admin_id / bot_token для управления доступом.
  8. Нажмите «Установить» и дождитесь завершения деплоя.
  9. Во вкладке «Туннель» укажите IP/домен сервера, VK-хеши, пароль подключения и количество потоков.
  10. Нажмите «Подключить» предварительно выдав все необходимые разрешения приложению.

Получение VK-хеша

VK → группа → звонок → ссылка приглашения → код после /join/
  1. Откройте VK и создайте пустую группу или используйте существующую.
  2. Начните групповой звонок.
  3. Скопируйте ссылку приглашения.
  4. Вставьте в WDTT всю ссылку или только хеш после /join/.
  5. Можно использовать до 4 хешей одновременно для распределения нагрузки и увеличения доступного числа потоков.

[!IMPORTANT] При выходе из звонка нажимайте «Просто завершить», а не «Завершить для всех». Если закрыть комнату для всех участников, хеш перестанет работать.

Деплой VPS

Серверная часть ставится автоматически из приложения:

Android → SSH → /tmp/deploy.sh + /tmp/wdtt-server → /usr/local/bin/wdtt-server
      → systemd wdtt.service → wdtt0 + NAT + firewall

По умолчанию используются:

  • 56000/udp — DTLS-сервер WDTT.
  • 56001/udp — внутренний WireGuard-порт сервера.
  • 9000/udp — локальный порт Android-клиента.
  • 10.66.66.0/24 — подсеть WireGuard-устройств.

Если включить ручное управление портами, эти значения можно изменить в «Секретах».

Управление доступом

WDTT-сервер поддерживает две модели подключения:

  • Главный пароль: задаётся при деплое и используется владельцем сервера.
  • Сгенерированные пароли: создаются при деплое или через Telegram-бота, имеют срок действия, привязываются к первому устройству и обновляют WRAP-ключи на сервере без перезапуска.

Один сервер может держать до 10 активных паролей. Новые пароли генерируются длиной 16 символов.

Команда /list показывает активные пароли и устройства. Через inline-кнопки можно отвязать устройство или удалить пароль. При удалении или истечении пароля соответствующий WRAP-ключ удаляется из памяти сервера.


Дополнительные возможности

Исключения приложений

Вкладка «Исключ.» показывает установленные приложения с поиском. В режиме ЧС выбранные приложения исключаются из VPN, а в режиме БС логика инвертируется: неотмеченные приложения добавляются в туннель. Само приложение WDTT и VK-клиенты исключаются автоматически, чтобы не ломать TURN-соединение.

Капча

По умолчанию включён режим «Авто капча». Оркестратор делает до двух попыток Go v2-решателя, затем две попытки Auto WebView с коротким таймаутом, затем финальную Go-попытку. Если всё это не помогло, приложение открывает ручной WebView. Авто-режим можно отключить, тогда в UI появляются ручные настройки метода и режима прохождения.

Логирование

Вкладка «Логи» показывает статус получения VK-учётных данных, решение капчи, DTLS-handshake, WRAP-состояние, готовность WireGuard, статистику активных воркеров и ошибки. Повторяющиеся строки схлопываются в одну запись со счётчиком.

[!NOTE] Если видны DTLS handshake, но Активных: 0, чаще всего указан неправильный пароль подключения или используется сервер без актуального WRAP-протокола. Если часть потоков уже активна, одиночные DTLS timeout больше не считаются неверным паролем и не останавливают туннель.

Обновления

Приложение проверяет GitHub releases репозитория amurcanov/proxy-turn-vk-android, умеет показывать диалог новой версии и открывать страницу релиза в браузере. Проверка выполняется при запуске и периодически в фоне.

Отчёт для issue

В разделе «Информация» есть кнопка «Собрать отчёт». Она копирует версию приложения, Android SDK, ABI, модель устройства, SoC, ROM и fingerprint — эти данные полезны при разборе крашей и проблем с запуском.


[!NOTE]

Отчёты об ошибках

WDTT зависит от мобильной сети, Android-ограничений фоновой работы, состояния VK-звонка, TURN-квот, DNS и настроек VPS.

Если возникла проблема, приложите к issue отчёт из раздела «Информация», скриншот вкладки «Логи», версию APK, ABI сборки и описание сети. Мелкие повторяющиеся ошибки в логах не всегда означают поломку, если туннель остаётся активным.

[!IMPORTANT]

Назначение проекта

Приложение является техническим инструментом для защищённого туннелирования собственного трафика через ваш сервер. Автор не призывает использовать WDTT для противоправных целей или нарушения правил сторонних сервисов.


Лицензия

Этот проект распространяется под лицензией GNU General Public License v3.0.

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest