discover · compare · collections · requirements · contribute · feed · watching · stats · help with your tokens
lebrit/wdtt-control-panel · source
Snapshot 0 · 2026-11-04T12:47:28Z · Python ·
Content fingerprint
80356627f61727429a2311d6ef7b63918f12bd1a64922b7c2715c8cef829b4f1GitHub description at capture
Web control panel and one-command installer for WDTT VPN server
README at capture
# WDTT Control Panel **Текущая версия: 0.13.0** ### Исправления 0.13.0 - Административные операции выполняет root-helper через локальный сокет systemd (0660, root:wdtt-panel). Web-служба сохраняет NoNewPrivileges и ProtectSystem=strict. Telegram, очистка и запись unit-файлов работают независимо от её ограничений. - GeoFiles до 128 МиБ; Xray скачивает их потоково и сохраняет атомарно. - Подсеть WG определяется по интерфейсу wdtt0; стандартная сеть qWDTT — 10.66.0.0/16. Старое значение 10.66.66.0/24 исправляется при загрузке настроек. После обновления сохраните настройки шлюза/каскада для применения исправленных правил. - Кнопка «Сохранить срок journal» задаёт MaxRetentionSec для всех журналов systemd сервера. «Оценить» и «Очистить» остаются отдельными операциями. - Установщик проверяет свободное место и inode до изменения файлов; для сборки WDTT требуется не менее 2 ГиБ. - HTTP-запросы вне секретного пути получают 404, ACME и персональные ссылки продолжают работать. - Расширение v10 поднимает предел паролей до 65023, по размеру адресного пула WDTT. Это не гарантия одновременных подключений: вместимость зависит от ресурсов сервера. Без успешно установленного расширения сохраняется предел 10; массовое создание ограничено 100 пользователями за запрос. - Во вкладке Xray доступны создание, копирование и удаление VLESS + TLS профилей для sing-box и других VLESS-клиентов. Нужны установленный Xray, Managed-режим и доверенный сертификат панели. Внешний firewall провайдера должен разрешать выбранный TCP-порт (по умолчанию 8444). Отдельная web-панель для [SpaceNeuroX/proxy-turn-vk-android](https://github.com/SpaceNeuroX/proxy-turn-vk-android). При установке и обновлении она автоматически собирает совместимое расширение WDTT с резервной копией прежнего бинарника; по умолчанию используется серверная часть релиза `v1.4.3` с совместимым TUN fallback для WireGuard и RAW. Метки Telegram, сроки, квоты и учёт трафика всех пользователей сохраняются при обновлении. Если сборка временно не удалась или проверка базы выявила потерю данных, прежний бинарник и база автоматически восстанавливаются. ## Возможности - создание, изменение, деактивация и удаление WDTT-пользователей; расширение v10 увеличивает предел до 65023; - авто-создание пользователя по одной метке: пароль генерируется, срок один календарный месяц, 35 ГиБ трафика, VK-хеш берется из библиотеки; - календарные сроки и пресеты на 1, 2, 3, 6 и 12 месяцев, основной и дополнительный пакеты трафика, безопасное продление и повторная активация; - персональная HTTPS-страница пользователя с остатком трафика, сроком и готовой подпиской qWDTT без раскрытия адреса административной панели; - массовое создание пользователей с автоматическими паролями и назначением VK-хешей всем или по кругу; - библиотека VK-хешей с импортом и экспортом JSON для переноса между серверами и панелями; - срок действия, бессрочный доступ, до четырех VK-хешей и отдельные порты; - просмотр привязанного устройства, внутреннего IP, подключения пользователя и администратора с мягким статусом недавней активности; - накопительная статистика трафика пользователей для Android-клиента: текущий счётчик WDTT, сегодня и всё время с момента обновления панели; - генерация совместимых `wdtt://` ссылок; - dashboard: соединения, NAT, uptime, трафик, CPU, RAM, диск, пользователи и устройства; - журнал `wdtt.service` с фильтрацией; - полная диагностика журналов WDTT, Xray/WARP, каскада, панели, Nginx и установщика: выбор источника, до 5000 строк и выгрузка в файл; - безопасная очистка журналов и системного мусора: журналы служб, systemd journal с хранением последних дней, кэш пакетов Ubuntu/Linux и failed-units без удаления пользователей, backup, сертификатов и настроек; недоступные read-only логи пропускаются без остановки всей очистки, а результат показывает сколько было, освобождено и осталось; - start/stop/restart WDTT, состояние службы, IP forwarding и бинарника; - автоматические резервные копии `passwords.json` перед каждым изменением; - полные и пользовательские backup с загрузкой на компьютер, восстановлением, удалением и расписанием автоматических копий; - восстановление резервной копии и журнал действий администратора; - случайный URL панели вместо стандартного пути; - автоматический HTTPS для домена и публичного IPv4; - автоматическое продление Let's Encrypt и self-signed сертификатов; - интерактивное меню установки, обновления, отката к сохранённым тегам GitHub, статуса, сертификатов и удаления; - быстрые команды обновления и удаления из GitHub; - отображение текущей и новой версии с обновлением прямо из web-панели; - настройка Telegram-бота WDTT при установке и из web-панели: Bot Token, Admin ID, включение/отключение и тестовое сообщение; - мобильный `/api/v1` для Android-клиента: password login, bearer-токены, обзор, пользователи, логи и сервисные действия; - qWDTT-подписка `/api/v1/qwdtt/subscription` для экспорта профилей пользователей в совместимый HTTPS JSON; - отдельный Xray Core с управляемой и полной Raw JSON-конфигурацией без изменения исходного WDTT; - компактная настройка Xray без JSON: VLESS‑маршруты и правила открываются в отдельных окнах; есть редактирование, порядок приоритета и готовые наборы WARP для AI, видео, соцсетей и музыки; - свёрнутый экспертный редактор входящих, нестандартных исходящих и JSON‑правил Xray с шаблонами VLESS, VMess, Trojan, Shadowsocks, SOCKS, HTTP и WireGuard; - стандартные GeoIP/GeoSite и собственные GeoFiles из HTTPS-источников; - ручное и автоматическое обновление GeoFiles через systemd-таймер; - российские GeoFiles из `runetfreedom/russia-v2ray-rules-dat`: `geosite:ru-blocked` и `geoip:ru-blocked` для маршрутизации заблокированных в РФ ресурсов; - автоматический Cloudflare WARP: установка `wgcf`, создание, перезапуск и пересоздание профиля с добавлением WireGuard-исходящего в Xray; - прозрачный каскад RU → EU: трафик сети WDTT перехватывается Xray, а категории российских блокировок направляются в указанный EU-VLESS; - установка на пустой сервер или поверх уже развернутого WDTT. ## GeoFiles, WARP и каскад RU → EU По умолчанию панель получает `geoip.dat` и `geosite.dat` по HTTPS из [runetfreedom/russia-v2ray-rules-dat](https://github.com/runetfreedom/russia-v2ray-rules-dat) и проверяет обновления каждые шесть часов. В этих файлах доступны, в частности, `geoip:ru-blocked`, `geoip:ru-blocked-community`, `geoip:re-filter`, `geosite:ru-blocked`, `geosite:ru-blocked-all` и категории из domain-list-community. Для обычного каскада используйте `ru-blocked`: более широкий `ru-blocked-all` содержит сотни тысяч доменов и может давать лишнюю маршрутизацию. Вкладка **Xray** позволяет установить `wgcf`, создать Cloudflare WARP-профиль и автоматически добавить исходящий `warp` в Managed-конфигурацию Xray. WARP использует встроенный userspace‑TUN Xray и не создаёт системный интерфейс или маршруты хоста. Кнопка **Пинг WARP** запускает изолированную временную проверку через этот профиль, показывает задержку, IP выхода и подтверждение Cloudflare `warp=on`; при ошибке TLS пробует альтернативный адрес Trace и HTTP-проверку. WARP остаётся обычным исходящим: его можно выбрать в правилах маршрутизации Xray. На сервере, где WDTT уже расположен в нужной стране, включите **«Направлять трафик WDTT в Xray»**. Защищённый TPROXY-шлюз передаёт в Xray трафик заданной подсети WDTT, оставляя все сайты прямыми по умолчанию и применяя WARP/VLESS только к созданным правилам. Тогда журнал доменов и маршрутов показывает реальный домен и выбранный исходящий; журнал ошибок Xray помогает увидеть причину сбоя. Этот шлюз не включают одновременно с RU → EU каскадом: каскад использует свой шлюз. Каскад RU → EU требует установленный и включённый Xray в Managed-режиме. Укажите VLESS-ссылку EU-сервера, проверьте определённую подсеть WDTT (стандартно `10.66.0.0/16`) и включите каскад. Панель загрузит GeoFiles, добавит защищённый TPROXY-маршрут и направит `geosite:ru-blocked`, `geoip:ru-blocked`, а также заданные вручную домены и IP/CIDR через EU-VLESS; весь остальной трафик, включая обычные российские сайты, остаётся прямым через RU-сервер. В каскад попадает только трафик из указанной подсети WDTT, а его внутренний порт закрывается для внешних подключений. ## Совместимость Панель работает с форматом базы актуального WDTT: ```text /etc/wdtt/passwords.json /etc/wdtt/server.log systemd: wdtt.service binary: /usr/local/bin/wdtt-server ``` WDTT не предоставляет административный API и не перечитывает `passwords.json` на лету. Поэтому панель применяет изменения безопасной транзакцией: останавливает `wdtt.service`, создает backup, атомарно заменяет JSON и запускает сервис обратно. Обычно это занимает несколько секунд и разрывает текущие туннели. ## Быстрая установка ```bash curl -fsSL https://raw.githubusercontent.com/lebrit/wdtt-control-panel/main/bootstrap.sh | sudo bash ``` Откроется циклическое интерактивное меню установки, обновления, отката к сохранённым тегам GitHub, статуса, сертификатов и удаления. В мастере установки можно: 1. Указать домен, публичный IPv4 или включить автоматическое определение IPv4. 2. Задать логин, пароль, HTTPS-порт и секретный URL-путь. 3. Использовать уже установленный WDTT либо установить официальный WDTT на пустой сервер. 4. Получить Let's Encrypt сертификат или автоматически создать self-signed сертификат. 5. При желании сразу включить Telegram-бота WDTT через Bot Token и Admin ID. Для автоматизации тот же скрипт принимает `install`, `update`, `rollback`, `status`, `renew-cert`, `change-password`, `uninstall` и параметры `--domain`, `--ip`, `--user`, `--password`, `--email`, `--https-port`, `--path`, `--wdtt`, `--wdtt-password`, `--telegram-token`, `--telegram-admin-id`, `--version`, `--non-interactive`. Пример автоматической установки с доменом: ```bash curl -fsSL https://raw.githubusercontent.com/lebrit/wdtt-control-panel/main/bootstrap.sh | \ sudo bash -s -- install --domain panel.example.com \ --password 'Long-Random-Panel-Password' --non-interactive ``` Команды обслуживания: ```bash sudo wdtt-panel sudo wdtt-panel-status sudo wdtt-panel-update sudo wdtt-panel-uninstall sudo bash /opt/wdtt-panel/install.sh renew-cert sudo wdtt-panel change-password sudo wdtt-panel rollback --version v0.10.3 ``` Те же операции доступны через главное интерактивное меню. Обновление скачивает свежую версию с GitHub и сохраняет адрес, логин, пароль, случайный путь, сертификаты, аудит и резервные копии. Одноразовые команды без установленного локального wrapper: ```bash curl -fsSL https://raw.githubusercontent.com/lebrit/wdtt-control-panel/main/update.sh | sudo bash curl -fsSL https://raw.githubusercontent.com/lebrit/wdtt-control-panel/main/uninstall.sh | sudo bash ``` Удаление затрагивает только панель. WDTT, его пользователи и серверный бинарник не изменяются. Резервные копии остаются в `/var/lib/wdtt-panel-private/backups`. ## Сертификаты - Для домена используется Certbot и HTTP-01; A/AAAA запись должна указывать на сервер, TCP 80 должен быть доступен. - Перед запросом и продлением сертификата установщик автоматически открывает TCP 80 в UFW, firewalld или iptables. Если сертификат не получен, причина сохраняется в `/var/log/wdtt-panel-install.log`. - Если другой virtual host перехватывает ACME webroot, установщик на время останавливает Nginx и повторяет запрос в standalone-режиме Certbot, затем запускает Nginx обратно. - Для IPv4 используется Certbot 5.4+ и короткоживущий профиль Let's Encrypt. - Проверка и продление сертификата выполняются systemd-таймером каждые 12 часов. - Если публичный сертификат получить нельзя, установщик создает self-signed сертификат. Таймер повторно пытается получить доверенный сертификат, а self-signed автоматически заменяет до истечения срока. - HSTS включается только после получения Let's Encrypt. При self-signed сертификате браузер показывает предупреждение, пока сертификат не добавлен в доверенные, но не закрепляет его для домена. Let's Encrypt объявил публичную доступность IP-сертификатов 15 января 2026 года и поддержку в Certbot 5.4+ 11 марта 2026 года: - https://letsencrypt.org/2026/01/15/6day-and-ip-general-availability - https://letsencrypt.org/2026/03/11/shorter-certs-certbot ## Безопасность - web-процесс запускается от отдельного пользователя `wdtt-panel` и слушает только `127.0.0.1:8787`; - Nginx публикует только случайный путь, остальные URL возвращают `404`; - пароли панели хранятся как PBKDF2-HMAC-SHA256 с 600 000 итераций; - cookie имеет `Secure`, `HttpOnly`, `SameSite=Strict`; изменяющие запросы защищены CSRF; - root-доступ отделен в `/usr/local/sbin/wdtt-panel-admin`; sudo разрешает только этот helper без аргументов; - helper принимает JSON через stdin и поддерживает только фиксированный список операций; - каждое изменение базы предваряется резервной копией. Путь не заменяет аутентификацию, но уменьшает шум автоматических сканеров. Не публикуйте URL и пароль панели в открытых каналах. ## Проверка ```bash python3 -m unittest discover -s tests -v python3 -m compileall -q wdtt_panel bash -n bootstrap.sh install.sh update.sh uninstall.sh ``` ## Ограничения исходного WDTT - Исходный qWDTT ограничен 10 паролями; панель поднимает предел только вместе с успешно проверенным расширением v10. - Счетчики пользователя находятся в памяти и записываются в JSON только при некоторых операциях самого WDTT. Панель показывает сохраненные значения; незаписанная часть может потеряться при перезапуске. - Изменение главного пароля не реализовано: WDTT получает его из `ExecStart -password`, а затем переписывает значение в JSON при каждом старте. Для ротации главного пароля нужен осознанный повторный деплой или изменение unit-файла. - При установке и обновлении панели совместимое серверное расширение WDTT собирается отдельно от Android-приложения. Перед заменой бинарника сохраняются текущий `wdtt-server` и `/etc/wdtt/passwords.json`. После запуска панель проверяет, что главный пароль, пользователи и устройства не исчезли; при любой ошибке прежний бинарник и база возвращаются.