From 6384446a441621a16b62c2bd7a40264088aa1671 Mon Sep 17 00:00:00 2001 From: amurcanov Date: Sat, 23 May 2026 22:46:40 +0300 Subject: [PATCH] Update README.md --- README.md | 91 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index c23c466..9ca2cc6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # WDTT — WireGuard over TURN Tunnel
- Android SDK + Android SDK Go Version Kotlin @@ -15,36 +15,43 @@ --- -MyCollages (2) +MyCollages (1) ## Возможности 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-порты. -- **Парольная модель доступа:** сервер поддерживает главный пароль, одноразовые/срочные пароли, привязку пароля к устройству и управление через Telegram-бота. +- **Парольная модель доступа:** сервер поддерживает главный пароль, до 10 активных пользовательских паролей, 16-символьную генерацию, привязку пароля к устройству, истечение срока и управление через Telegram-бота. +- **Горячее обновление WRAP-ключей:** создание, удаление и истечение паролей обновляют набор WRAP-ключей на сервере без перезапуска ядра. - **Исключения приложений:** можно выбрать, какие приложения идут через туннель, а какие работают напрямую. Поддерживаются режимы ЧС и БС, а изменения применяются перезагрузкой WireGuard без полного перенастраивания. -- **Капча VK Smart Captcha:** основной рабочий режим в текущей Android-сборке — `WBV/WebView` с ручным решением или автоматической попыткой для простых сценариев. RJS-логика есть в Go-ядре, но в UI текущей сборки временно отключена. -- **Живой лог-вьюер:** события Go-клиента, DTLS, 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, показывает диалог обновления и позволяет перейти на страницу актуального релиза. +- **Автообновления:** приложение проверяет GitHub releases, показывает диалог обновления и периодически повторяет проверку в фоне. -## Что нового в версии 1.1.0 +## Что нового в версии 1.1.8 > [!IMPORTANT] -> После обновления до **1.1.0** необходимо заново выполнить **деплой сервера** из приложения. +> Если сервер уже деплоился под актуальный WRAP/RTP AEAD протокол из ветки `1.1.7+`, повторный деплой для **1.1.8** не нужен. Если вы обновляетесь со старой серверной версии без password-based WRAP и RTP AEAD, выполните деплой сервера заново. -* **Изоляция WDTT:** деплой, удаление и рабочая среда **WDTT** теперь не должны влиять на другие компоненты VPS. Серверная часть изолирована в собственной конфигурации, интерфейсе и правилах firewall/NAT. -* **Автообновление:** помимо ручной проверки, приложение теперь самостоятельно проверяет наличие новых версий и предлагает обновиться до актуального релиза. -* **Ручные порты:** добавлена возможность управлять портами. При включении режима ручных портов можно задать **DTLS** и **WG** порты на сервере, а также локальный VPN-порт в туннеле. Если это не нужно, режим лучше не включать. -* **Капча:** возвращён режим **Авто-WBV** для прохождения капчи **«Я не робот»**. Режим **RJS** временно заблокирован до следующих улучшений. Если с **Авто-WBV** возникают проблемы, используйте ручной режим. -* **Разделение архитектур:** релизы теперь делятся на **arm64-v8a**, **armeabi-v7a** и **x86_64**, чтобы уменьшить размер APK. Если вы не знаете, какой APK выбрать, используйте **Universal** — он содержит все 3 архитектуры, но весит больше. -* **Сборка:** обновлены **AGP**, **Gradle** и **Kotlin** до актуальных версий (`9.0.1`, `9.1.0`, `2.x`), что положительно влияет на стабильность и работу приложения. -* **Багфиксы и стабильность:** удалён **DataSync**, который мог вызывать краши на **Android 14+**; изменено поведение уведомления, чтобы оно не скакало в шторке; улучшен запуск **VPN Service** и передача WireGuard-конфига. -* **Интерфейс и информация:** проведён небольшой редизайн, добавлены тени и орбы на фон. Раздел **«Инфо»** переработан и теперь позволяет собрать отчёт с данными об устройстве для более точного разбора ошибок. -* **В планах:** заменить стандартный протокол **WireGuard** на **AmneziaWG** в версиях `1.5-2.0`, чтобы лучше решать проблемы региональных блокировок. -* **Откат при проблемах:** если после обновления появились ошибки, которых раньше точно не было, можно открыть `issue` и временно откатиться на версию **1.0.6**. +* **VK Auth:** переход с 5 `client_id` на 2 проверенных `client_id`: `6287487` и `8202606`. Клиент сначала использует `6287487`, затем `8202606`, после чего повторяет fallback-цикл. +* **Стабильность VK API:** удалены проблемные `client_id`, из-за которых могло появляться `Unknown method passed` для `calls.getAnonymousToken`. +* **DNS:** добавлен fallback на системный провайдерский DNS, если наблюдаются проблемы с Yandex DNS `77.88.8.8` / `77.88.8.1`. +* **VK Join Link:** исправлена обработка полных ссылок VK Call Join, чтобы вместо корректного хеша в запрос не попадало значение вроде `https:`. +* **WRAP/DTLS:** исправлен ложный стоп с сообщением **«Неверный пароль подключения»**, когда один поток ловил DTLS timeout, но остальные потоки уже были активны. +* **WRAP-ключи:** захардкоженный WRAP-ключ заменён на HKDF-деривацию из пароля подключения. Сервер держит активные ключи в памяти и обновляет их при изменении паролей. +* **Обфускация:** добавлен RTP-over-ChaCha20-Poly1305 AEAD слой, маскирующий внешний транспорт под WebRTC аудиопоток. +* **Диспетчер:** переход с Round-Robin на Adaptive Chunking в single-flow режиме с сохранением высокой агрегатной скорости multi-flow. +* **Потоки и хеши:** добавлена поддержка 4-го хеша VK-звонка; при 4 хешах доступно до 108 потоков. Исправлен баг слайдера потоков. +* **Капча:** режим прохождения стал автоматическим: сначала Go v2, затем Auto WebView, затем финальная Go-попытка и только после этого ручной WebView. +* **Автообновление:** исправлена проверка обновлений, которая раньше могла выполняться только один раз при старте приложения. +* **Keepalive:** добавлен DTLS keepalive для длительных сессий, чтобы снизить вероятность `reader EOF`. --- @@ -52,28 +59,29 @@ ```text Android-приложение → VpnService / WireGuard GoBackend → локальный UDP 127.0.0.1:9000 - → Go-клиент WDTT → VK TURN / DTLS → wdtt-server на VPS → интернет + → Go-клиент WDTT → WRAP RTP AEAD → VK TURN / DTLS → wdtt-server на VPS → интернет ``` -1. Приложение запускает нативный Go-клиент `libclient.so` и передаёт ему адрес VPS, VK-хеши звонка, пароль туннеля, протокол TURN и количество потоков. -2. Go-клиент получает TURN-учётные данные через VK-звонок, при необходимости решает VK Smart Captcha и устанавливает DTLS-соединения через TURN relay. -3. Первый рабочий канал запрашивает у VPS WireGuard-конфигурацию через `GETCONF`, передавая локальный порт, `device-id` и пароль подключения. -4. Сервер проверяет пароль: главный пароль работает как владелец, сгенерированные пароли могут иметь срок действия и привязываются к первому устройству. -5. Android-часть парсит полученный WireGuard-конфиг, поднимает системный VPN-туннель и применяет исключения приложений. -6. Watchdog следит за Go-процессом, активными воркерами и сетевыми изменениями, перезапуская транспорт при сбоях. +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` со **[страницы релизов](https://github.com/amurcanov/proxy-turn-vk-android/releases)**. 2. Установите приложение на Android-смартфон. -3. Подготовьте VPS с root-доступом или пользователем с `sudo`. -4. В VK создайте или откройте групповой звонок и скопируйте ссылку вида `vk.com/call/join/xxxxxxxxxxx`. +3. Подготовьте айпи, логин, пароль от имеющегося VPS. +4. В VK создайте или откройте групповой звонок и скопируйте ссылку вида `vk.com/call/join/xxxxxxxxxxx`. где xxxxxxxxxxx ваш хеш, или просто вставьте ссылку. 5. Откройте **WDTT** и перейдите во вкладку **«Деплой»**. 6. Введите IP/домен VPS, SSH-логин, пароль и SSH-порт. -7. В **«Секретах»** задайте пароль туннеля. При необходимости добавьте Telegram `admin_id` и `bot_token` для управления паролями. +7. В **«Секретах»** задайте главный пароль туннеля. При необходимости добавьте Telegram `admin_id` / `bot_token` для управления доступом. 8. Нажмите **«Установить»** и дождитесь завершения деплоя. -9. Во вкладке **«Туннель»** укажите IP/домен сервера, VK-хеши, пароль туннеля и количество потоков. -10. Нажмите **«Подключить»** и выдайте Android-разрешение на VPN. +9. Во вкладке **«Туннель»** укажите IP/домен сервера, VK-хеши, пароль подключения и количество потоков. +10. Нажмите **«Подключить»** предварительно выдав все необходимые разрешения приложению. --- @@ -86,8 +94,8 @@ VK → группа → звонок → ссылка приглашения → 1. Откройте VK и создайте пустую группу или используйте существующую. 2. Начните групповой звонок. 3. Скопируйте ссылку приглашения. -4. Вставьте в WDTT всю ссылку или только хеш после последнего слэша. -5. Можно использовать до **3 хешей** одновременно для распределения нагрузки и увеличения доступного числа потоков. +4. Вставьте в WDTT всю ссылку или только хеш после `/join/`. +5. Можно использовать до **4 хешей** одновременно для распределения нагрузки и увеличения доступного числа потоков. > [!IMPORTANT] > При выходе из звонка нажимайте **«Просто завершить»**, а не **«Завершить для всех»**. Если закрыть комнату для всех участников, хеш перестанет работать. @@ -115,9 +123,11 @@ Android → SSH → /tmp/deploy.sh + /tmp/wdtt-server → /usr/local/bin/wdtt-se WDTT-сервер поддерживает две модели подключения: - **Главный пароль:** задаётся при деплое и используется владельцем сервера. -- **Сгенерированные пароли:** создаются через Telegram-бота командой `/new`, имеют срок действия и привязываются к первому устройству. +- **Сгенерированные пароли:** создаются при деплое или через Telegram-бота, имеют срок действия, привязываются к первому устройству и обновляют WRAP-ключи на сервере без перезапуска. -Команда `/list` показывает активные пароли и устройства. Через inline-кнопки можно отвязать устройство или удалить пароль. +Один сервер может держать до **10 активных паролей**. Новые пароли генерируются длиной **16 символов**. + +Команда `/list` показывает активные пароли и устройства. Через inline-кнопки можно отвязать устройство или удалить пароль. При удалении или истечении пароля соответствующий WRAP-ключ удаляется из памяти сервера. --- @@ -127,13 +137,20 @@ WDTT-сервер поддерживает две модели подключе Вкладка **«Исключ.»** показывает установленные приложения с поиском. В режиме ЧС выбранные приложения исключаются из VPN, а в режиме БС логика инвертируется: неотмеченные приложения добавляются в туннель. Само приложение WDTT и VK-клиенты исключаются автоматически, чтобы не ломать TURN-соединение. +#### Капча + +По умолчанию включён режим **«Авто капча»**. Оркестратор делает до двух попыток Go v2-решателя, затем две попытки Auto WebView с коротким таймаутом, затем финальную Go-попытку. Если всё это не помогло, приложение открывает ручной WebView. Авто-режим можно отключить, тогда в UI появляются ручные настройки метода и режима прохождения. + #### Логирование -Вкладка **«Логи»** показывает статус получения VK-учётных данных, решение капчи, DTLS-handshake, готовность WireGuard, статистику активных воркеров и ошибки. Повторяющиеся строки схлопываются в одну запись со счётчиком. +Вкладка **«Логи»** показывает статус получения VK-учётных данных, решение капчи, DTLS-handshake, WRAP-состояние, готовность WireGuard, статистику активных воркеров и ошибки. Повторяющиеся строки схлопываются в одну запись со счётчиком. + +> [!NOTE] +> Если видны DTLS handshake, но `Активных: 0`, чаще всего указан неправильный пароль подключения или используется сервер без актуального WRAP-протокола. Если часть потоков уже активна, одиночные DTLS timeout больше не считаются неверным паролем и не останавливают туннель. #### Обновления -Приложение проверяет **GitHub releases** репозитория [amurcanov/proxy-turn-vk-android](https://github.com/amurcanov/proxy-turn-vk-android), умеет показывать диалог новой версии и открывать страницу релиза в браузере. +Приложение проверяет **GitHub releases** репозитория [amurcanov/proxy-turn-vk-android](https://github.com/amurcanov/proxy-turn-vk-android), умеет показывать диалог новой версии и открывать страницу релиза в браузере. Проверка выполняется при запуске и периодически в фоне. #### Отчёт для issue @@ -143,7 +160,7 @@ WDTT-сервер поддерживает две модели подключе > [!NOTE] > ### Отчёты об ошибках -> WDTT зависит от мобильной сети, Android-ограничений фоновой работы, состояния VK-звонка, TURN-квот и настроек VPS. +> WDTT зависит от мобильной сети, Android-ограничений фоновой работы, состояния VK-звонка, TURN-квот, DNS и настроек VPS. > > Если возникла проблема, приложите к `issue` отчёт из раздела **«Информация»**, скриншот вкладки **«Логи»**, версию APK, ABI сборки и описание сети. Мелкие повторяющиеся ошибки в логах не всегда означают поломку, если туннель остаётся активным.