WireGuard‑туннель через DTLS‑медиарелей ВК TURN‑серверов: трафик проходит от клиента к вашему личному VPS‑серверу через промежуточные медиарелей‑серверы ВК.
  • Kotlin 70.6%
  • Go 19.4%
  • Shell 9.2%
  • Python 0.4%
  • Java 0.4%
Find a file
2026-10-11 13:00:40 +03:00
.github/ISSUE_TEMPLATE Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
app Выпуск WDTT Plus v20 2026-09-30 01:05:14 +03:00
docs/icon-sources Выпуск WDTT Plus v12 2026-07-29 15:26:22 +03:00
go_client Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
gradle/wrapper Normalize tracked file modes 2026-07-01 21:38:13 +03:00
pathprobe Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
server-installer Выпуск WDTT Plus v20 2026-09-30 01:05:14 +03:00
warp-interface-manager Обновить WARP-менеджер до 1.4.0: несколько интерфейсов и исправление режима сервера 2026-10-11 13:00:40 +03:00
.gitignore Выпуск WDTT Plus v12 2026-07-29 15:26:22 +03:00
admin.go Выпуск WDTT Plus v18 2026-09-11 15:45:55 +03:00
admin_test.go Выпуск WDTT Plus v18 2026-09-11 15:45:55 +03:00
bot.go Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
bot_external_proxy_test.go Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
build.gradle.kts Normalize tracked file modes 2026-07-01 21:38:13 +03:00
CHANGELOG.md Выпуск WDTT Plus v20 2026-09-30 01:05:14 +03:00
client_transfer.go Выпуск WDTT Plus v3 2026-07-04 16:06:25 +03:00
client_transfer_test.go Выпуск WDTT Plus v3 2026-07-04 16:06:25 +03:00
database_persistence.go Выпуск WDTT Plus v18 2026-09-11 15:45:55 +03:00
database_persistence_test.go Выпуск WDTT Plus v17 2026-09-04 19:38:52 +03:00
generate_icon_assets.py Release WDTT Plus v1 2026-07-01 18:25:54 +03:00
go.mod Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
go.sum Выпуск WDTT Plus v16 2026-09-04 09:17:06 +03:00
gradle.properties Выпуск WDTT Plus v14 2026-08-03 00:56:14 +03:00
gradlew Выпуск WDTT Plus v14 2026-08-03 00:56:14 +03:00
LICENSE Normalize tracked file modes 2026-07-01 21:38:13 +03:00
README.md Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
server.go Выпуск WDTT Plus v20 2026-09-30 01:05:14 +03:00
server_backup.go Выпуск WDTT Plus v18 2026-09-11 15:45:55 +03:00
server_backup_test.go Выпуск WDTT Plus v18 2026-09-11 15:45:55 +03:00
server_keys_test.go Выпуск WDTT Plus v16 2026-09-04 09:17:06 +03:00
server_multipath_test.go Выпуск WDTT Plus v16 2026-09-04 09:17:06 +03:00
server_runtime.go Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
server_runtime_test.go Выпуск WDTT Plus v18 2026-09-11 15:45:55 +03:00
settings.gradle.kts Normalize tracked file modes 2026-07-01 21:38:13 +03:00
transport_metrics.go Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
transport_modes.go Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
transport_uplink.go Выпуск WDTT Plus v19 2026-09-29 10:52:29 +03:00
udp_listener.go Выпуск WDTT Plus v13 2026-07-30 16:12:45 +03:00
udp_listener_test.go Выпуск WDTT Plus v13 2026-07-30 16:12:45 +03:00
wg_backend.go Выпуск WDTT Plus v12 2026-07-29 15:26:22 +03:00

WDTT Plus — WireGuard over TURN Tunnel


Android 10+ Target API 35 Go Version Kotlin License GPLv3

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

Официальный Telegram-бот WDTT Plus — позволяет получить готовый профиль и открыть его в приложении.

Инструменты в репозитории

  • Ручной установщик сервера WDTT Plus — самостоятельный Linux-скрипт для безопасной установки, обновления, диагностики и обслуживания wdtt-server без передачи SSH-реквизитов Android-приложению. Поддерживает проверку совместимости, резервирование данных и откат при ошибке.
  • Менеджер выборочного WARP — отдельный самостоятельный проект для направления IPv4-трафика с выбранного Linux-интерфейса через Cloudflare WARP без замены основного маршрута сервера.
Скриншоты

Содержание

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

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

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

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

3. О проекте

WDTT Plus: отличия от оригинала

Этот репозиторий — дальнейшая переработка проекта amurcanov/proxy-turn-vk-android. Основа, идея и значительная часть исходной реализации принадлежат автору оригинального WDTT. Проект сохраняет GPLv3 и ссылку на первоисточник.

Ниже перечислены только крупные отличия WDTT Plus; общие возможности вроде VpnService, TURN/DTLS, WRAP/RTP AEAD, базового деплоя, тем и лог-вьюера повторно не выдаются за изменения модификации.

Что изменено в модификации

  • Расширенное управление сервером: клиентов и основные параметры сервера можно обслуживать прямо из приложения без Telegram. Клиента можно перенести отдельно через QR, камеру, изображение, файл, Android Share или код передачи; создать с автоматическим или заданным вручную паролем и безопасно сменить пароль без перезапуска сервера. Сервер защищён от всплесков подключений и поддерживает пределы мощности и скорости для отдельного доступа. Telegram-бот остаётся альтернативным удалённым пультом с теми же основными операциями.
  • Обновление, резервирование и перенос сервера: повторный деплой предлагает безопасное обновление с сохранением данных или чистую установку. Сервер умеет создавать проверяемые копии по расписанию; приложение показывает историю, позволяет создать, проверить, скачать, загрузить, восстановить или удалить копию. Перед обновлением и восстановлением создаются постоянная и транзакционная страховочные копии, а при ошибке выполняется откат.
  • Режимы пользователя и администратора: режим «Юзер» оставляет подключение по ссылке или вручную, управление VPN, исключения и логи без серверных полей. Режим «Админ» открывает деплой и полное управление собственным сервером.
  • Ссылки и перенос между устройствами: подключение можно передать ссылкой, файлом или QR-кодом, а получить — также камерой и из изображения. Администратор может отправить клиентский доступ ещё до добавления VK-хеша — получатель заполнит его у себя перед запуском. Защищённая короткая ссылка может сразу добавить выданный доступ и предложить автоматическое либо ручное заполнение VK-хешей. Импорт занимает свободный VPN-профиль или предлагает выбрать заменяемый, сохраняет название и при наличии показывает установленный владельцем предел мощности. Полученный профиль показывает срок и доступное действие, а после окончания доступа не запускает VPN. Для администратора доступен защищённый паролем перенос локальных настроек.
  • VK-хеши и независимые провайдеры: приложение проверяет каждый слот звонка, при необходимости проходит капчу и показывает отдельный результат. Несколько ссылок или хешей можно вставить из буфера сразу, не затирая заполненные поля без подтверждения. TURN-данные запрашиваются по порядку: быстрый VKCalls без капчи, собственные legacy-реквизиты (если включены), затем выбранные встроенные legacy Client ID; пользовательский secret хранится защищённо.
  • Настраиваемый выходной IP: из Android и Telegram-бота управляются прямой выход, прокси VPS, внешний TCP-прокси, бесплатный WARP, готовый VPN/WireGuard-файл и WireGuard-выход через другой сервер. Приложение показывает состояние режимов на сервере, проверяет конфликтные маршруты перед включением и откатывается при ошибке.
  • Маршрутизация приложений и адресов: общий режим ЧС/БС применяется к приложениям, точным доменам, URL, IPv4-адресам, подсетям CIDR и диапазонам IPv4. Можно добавлять несколько адресов сразу; списки каждого режима сохраняются отдельно, поддерживают импорт/экспорт и применяются быстрой перезагрузкой WireGuard. Для приложений есть быстрый подбор сервисов, чувствительных к VPN.
  • Прокси без VPN-слота: профиль может поднять SOCKS5, HTTP CONNECT или автоматический совместный обработчик на одном порту вместо системного VPN. SOCKS5 поддерживает TCP CONNECT и UDP ASSOCIATE, а HTTP CONNECT добавляет совместимость с TCP-программами без SOCKS5. Доступ можно оставить на 127.0.0.1, безопасно открыть для ближайшей локальной подсети либо включить оба точных адреса одновременно; любой LAN-доступ требует аутентификацию.
  • Доверенные сети Wi-Fi: VPN может автоматически переходить в ожидание в выбранных домашних или рабочих сетях и восстанавливать прежнее подключение после выхода из них. Восстановление устойчивее работает в фоне и после пробуждения телефона; ручное отключение отменяет его, а неопределённая сеть никогда не отключает VPN.
  • Captcha и устойчивость транспорта: современный VKCalls используется первым и обычно не требует капчи; временный flood не создаёт повторный шквал запросов. Если нужен legacy-резерв, авто-режим начинает с Auto WebView и переходит к Go v2 и ручному WebView только при необходимости. Клиент использует актуальные адреса vk.ru, выбирает рабочий DNS-путь и перебирает резервные TURN-соединения по UDP, TCP и TLS.
  • Адаптивное соединение: автоматический контроль доставки и восстановление каналов без выбора транспортного режима. Сервер и приложения поддерживают постепенное обновление с сохранением совместимости.
  • Диагностика телефона и VPS: проверка устройства отдельно тестирует системный DNS, DNS-путь клиента, основной VKCalls и резервные VK/OK-узлы из сети телефона. Серверная диагностика сосредоточена на службе, UDP-портах, маршрутизации и выходном интернете; доступ к VK/OK с самого VPS показывается только справочно и не создаёт ложную ошибку.
  • Самостоятельная сборка WDTT Plus: приложение использует пакет com.wdtt.plus, собственный канал обновлений и отдельное оформление. Gradle пересобирает Android libclient.so и сервер для деплоя из исходников, а release APK получает понятные имена для каждой ABI.

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

  • Ориентир совместимости: WDTT Plus смотрит вперёд и ориентируется на Android 10+ с современными требованиями Android SDK. targetSdk 35 — это целевой API сборки, а не верхний предел Android: новые версии Android должны поддерживаться по мере тестирования, включая отдельную проверку нативной части на устройствах с 16 KB page size. Android 9 и ниже не являются основной целью поддержки.
  • Проверка устройства: при первом запуске приложение в фоне проверяет только архитектурные условия — Android, ABI, нативный клиент, память и размер страницы памяти — и предупреждает, если есть риск несовместимости. В «Инфо» доступна ручная расширенная проверка версии WDTT Plus, WebView, разрешений Android, системного и клиентского DNS, доступа к VK/OK и текущего состояния VPN.
  • Полноценный VPN-режим: приложение использует VpnService и WireGuard GoBackend, поэтому трафик выбранных приложений проходит через системный VPN-интерфейс без ручного импорта конфигов.
  • SOCKS5-режим: userspace WireGuard поднимает SOCKS5, не запрашивает VPN-разрешение и не занимает системный VPN-слот. Для цепочки внешний VPN-клиент должен исключить пакет com.wdtt.plus, использовать SOCKS5 как следующий узел и запретить прямой fallback. Поддерживаются TCP и обычные UDP-датаграммы; IPv6 и фрагментация SOCKS5 UDP не выдаются за поддерживаемые.
  • HTTP CONNECT: отдельный режим TCP-прокси для браузеров и программ без SOCKS5.
  • Автоматический прокси: SOCKS5 и HTTP CONNECT работают на одном номере порта, а каждое TCP-соединение направляется по однозначному приветствию клиента. SOCKS5 использует TCP и UDP, HTTP — TCP. По умолчанию прокси готовит доступ и для приложений телефона, и для текущей частной локальной сети; слушатели привязаны к точным IPv4-адресам, общий лимит клиентов не умножается, а LAN-доступ не включается без логина и пароля.
  • Три профиля подключения: VPN 1, VPN 2 и VPN 3 хранят отдельные настройки туннеля и деплоя; профиль можно переименовать долгим нажатием в боковых настройках. Название активного профиля видно в заголовках вкладок, передаче подключения, плитке быстрых настроек и активном уведомлении туннеля. Полученный профиль может иметь собственный предел мощности, который показывается рядом с регулятором и не влияет на остальные профили.
  • Корректная передача VPN-слота: если Android отключает WDTT Plus VPN или другой VPN забирает системный VPN-слот, WDTT Plus останавливает транспорт и переводит плитку/виджет в неактивное состояние. Плитка запускает VPN как с обычными настройками, так и в режиме ссылки, а при активном подключении показывает выбранный профиль вместе с уведомлением туннеля.
  • Доверенные сети Wi-Fi: в боковых настройках можно добавить текущую сеть или точный SSID вручную. В доверенной сети системный VPN-интерфейс снимается и интернет работает напрямую, а тихое уведомление сохраняет режим ожидания. После перехода на мобильную или другую Wi-Fi сеть прежний VPN-профиль восстанавливается. Android запрашивает доступ к местоположению только потому, что относит имя Wi-Fi к чувствительным данным; координаты приложение не получает.
  • TURN/DTLS-транспорт: нативный Go-клиент получает временные TURN-учётные данные VK-звонка и поднимает DTLS-соединения к relay-серверу, через который передаётся трафик до вашего сервера. Если основной TURN-путь не отвечает, клиент пробует другие выданные адреса и доступные варианты UDP, TCP или TLS.
  • Импорт VK-ссылок через «Поделиться»: ссылку VK-звонка можно отправить прямо в WDTT Plus. Приложение извлечёт хеш после /call/join/, заполнит следующий слот VK-хеша и покажет, какой номер был обновлён.
  • Передача и получение подключения: текущий VPN-профиль отправляется как wdtt://-ссылка, файл или QR-код. Приложение принимает эти данные через Android, камеру, галерею и выбор файла, сохраняя совместимость со старыми ссылками. Клиентский доступ можно передать без VK-хеша, чтобы получатель добавил собственный перед запуском. Защищённая короткая ссылка также может добавить выданный профиль без VK-хешей, после чего приложение предложит получить их автоматически или ввести вручную.
  • Проверка VK-хешей: окно VK-хешей умеет проверить, жив ли групповой звонок, решить VK Captcha в процессе проверки, показать понятный статус по каждому полю, очистить отдельный слот и скопировать один или все заполненные хеши. Из буфера можно вставить до четырёх ссылок или хешей сразу с выбором: заполнить свободные поля или заменить набор.
  • TLS/HTTP-отпечаток: по умолчанию используется Firefox fingerprint, при необходимости его можно переключить в настройках приложения.
  • 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-порты.
  • Резервные копии сервера: во вкладке «Деплой» настраиваются автоматический интервал и количество хранимых копий, отображаются последняя попытка, следующая копия и история. Выбранную копию можно проверить, восстановить, скачать на устройство в зашифрованном виде или загрузить обратно через системный выбор файла Android.
  • SSH по паролю или ключу: установка, подключение без установки, управление клиентами, перенос сервера и инструменты выходного IP работают как с SSH-паролем, так и с приватным ключом OpenSSH/PEM. Поддерживаются распространённые ключи OpenSSH ed25519, rsa, ecdsa и PEM-ключи RSA/EC/PRIVATE/ENCRYPTED PRIVATE KEY; в поле нужно вставлять приватный ключ целиком с BEGIN/END, а не публичную строку ssh-ed25519 или ssh-rsa. Способ входа выбирается явно; в режиме ключа пароль можно оставить для sudo, если он требуется сервером. Ключ можно вставить, прочитать из файла или буфера обмена и проверить перед сохранением. Основной и дополнительный VPS хранят свои ключи отдельно в защищённом хранилище Android; ключи не отправляются на сервер и не входят в перенос настроек администратора.
  • Подключение к готовому серверу: в «Деплой» выберите «Подключить», заполните SSH-доступ и главный пароль через значки ключа и шестерёнки. Приложение проверяет SSH-доступ и главный пароль, показывает отличия и после подтверждения восстанавливает локальные поля. Если серверный профиль владельца был сохранён из переименованного VPN-профиля, это название также вернётся в приложение; стандартные VPN 1/2/3 локальное имя не затирают. Этот режим работает только от сервера к приложению и ничего не записывает на сервер.
  • Парольная модель доступа: сервер поддерживает главный пароль, настраиваемый лимит пользовательских паролей, 16-символьную генерацию, ручное задание пароля с проверками, привязку к устройству и срок действия. Клиентов можно создавать, импортировать, экспортировать, отключать, продлевать, отвязывать, удалять и менять им пароль из приложения или Telegram-бота.
  • Горячее обновление WRAP-ключей: создание, удаление и истечение паролей обновляют набор WRAP-ключей на сервере без перезапуска ядра.
  • Исключения приложений и адресов: ЧС и БС хранят независимые наборы приложений, доменов, IPv4-адресов и подсетей. В ЧС выбранное работает напрямую, в БС — направляется в VPN; точные домены преобразуются в их текущие IPv4-маршруты при запуске VPN.
  • Рабочая цепочка VK: сначала приложение пробует современный отключаемый VKCalls без капчи, затем собственный legacy Client ID и выбранные встроенные legacy ID. Для legacy-провайдеров Auto WebView решает обычную проверку, Go v2 используется как следующий автоматический этап, а ручной WebView остаётся fallback для slider/puzzle и других строгих проверок.
  • Живой лог-вьюер: события Go-клиента, выбранного VK-провайдера, переходов между резервами, DTLS, WireGuard, WRAP, капчи, деплоя и статистики отображаются с группировкой повторов. Временные сбои показываются как предупреждения, а красным выделяются критические ошибки. После отключения итоговый трафик и доступная причина сохраняются, а завершённая сессия отображается неактивной.
  • Фоновая устойчивость: Foreground Service, WakeLock, WifiLock, мягкий reconnect по валидированной сети и проверка после пробуждения помогают переживать Doze, смену Wi-Fi/LTE, DNS-сбои до VK и падение нативного процесса без агрессивных перезапусков. Выход из доверенной Wi-Fi дополнительно контролируется до фактического восстановления VPN.
  • VK Auth fallback: собственные legacy-реквизиты не заменяют быстрый VKCalls и встроенную цепочку, а добавляются между ними как отдельный резерв. Ошибка собственного Client ID явно отображается в журнале, после чего клиент пробует выбранные встроенные ID.
  • DNS fallback: клиент проверяет основной и резервный Yandex DNS по UDP, затем по TCP, а при их недоступности использует системный DNS устройства.
  • Темы и оформление: Material 3, Jetpack Compose, Inter, светлая/тёмная тема, Dynamic Colors на Android 12+ и встроенные палитры.
  • Автообновления: приложение проверяет релизы WDTT Plus при запуске, при возврате из фона не чаще одного раза в 5 минут и каждые 30 минут, если остаётся открытым. Подходящий APK скачивается внутри приложения и передаётся системному установщику Android. Если APK текущей версии был заменён в релизе, WDTT Plus сверяет SHA-256 установленного APK со всеми APK релиза и предлагает исправление текущей версии.

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

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

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

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

Если на сервере уже есть установленный WDTT Plus, приложение покажет предупреждение перед деплоем. Режим «Обновить с сохранением» заменит серверный бинарник и применит параметры WDTT и параметров установки, сохранив выданные ссылки, привязки устройств, историю и WireGuard-ключи. Режим «Начать с нуля» удалит серверные данные WDTT Plus и развернёт чистую установку.

Для переноса на другой сервер во вкладке «Деплой» используйте блок «Резервные копии и перенос». Частичный экспорт сохраняет базу WDTT Plus: профиль владельца, Telegram-настройки, клиентов, привязки устройств, статистику и историю. Полный экспорт дополнительно требует и сохраняет WireGuard-ключи сервера; формат v3 также переносит сохранённый профиль выходного IP, прокси и VPN/WireGuard. Старые wdtt:// ссылки останутся рабочими без перевыдачи, если в них был домен, DNS указывает на новый сервер и сохранены прежние порты; для ссылок со старым IP или при смене портов создайте новые. Импорт можно выполнить при деплое или на работающем сервере: режим «Заменить» подходит для переезда, режим «Добавить» переносит отсутствующие записи, проверяет конфликты устройств и назначает свободные внутренние IP. Перед изменением создаются постоянная и транзакционная страховочные копии, после импорта проверяются данные и служба, а при ошибке выполняется откат.

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

VK → группа → звонок → ссылка приглашения → код после /join/
  1. Откройте VK и создайте пустую группу или используйте существующую.
  2. Начните групповой звонок.
  3. Отправьте ссылку приглашения в WDTT Plus через системное меню «Поделиться» или скопируйте её вручную.
  4. Приложение само разбирает полную ссылку vk.ru/call/join/... (и старый вариант vk.com/call/join/...), убирает лишние параметры и заполняет первое свободное поле VK-хеша в активном VPN-профиле.
  5. Если такой хеш уже добавлен, WDTT Plus покажет ошибку и не создаст дубль. Если все 4 поля заняты, будет обновлён следующий слот по кругу с предупреждением о перезаписи.
  6. Можно использовать до 4 хешей одновременно для распределения нагрузки и увеличения доступного числа потоков.

Important

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

Деплой сервера

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

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

Если вы не хотите передавать административные SSH-реквизиты приложению для первой установки, используйте автономный Linux-установщик из каталога server-installer. После ручной установки WDTT Plus подключается по адресу, DTLS-порту и паролю туннеля; SSH нужен только для деплоя, администрирования и управления резервными копиями, но не для обычного VPN-подключения.

Ручной установщик не входит в APK и не запускается приложением. Android распознаёт принадлежащую ему установку и блокирует поверх неё обновление, повторный деплой, сброс и удаление. Новый бинарник и изменения портов применяются самим server-installer/install.sh; подключение, управление клиентами и резервными копиями, включая восстановление под общей блокировкой, остаются в приложении.

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

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

Если включить ручное управление портами, порты DTLS и WireGuard можно изменить в параметрах установки; SSH-порт находится в настройках SSH.

Резервное копирование сервера

Управление находится во вкладке «Деплой» → «Резервные копии и перенос». Расписание выполняется внутри wdtt-server, поэтому приложение можно закрыть. Можно выбрать интервал от 6 до 168 часов и хранить от 2 до 90 исправных копий. При включении расписания сервер сначала создаёт и перечитывает первую копию; если это не удалось, настройка не включается. Просроченная копия создаётся после возвращения службы в рабочее состояние, а неудачные попытки повторяются с ограниченной задержкой.

Каждый серверный снимок содержит:

  • passwords.json: главный профиль, настройки сервера, клиенты, привязки, сроки, статистику и историю;
  • wg-keys.dat: серверную идентичность WireGuard;
  • сохранённый профиль выхода outbound-profile.env, если он был настроен.

Фактические внешние интерфейсы, работа второго VPS и сторонние прокси таким снимком не создаются: после переезда их доступность нужно проверить отдельно. Копии на VPS хранятся только в закрытом для root каталоге и не защищают от потери всего VPS. Для внешней копии выберите «Скачать», задайте отдельный пароль и сохраните файл через системный выбор места Android. Приложение не сохраняет этот пароль. Файл можно позднее выбрать через импорт и восстановить на текущий или другой совместимый сервер.

Перед восстановлением сервер создаёт ещё одну постоянную копию текущего состояния, затем приложение готовит отдельный транзакционный откат. Замена и удаление запускаются только после непрерывного удержания опасной кнопки в течение трёх секунд; отпускание или потеря связи сразу отменяет отсчёт. Сервер не удаляет последнюю исправную копию, а повреждённые файлы отмечает в истории и не удаляет самостоятельно. Старые незашифрованные переносимые файлы v1/v2 читаются для совместимости, но новые выгрузки всегда защищаются паролем.

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

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

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

В блоке «Клиенты и сервер» вкладки «Деплой» можно искать и фильтровать клиентов, создавать доступы с автоматическим или ручным паролем, редактировать параметры, срок и привязку устройства, менять пароль, а также передавать подключение ссылкой, файлом или QR-кодом. Там же доступны экспорт и импорт отдельного клиента для ручного переноса на другой сервер, история, трафик, настройки сервера, очистка устаревших записей и сервисные действия. После импорта приложение перечитывает список сервера и выбирает добавленного клиента.

Экспорт отдельного клиента переносит только данные доступа: пароль, название, имеющиеся VK-хеши, срок и состояние. Устройство, WireGuard-ключи, статистика, история, адрес, порты и серверные параметры не копируются; после импорта клиент использует настройки нового сервера и привязывается к устройству при первом подключении.

Обычные изменения применяются работающим сервером сразу и не прерывают остальных клиентов: Android вызывает admin-команды по SSH, а они обращаются к закрытому локальному сокету wdtt-server, не открывая отдельный управляющий порт в сеть. Явный перезапуск сервиса оставлен отдельным подтверждаемым действием. При удалении или истечении пароля соответствующий WRAP-ключ удаляется из памяти сервера.

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

Передача между устройствами

Раздел «Передать или получить» находится в боковых настройках. Пользователь может отправить активный VPN-профиль ссылкой, файлом или QR-кодом; на другом устройстве данные можно открыть напрямую, выбрать как файл, отсканировать камерой либо распознать на изображении из галереи. Доступ без VK-хеша тоже распознаётся и сохраняется, но перед запуском получатель должен добавить собственный. Приложение использует первый пустой профиль VPN, а если заняты все три — предлагает выбрать профиль и подтвердить замену. Названия профилей помогают отличать подключения в заголовках вкладок «Туннель» и «Деплой».

В режиме администратора там же можно передать все локальные VPN-профили, параметры деплоя, исключения и настройки выхода. Такой экспорт шифруется отдельным паролем; пароль не сохраняется и должен передаваться получателю отдельно. Резервная копия состояния самого сервера управляется через «Деплой» → «Резервные копии и перенос».

Warning

Ссылка и пользовательский QR всегда содержат пароль подключения и могут содержать VK-хеши. Не публикуйте их и передавайте только доверенному получателю.

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

Вкладка «Исключ.» содержит отдельные списки приложений и адресов с общим режимом ЧС/БС. В ЧС выбранные приложения и IPv4-направления обходят VPN, в БС через VPN проходят только выбранные элементы; если заполнены обе категории БС, применяется их пересечение. Точные домены преобразуются в IPv4 при запуске WireGuard, а IPv6 и маски доменов пока не поддерживаются. Оба режима сохраняют собственные наборы и поддерживают импорт/экспорт. Отсутствующее после импорта приложение остаётся видимым в списке, чтобы его можно было удалить. WDTT Plus и VK-клиенты всегда обходят VPN, чтобы не ломать TURN-соединение.

Капча

По умолчанию включены быстрый VKCalls и режим «Авто капча». Сначала TURN-данные запрашиваются через VKCalls без капчи. Если он недоступен, приложение пробует собственный legacy Client ID (если включён), затем встроенные legacy ID; только в этой резервной ветке используются Auto WebView, Go v2 и при необходимости ручной WebView. Slider/puzzle считается строгой проверкой VK и передаётся пользователю. Вместо автоматического решения можно выбрать «Всегда вручную». Ошибки мёртвой ссылки, запрета анонимного входа и переполненного звонка выводятся отдельно.

Логирование

Вкладка «Логи» показывает старт быстрого VKCalls, переходы на собственный и встроенный legacy-провайдеры, использование кэша TURN, решение капчи, DTLS-handshake, WRAP-состояние, готовность WireGuard, статистику активных воркеров и ошибки. Ожидаемый переход на резерв не помечается как критическая ошибка; повторяющиеся строки схлопываются в одну запись со счётчиком.

Note

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

Трафик

Сервер хранит суммарный трафик и дневную историю по главному паролю администратора и каждому выданному клиентскому паролю. Telegram-бот показывает трафик за сегодня, 7 дней, 30 дней и всё время; уведомление Android во время подключения показывает текущий входящий и исходящий трафик сессии.

Выходной IP и прокси

Первичная настройка выполняется во вкладке «Деплой» в блоке «Выходной IP и прокси». Эти режимы меняют IP, который видят сайты и сервисы у пользователей WDTT; сам адрес WDTT-сервера, входящие DTLS/SSH и ссылка подключения этим не скрываются.

Формы этого блока можно заполнить с сервера: приложение читает сохранённый профиль администратора и текущие конфиги прокси/WireGuard. При установке направление обратное — текущие поля приложения сохраняются на сервере; перед заменой отличающихся серверных значений приложение предупреждает об этом. Профиль также обновляется при включении режимов из приложения.

Блок показывает состояние режимов по данным сервера: активный выход отмечается зелёным, найденные сохранённые настройки — жёлтым, а конфликт или не поднятая служба — красным. Время проверки выводится в русском формате с 24-часовым временем. Перед включением внешнего TCP-прокси, WARP или WireGuard-варианта приложение проверяет, что на сервере не запущены несовместимые маршруты выхода. Кнопки проверки читают сервер и объясняют, найден ли режим и активен ли он; отключение, остановка и удаление доступны только по подтверждённому статусу.

  • Прямой выход — трафик пользователей выходит через текущий VPS.
  • Прокси VPS — создаёт SOCKS5/HTTP-прокси на этом же сервере. IP не скрывает, потому что выход остаётся через текущий VPS.
  • Внешний TCP-прокси — направляет обычные TCP-подключения через внешний SOCKS5/HTTP-прокси. UDP, QUIC и часть звонкового трафика могут идти напрямую.
  • Другой сервер — подключает отдельный VPS по WireGuard и выпускает пользователей через него. Это самый понятный вариант для отдельного выходного IP.
  • Бесплатный WARP — автоматически регистрирует WARP через wgcf и скрывает IP VPS без второго сервера. Приложение проверяет SHA-256 инструмента, подтверждение warp=on/plus, выполняет повторные подключения, включает проверку каждые пять минут и откатывается на прямой выход при неудачной установке. MTU задаётся в безопасном диапазоне 1280–1500, по умолчанию — 1280.
  • VPN/WireGuard-файл — подключает готовый WireGuard .conf как выход только для пользователей WDTT. Сюда можно вставить свой конфиг VPN-провайдера, WARP/WARP+ или другой совместимой службы, если это именно WireGuard-профиль с [Interface] и [Peer]. Команды запуска, неизвестные параметры и конфиги без маршрута 0.0.0.0/0 отклоняются; DNS самого VPS не изменяется.

В режимах выхода «Отключить» возвращает прямой выход через текущий VPS, но оставляет настройки на сервере для повторного включения. «Удалить» стирает рабочие файлы; для импортированного WireGuard-файла также удаляется сохранённая копия из серверного профиля.

Автоматический WARP использует неофициальный wgcf и требует принятия условий Cloudflare. Поддерживается Linux amd64, как и серверный бинарник WDTT Plus. Выходной IP Cloudflare общий и может меняться; страна и постоянный IP не гарантируются. Если WARP ограничен Cloudflare в регионе, приложение покажет ошибку и не оставит клиентов без прямого выхода.

Telegram-бот умеет посмотреть статус и диагностику выхода, вернуть режим direct, создать/проверить/остановить прокси VPS, включить внешний TCP-прокси, управлять бесплатным WARP и посмотреть или отключить WireGuard/VPN-выход.

Обновления

Приложение проверяет GitHub Releases WDTT Plus, показывает диалог новой версии и открывает страницу релиза в браузере. Проверка выполняется при запуске и периодически в фоне.

Отчёт для issue

В разделе «Информация» действие «Проверить устройство» одновременно проверяет совместимость и формирует полный диагностический отчёт: версию приложения, Android SDK, ABI и разрядность, размер страницы памяти, модель устройства, SoC, ROM, память, сеть, WebView и безопасные параметры запуска. Отчёт можно скопировать из окна проверки; адреса, пароли, токены и значения VK-хешей в него не включаются.

Note

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

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

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

Warning

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

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

Авторы и участники этой модификации не призывают использовать WDTT Plus для обхода блокировок или нарушения правил каких-либо платформ, а также не несут ответственности за финальные сценарии использования утилиты пользователями. Любые специфические технические особенности приложения описаны как исследование сетевой архитектуры и протоколов.

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

Для разработки

Для полной сборки нужны актуальные Android SDK/NDK и Go 1.26. Проект собирается с targetSdk 35 и отдельными APK для arm64-v8a, armeabi-v7a, x86_64 и universal. Каноническая release-сборка:

./gradlew assembleRelease

Команда пересобирает нативный Android-клиент и Linux-сервер для деплоя, затем помещает подписанные APK в app/build/outputs/apk/release/named/. Для большинства современных устройств подходит WDTT-Plus-vN-arm64-v8a-release.apk, где N — номер выпуска.

Перед загрузкой выпуска на GitHub используйте отдельную fail-closed подготовку:

./gradlew :app:prepareGithubReleaseArtifacts

Она сначала удаляет прежний готовый набор, выполняет release-сборку и закрытый аудит, а затем создаёт app/build/outputs/release-ready/ ровно с шестью файлами: четырьмя APK, standalone-архивом того же серверного бинарника и его внешней контрольной суммой. Если сервер внутри хотя бы одного APK, standalone-архива или текущих исходников отличается, готовый каталог не создаётся. Самостоятельный WARP-менеджер остаётся отдельным подпроектом и в выпуск WDTT Plus автоматически не упаковывается.

В app/src/debug/java/com/wdtt/plus/WDTTPreviews.kt находятся Compose Preview основных вкладок. Они входят только в debug source set и не попадают в release APK.

Лицензия

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