qWDTT Android

WireGuard через VK-звонки · технический разбор

Независимый проект по бесплатному ускорению интернета в России.
Репозиторий: github.com/SpaceNeuroX/proxy-turn-vk-android · GPL v3 · пакет net.qwdtt.client

В двух словах

qWDTT — Android-клиент WireGuard-туннеля, который ходит до VPS через TURN relay ВКонтакте. Снаружи это выглядит как зашифрованный медиапоток звонка WebRTC, а не как классический VPN.

Форк проекта amurcanov/proxy-turn-vk-android. Протокол WDTT и серверная часть полностью совместимы; клиент переписан ради удобства (профили, подписки, виджеты).

Зачем это нужно

Для сетевой доступности в условиях белых списков и глубокой инспекции трафика (DPI). Обычные VPN не работают:

Решение qWDTT: использовать инфраструктуру ВКонтакте (которая всегда в белом списке) как транспорт. Пакеты идут через VK TURN-серверы, выглядят как OPUS-аудио звонка, доходят до VPS — там разворачиваются обратно в WireGuard.

Как это устроено

Телефон                    VK TURN relay                 VPS
┌──────────────┐  RTP+WRAP   ┌──────────┐  RTP+WRAP+DTLS  ┌─────────────┐
│ WireGuard    │ ──/DTLS───► │  relay   │ ───────────────►│ wdtt-server │
│ Go-клиент    │             │  (VK)    │                 │ WireGuard   │
│ 127.0.0.1    │             └──────────┘                 └─────────────┘
└──────────────┘

Шаги подключения

  1. Клиент получает временные TURN-креды из VK-звонка (анонимно через API или через WebView с VK-аккаунтом).
  2. Поднимает DTLS-соединение через TURN relay.
  3. Пакеты снаружи обёрнуты в RTP и шифруются WRAP (ChaCha20-Poly1305) — DPI видит поток похожий на WebRTC-аудио.
  4. На телефоне работает системный WireGuard через VpnService + GoBackend.
  5. На VPS — wdtt-server распаковывает RTP+WRAP и передаёт в локальный WireGuard.

Форматы конфигов

Классическая ссылка wdtt://

wdtt://<IP>:<dtls_port>:<wg_port>:<local_port>:<пароль>:<vk_hash>

# Пример:
wdtt://203.0.113.10:56000:56001:9000:MySecretPass16:8UkewARpV0aJoWheFZlR942el6unTZvhneulo-eU8gA

Расширенная qwdtt://

qwdtt://config?name=Дом&peer=1.2.3.4:56000&hashes=хеш1,хеш2&workers=18&port=9000&pass=секрет

JSON-файл .qwdtt

{
  "name": "Дом",
  "peer": "1.2.3.4:56000",
  "hashes": "хеш1,хеш2",
  "workers": 18,
  "port": 9000,
  "password": "секрет"
}

Подписки HTTPS JSON

Один JSON-файл раздаёт целую папку профилей. Приложение периодически подтягивает список и заменяет папку.

{
  "subscriptionName": "MyServers",
  "description": "Подписка · до 24.08.2026",
  "trafficUsedMb": 76.8,
  "trafficLimitMb": 102912,
  "profiles": [{...}, {...}]
}

Что нового в qWDTT (относительно базового WDTT)

ФункцияqWDTTБазовый WDTT
Профили с папками и пингомданет
Импорт qwdtt://, файл .qwdtt, QRдатолько wdtt://
Глобальные VK-хешиданет
Подписки HTTPSданет
VK-аккаунт auth (WebView)датолько анонимный API
Виджет на рабочем столеданет
Плитка Quick Settingsданет

Серверная часть

wdtt-server (Go): DTLS, WRAP/RTP, выдача WG-конфига, поддержка паролей с TTL и привязкой к устройству, Telegram-бот.

ПортНазначение
56000/udpDTLS для клиентов
56001/udpWireGuard внутри сервера
9000/udpлокальный порт на Android

Подсеть клиентов: 10.66.0.0/16. Обновление паролей без рестарта: kill -HUP 539.

VK auth

Куки VK (remixsid) — живут долго. TURN-креды короткоживущие (~9 минут), обновляются автоматически.

Важно при работе с VK-звонком: при завершении жать «Просто завершить», не «Завершить для всех» — иначе хеш звонка умрёт и подключение отвалится.

Связанные проекты

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