WDTT — WireGuard over TURN Tunnel
WDTT Community TG
WDTT — это Android-приложение для создания защищённого WireGuard-туннеля поверх TURN/DTLS. Клиент поднимает локальный VPN-интерфейс на устройстве, получает WireGuard-конфигурацию от вашего VPS и передаёт транспорт через TURN-серверы VK, маскируя соединение под обычный зашифрованный медиатрафик звонка.
Содержание
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+ и встроенные палитры.
WIN Linux IOS совместимые клиенты WDTT
Моё любимое
Улучшенные форки 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 → интернет
- Приложение запускает нативный Go-клиент
libclient.so и передаёт ему адрес VPS, VK-хеши звонка, пароль туннеля и количество потоков.
- Go-клиент выводит WRAP-ключ из пароля подключения, получает TURN-учётные данные через VK-звонок, при необходимости решает VK Smart Captcha и устанавливает DTLS-соединения через TURN relay.
- Внешний WRAP-слой упаковывает DTLS-пакеты в RTP AEAD/ChaCha20-Poly1305, чтобы ключ не был захардкожен в APK и мог отличаться у каждого пароля.
- Первый рабочий канал запрашивает у VPS WireGuard-конфигурацию через
GETCONF, передавая локальный порт, device-id и пароль подключения.
- Сервер проверяет пароль: главный пароль работает как владелец, сгенерированные пароли имеют срок действия и привязываются к первому устройству.
- Android-часть парсит полученный WireGuard-конфиг, поднимает системный VPN-туннель и применяет исключения приложений.
- Watchdog следит за Go-процессом, активными воркерами и сетевыми изменениями, перезапуская транспорт при сбоях.
Быстрый старт
- Скачайте актуальный
APK со страницы релизов.
- Установите приложение на Android-смартфон.
- Подготовьте айпи, логин, пароль от имеющегося VPS.
- В VK создайте или откройте групповой звонок и скопируйте ссылку вида
vk.com/call/join/xxxxxxxxxxx. где xxxxxxxxxxx ваш хеш, или просто вставьте ссылку.
- Откройте WDTT и перейдите во вкладку «Деплой».
- Введите IP/домен VPS, SSH-логин, пароль и SSH-порт.
- В «Секретах» задайте главный пароль туннеля. При необходимости добавьте Telegram
admin_id / bot_token для управления доступом.
- Нажмите «Установить» и дождитесь завершения деплоя.
- Во вкладке «Туннель» укажите IP/домен сервера, VK-хеши, пароль подключения и количество потоков.
- Нажмите «Подключить» предварительно выдав все необходимые разрешения приложению.
Получение VK-хеша
VK → группа → звонок → ссылка приглашения → код после /join/
- Откройте VK и создайте пустую группу или используйте существующую.
- Начните групповой звонок.
- Скопируйте ссылку приглашения.
- Вставьте в WDTT всю ссылку или только хеш после
/join/.
- Можно использовать до 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, статисти