Skip to content

Repository files navigation

WDTT — WireGuard over TURN Tunnel


Android SDK Go Version Kotlin Stars

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

MyCollages (1)

Содержание

1. Начало работы и знакомство

Сюда идёт всё, что нужно пользователю, чтобы понять суть проекта и быстро его запустить.

2. Настройка и деплой (Техническая часть)

Шаги по установке, настройке окружения и безопасности.

3. Платформы и поддерживаемые клиенты

Разделение по операционным системам и альтернативам.

[!NOTE] Обратите внимание

Проекты, указанные в этом разделе, развиваются силами сторонних разработчиков. Как автор этого репозитория, я (amurcanov) делюсь ими исключительно в ознакомительных целях.

Пожалуйста, учитывайте, что я не контролирую их разработку и безопасность. Перед использованием рекомендую ознакомиться с оригинальной документацией авторов программ.

4. О проекте

Возможности 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, показывает диалог обновления и периодически повторяет проверку в фоне.

WIN Linux IOS совместимые клиенты WDTT

Моё любимое

  • luminescq/PWDTT - Хороший порт WDTT на Windows & Linux
  • anton48/vk-turn-proxy-ios — Самодостаточный проект для IOS совместимый с WDTT (server core)(высокий фактор доверия у репозитория)

Улучшенные форки WDTT на андроид:

Альтеративный форк под Windows

(Я не несу ответвености за ваше использование сторонних клиентов совместимых с WDTT)

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

Новое:

  • Добавлен новый тип маскировки "Видео" для разнообразия скрытности трафика.
  • Реализован режим анонимного потока VK Calls без капчи. #218 @XXcipherX

Исправления и оптимизация:

  • Исправлена нестабильность на 32-битных Android-устройствах (падения из-за атомарных операций). #217 @XXcipherX
  • Cнижена нагрузка на сервер за счёт оптимизации выделения памяти при обфускации RTP #214 @annel0
  • Исправлена логика раздельного туннелирования — теперь работает корректно #223 @XXcipherX
  • Улучшена обработка ошибок VK Calls: неустранимые ошибки теперь не приводят к бесконечным повторным попыткам #227 @XXcipherX
  • Мелкие улучшения капчи и скриптов сборки #221 @Afteroid
  • Мелкие улучшения сборочных скриптов и DNS #190 @andbul

Другие рабочие решения

Рабочие решения с обходом шейпинга скорости и частыми обновлениями:

Моё любимое

Android

(Я не несу ответвености за ваше использование указанных в ознакомительных целях мной - репозиториев)

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

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-процессом, активными воркерами и сетевыми изменениями, перезапуская транспорт при сбоях.

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

  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 сборки и описание сети. Мелкие повторяющиеся ошибки в логах не всегда означают поломку, если туннель остаётся активным.

Сборка

export ANDROID_NDK_HOME=/path/to/android-ndk
./scripts/build-native-libs.sh
./gradlew :app:assembleDebug

Одна ABI: ./scripts/build-go-lib.sh arm64-v8a

[!WARNING]

Назначение проекта и дисклеймер

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

Я (amurcanov) не призываю использовать WDTT для обхода блокировок или нарушения правил каких-либо платформ, а также не несу ответственности за финальные сценарии использования утилиты пользователями в реальной жизни или сети ИНТЕРНЕТ. Любые специфические технические особенности приложения - не более чем архитектурное совпадение, созданное без какого-либо умысла.

Проект является полностью некоммерческим, не содержит платных функций, скрытых подписок или коммерческой выгоды.

Лицензия

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

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages