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 не работают:
- WireGuard — детектится по сигнатуре и режется на ТСПУ.
- OpenVPN, IKEv2, L2TP — забанены как классы.
- При белом списке VPN-сервер не в разрешённых подсетях → трафик дропается ещё до handshake.
Как это устроено
Телефон VK TURN relay VPS ┌──────────────┐ RTP+WRAP ┌──────────┐ RTP+WRAP+DTLS ┌─────────────┐ │ WireGuard │ ──/DTLS───► │ relay │ ───────────────►│ wdtt-server │ │ Go-клиент │ │ (VK) │ │ WireGuard │ │ 127.0.0.1 │ └──────────┘ └─────────────┘ └──────────────┘
Шаги подключения
- Клиент получает временные TURN-креды из VK-звонка (анонимно через API или через WebView с VK-аккаунтом).
- Поднимает DTLS-соединение через TURN relay.
- Пакеты снаружи обёрнуты в RTP и шифруются WRAP (ChaCha20-Poly1305) — DPI видит поток похожий на WebRTC-аудио.
- На телефоне работает системный WireGuard через
VpnService+ GoBackend. - На 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/udp | DTLS для клиентов |
| 56001/udp | WireGuard внутри сервера |
| 9000/udp | локальный порт на Android |
Подсеть клиентов: 10.66.0.0/16. Обновление паролей без рестарта: kill -HUP 539.
VK auth
- Анонимный — Go-клиент ходит в VK API (
client_id6287487 / 8202606), капчу решает автоматически, при необходимости — через WebView. - С аккаунтом — вход в WebView один раз; при подключении открывается страница звонка, из неё перехватывается
turn_server. Лимит ~4 потока на хеш.
Куки VK (remixsid) — живут долго. TURN-креды короткоживущие (~9 минут), обновляются автоматически.
Связанные проекты
Описание клиента приведено исключительно в образовательных целях, чтобы показать как работает нестандартный сетевой транспорт через инфраструктуру мессенджера.