Текущая версия: 2.5.0. Демонстрационные скриншоты соответствуют этой версии.
Клиенты, подписки и VPN-инфраструктура — в одной панели.
Веб-интерфейс и Telegram-бот для управления собственным сервером и кластером узлов.
Что изменил в 2.5.0. Снимки сделаны в настоящем интерфейсе на демонстрационных данных: адреса и клиенты вымышлены, секреты не используются. Как обновить скриншоты.
Обзор системы: нагрузка, трафик, текущий маршрут и состояние служб.
Клиенты: группы, активность, сроки подписок и лимиты трафика.
Узлы, WARP, SNI, субадминистраторы, Telegram и тёмная тема
Узлы: текущий выход, резервирование и приоритеты.
WARP: сервисы через отдельный выход и проверка региона Google для Gemini.
Reality: подбор SNI и target по базовым проверкам совместимости.
Субадминистраторы: отдельные права и выбор видимости клиентов.
Telegram: настройки бота и предпросмотр меню.
Тёмная тема: тот же интерфейс с сохранённой навигацией и функциями.
| Направление | Что доступно |
|---|---|
| Протоколы | VLESS Reality, VLESS XHTTP, Hysteria 2, AmneziaWG |
| Клиенты | Несколько профилей, включение и отключение доступа, QR-коды и ссылки подписок |
| Подписки | Срок действия, продление, месячный трафик и отдельный лимит CDN |
| Кластер | Управление узлами, выбор выхода и переключение на резервный узел |
| Маршруты | Прямое подключение, блокировка, прокси и WARP; настройка DNS |
| Telegram | Создание подписок, управление профилями, личный кабинет и уведомления |
| Наблюдение | Статистика, журнал событий, история доступности и диагностика |
| Администрирование | Двухфакторная аутентификация, резервные копии и восстановление |
AmneziaWG использует выбранный выход через TUN Xray. Подписки включают разрешённые протоколы; AmneziaWG выдаётся отдельным .conf-файлом. Совместимость зависит от приложения и его версии.
Проверенные установкой и удалением системы: Ubuntu 22.04, Ubuntu 24.04 и Debian 12, amd64. Для arm64 предусмотрены загрузки upstream, но полный цикл установки пока не проверен. Alpine не поддерживается: установщик использует APT и systemd. Рекомендуется отдельный VPS от 1 CPU, 2 ГБ RAM и 10 ГБ диска; требования к трафику зависят от количества клиентов.
Быстрый запуск на чистом сервере:
curl -fsSL https://raw.githubusercontent.com/tro9n4ik/md-next/main/scripts/bootstrap.sh | sudo bashРепозиторий публичный, авторизация GitHub для скачивания не нужна. Установщик выполняется с правами администратора; перед запуском можно скачать и просмотреть скрипт. Для воспроизводимости выбирайте проверенный коммит вместо main при клонировании.
Нужен виртуальный сервер Linux с правами администратора, основной домен и поддомен панели. Установщик предназначен для Ubuntu/Debian; совместимость системных компонентов зависит от версии ОС и ядра. Сначала направьте A-записи обоих доменов на сервер и обеспечьте доступ для выпуска TLS-сертификатов.
git clone https://github.com/tro9n4ik/md-next.git
cd md-next
sudo bash scripts/install.shВ меню выберите установку. Скрипт запросит домены и электронную почту для Let's Encrypt, настроит службы и покажет пароль администратора. Сохраните пароль в надёжном месте. Для обновления откройте Настройки → Обновление панели: выбранная сборка устанавливается после проверок GitHub, с резервной копией и автоматическим откатом при ошибке. Подробности — в руководстве по обновлению.
Дочерние узлы подключаются по одноразовому приглашению из панели. Команда scripts/join-node.sh выполняется на сервере узла; URL приглашения содержит секрет и не должен публиковаться.
На странице «Узлы» оставил текущий выход, проверку IP и адаптивный список нод. Подключение открываю кнопкой «Добавить ноду»; схему и прямой выход, автопереключение и одноразовые приглашения разместил в раскрываемых блоках. Кнопку сохранения резервирования перенёс к его настройкам.
В блоке «Одноразовые приглашения» кнопка «Очистить историю» удаляет использованные, отозванные и истёкшие приглашения после подтверждения. Действующие приглашения и подключённые ноды сохраняются. Очистка доступна только администратору и не меняет конфигурацию Xray.
Создайте бота через BotFather, укажите его токен и числовой Telegram ID администратора в панели. Отправьте /start: дальнейшие действия доступны кнопками. /menu восстанавливает главный экран.
- Новая подписка — имя, проверка условий и подтверждение. По умолчанию предлагаются месяц и безлимитный трафик; условия и контакты можно изменить перед созданием или выбрать готовый шаблон.
- Подписки — единый список с поиском, продление, срок, общий лимит и лимит обхода БС, контакты, профили и выдача доступа.
- Система — состояние, подтверждаемая смена ноды, диагностика и события.
- Клиентский кабинет — привязка обычным вводом кода, только своя подписка, оба счётчика трафика, подключение и инструкции.
Бот работает через активную выходную ноду и следует за её переключением. Настройки уведомлений находятся в Настройки → Telegram-бот.
Меню, поиск, создание подписки, диагностика и уведомления используют один рабочий экран. События доступны внутри меню; во время ввода и подтверждений доставка ожидает. Обработанные команды и значения убираются из личного чата. Ссылка и QR-код открываются на странице подключения, файлы скачиваются только по кнопке и убираются при следующем переходе по меню. Идентификатор меню сохраняется после перезапуска.
Старые известные карточки бот пытается убрать при открытии меню, но Telegram ограничивает удаление сообщений старше 48 часов. Неизвестную старую историю бот не перебирает. Редактирование существующего сообщения не вызывает нового звукового уведомления Telegram; полная история событий доступна в панели. Подробный справочник бота.
В Клиенты → Настроить доступ включите Блокировка рекламы (AdBlock) для нужного клиента и сохраните доступ. По умолчанию она выключена. Xray блокирует рекламные домены из geosite:category-ads-all до правил выхода через ноды и WARP; AmneziaWG определяется по внутреннему IP клиента. Нужен файл geosite.dat из установки Xray.
В Happ обновите подписку, чтобы получить правило и для прямого трафика. Фильтрация не убирает рекламу с того же домена, что и основной контент; правила в других приложениях для прямого трафика настраиваются отдельно.
sudo bash scripts/backup.sh
sudo bash scripts/backup.sh --listПо умолчанию сохраняются последние 7 архивов в /var/backups/md-next. Копия содержит базу, .env и конфигурации с приватными ключами — храните её отдельно от репозитория.
Новая установка запускает backend от пользователя md-next. Системные операции выполняет отдельный root-помощник с фиксированным набором команд. Код приложения принадлежит root и недоступен backend для записи. Старые установки до 2.4.15 могут продолжать работать от root; обновление переводит их на новую схему. Приложение всё ещё хранит данные подключения и обращается к привилегированному помощнику, поэтому защита API и обновлений остаётся обязательной. Текущие меры и границы проверки описаны в отчёте аудита.
Используйте уникальный пароль и включите 2FA. Управляющие API требуют авторизации. Не открывайте локальные SOCKS5-прокси и внутренние API в интернет. Секреты хранятся в серверном .env; пример переменных содержит только шаблон конфигурации.
Дополнительная защита Nginx, Fail2ban и наблюдение за сканерами описаны в руководстве по защите входного сервера. Эти меры не гарантируют устойчивость к любой блокировке.
backend/ Сервер: FastAPI, база данных, миграции, Telegram-бот
frontend/ React, TypeScript, интерфейс панели
scripts/ Установка, обновление, маршрутизация и резервные копии
docs/ Руководства и ресурсы проекта
Для сборки интерфейса: cd frontend && npm ci && npm run build. Для серверной части используйте виртуальное окружение и backend/requirements.txt; перед запуском примените миграции командой alembic upgrade head. Исходники, миграции и файлы зависимостей входят в репозиторий; локальные базы, сборки и окружения исключены.
Часть сетевых функций пока проверена только автоматически или в лабораторных условиях. Работа всех протоколов во всех VPN-приложениях, CDN в ограниченной сети и полный цикл автоматического отката не гарантируются без отдельных проверок. Текущее состояние и план приведены в списке проверок выпуска.
Проект распространяется под MIT. Доступен перевод лицензии на русский.
Xray и AmneziaWG сохраняют собственные лицензии; см. уведомления о сторонних компонентах. Готовые бинарники этих компонентов в репозитории не поставляются.
MD-Next предназначен для управления собственными серверами или серверами, на использование которых у вас есть разрешение. Пользователь отвечает за соблюдение применимых законов и правил провайдера.
Обновления зависимостей проверяет Dependabot каждую неделю: Python, npm и GitHub Actions. Перед выпуском CI сверяет номер версии, README, CHANGELOG и манифест скриншотов. При смене версии обновите скриншоты и их SHA-256 в docs/assets/screenshots.json, затем запустите python scripts/check-release-consistency.py.
В списке «Готовые правила для сервисов» доступен пресет Hill Climb Racing 2. Он направляет fingersoft.com, fingersoft.net, playhcr.com и их поддомены через WARP активной ноды. Включите WARP и переключатель игры, затем перезапустите игру. Общие домены сторонних служб входа, рекламы и CDN пресет не перенаправляет; при подключениях игры напрямую по IP или к другим доменам могут потребоваться дополнительные правила по фактическим журналам. Правила также охватывают другие сервисы Fingersoft на этих доменах.
В разделе WARP доступен общий режим «Только IPv4», сохраняющийся при переключении ноды, и кнопка «Сменить IP». Кнопка переподключает WARP активной ноды и сравнивает старый и новый адрес; Cloudflare может оставить прежний IP. Регистрация и лицензия не удаляются. Смена адреса не гарантирует доступность Gemini и других сервисов.
На этой же странице добавил «Автопроверку Gemini» (по умолчанию выключена) и кнопку «Проверить Gemini». При включённом WARP проверка каждые пять минут обращается к веб-странице Gemini через WARP активной ноды. После двух явных региональных отказов подряд переподключаю WARP и повторяю проверку. Между попытками выдерживаю минимум 30 минут, допускаю не более трёх за шесть часов для каждой ноды. Лимиты храню в базе, поэтому перезапуск панели или выключение и включение автоматики не сбрасывает бюджет. Ручная проверка не переподключает WARP.
Для пользовательского трафика Gemini включите его пресет либо режим WARP для всего трафика: монитор проверяет выход WARP, но не меняет ваши маршруты. Проверка выполняется без аккаунта Google и API-ключа: открытие страницы не подтверждает возможность генерации, а региональный отказ не указывает конкретную страну. Страна рядом с IP взята из Cloudflare и может отличаться от оценки Google. CAPTCHA, запрос входа, ошибки сети и неизвестные ответы не запускают смену IP. Для переподключения нужен служебный обработчик на ноде; основной IP VPS остаётся прежним, новый IP WARP не гарантируется. Соединения через WARP могут прерываться.
Новые ноды получают служебный обработчик автоматически при установке WARP. На ранее подключённых нодах администратор устанавливает scripts/warp-node-control.py командой --install, передав NODE_SECRET из защищённой конфигурации ноды. Секрет нельзя публиковать. Обработчик слушает только 127.0.0.1:40002; управление идёт через защищённый канал ноды. Порт 40000 — IPv4, 40001 — обычный WARP. Для сохранения IPv4 при failover обработчик нужен на всех включённых нодах.
На странице «Клиенты» можно фильтровать список по группам «Друзья», «Коллеги», «Клиенты» и «Без группы». Администратор создаёт свои группы кнопкой «Новая группа», меняет название и цвет через настройки карточки группы. Группа выбирается при создании клиента или в его строке. Удаление группы перемещает клиентов в «Без группы», сохраняя подписки, профили, сроки и лимиты.
Субадминистратору доступны группы и счётчики только видимых ему клиентов; названия групп общие для панели. Право выдачи подписок разрешает менять группу собственных клиентов. Просмотр всех клиентов не даёт права менять чужие группы. Создание, переименование и удаление групп доступны только администратору.
«Онлайн» означает трафик за последние три минуты. «Был онлайн» сопровождается точной датой и временем последнего замеченного трафика в часовом поясе устройства. Дата хранится в базе и переживает перезапуск панели. При отсутствии текущей телеметрии отображается «Нет данных», а сохранённая прошлая активность остаётся видимой. У ранее созданных клиентов дата появится после первого нового трафика; исторические значения не выдумываются. Сбор выполняется раз в минуту и не определяет точное время разрыва соединения.
При обновлении применяется миграция 0018_client_groups. При ручном обновлении выполните alembic upgrade head перед запуском новой версии backend.
В Настройки → Субадминистраторы администратор создаёт отдельные учётные записи. Тумблер «Создание и выдача подписок» разрешает создавать клиентов и получать ссылки подписки, QR-коды и файлы конфигурации видимых клиентов. Он включён по умолчанию, в том числе у существующих субадминистраторов после обновления. При выключении остаётся просмотр списка клиентов; уже выданные клиентам ссылки продолжают работать.
Тумблер «Удаление своих подписок» разрешает удалять только клиентов, созданных этим субадминистратором, вместе с их профилями. По умолчанию выключен; не зависит от права выдачи и не разрешает удалять чужих клиентов даже при просмотре всех клиентов. Изменение любого разрешения отзывает сеансы учётной записи — потребуется войти заново.
Добавил тумблер «Приостановка своих подписок»: он разрешает приостанавливать и возобновлять только созданных этой учётной записью клиентов. Сохраняю срок, лимиты, профили и ссылки; чужие подписки защищаю независимо от видимости всех клиентов. По умолчанию право выключено, в том числе у существующих субадминистраторов после обновления. Права выдачи и удаления на него не влияют. Создание учётки открываю кнопкой «Добавить субадминистратора», редактирование — кнопкой «Настроить» в строке учётки. Обе формы перенёс в боковую панель, чтобы настройки не дублировались в списке.
Субадминистраторы не получают доступа к настройкам панели, узлам, WARP, журналу, резервным копиям и обновлениям. Изменение условий и перевыпуск профилей остаются доступны только администратору.
Переключатель «Видит всех клиентов» задаётся отдельно для каждой учётной записи при создании или позднее. По умолчанию он выключен: доступны только созданные этой учётной записью клиенты. При включении можно просматривать всех клиентов; для выдачи их подключений требуется право «Создание и выдача подписок». Права редактирования не появляются. Ранее созданные клиенты и клиенты Telegram-бота не имеют владельца-субадминистратора и доступны в режиме просмотра всех.
Администратор может отключить учётную запись и задать новый пароль. Отключение, смена пароля и изменение видимости отзывают действующие сеансы; клиенты и их подписки сохраняются. В разделе «Моя учётная запись» субадминистратор меняет собственный пароль и настраивает 2FA. Права проверяются API; скрытое меню само по себе не является защитой. Переход между учётными записями очищает локальный кэш данных интерфейса.
Обновление применяет миграции 0015_subadmins и 0016_subscription_permissions: существующие пользователи сохраняют роль, действующие пароли и прежнее право выдачи; удаление для субадминистраторов требует явного разрешения. Существующие профили и ссылки клиентов не меняются. При ручном обновлении выполните alembic upgrade head из виртуального окружения backend до запуска новой версии.
В разделе «Протоколы → Общие параметры Reality → Подобрать SNI и target» добавил проверку до 12 публичных доменов на TCP 443. Проверяю с сервера панели напрямую: сертификат для домена, TLS 1.3, согласование h2 и HTTP-ответ 2xx без перенаправления (отдельным запросом HTTP/1.1). Предлагаемые домены — примеры для проверки, а не гарантированно подходящие назначения. Результаты сортирую по прохождению базовых проверок и времени TLS-соединения.
Кнопка «Выбрать» заполняет оба поля в черновике, сохраняя публичный адрес панели, ключи и short ID. Применение выполняю обычной кнопкой сохранения и подтверждением изменения клиентских ссылок. После смены SNI клиентам нужно обновить подписку. Сканирование не перезапускает Xray и не проверяет соединение с устройства, фильтрацию у провайдера, географическую близость, OCSP или незаметность трафика.
В проверку WARP добавил независимый запрос к странице входа Google с извлечением скрытого поля region — по идее lookup_google из vernette/ipregion. Оба запроса выполняю без аккаунта через тот же временный SOCKS-выход WARP активной ноды, без прямого fallback. Раздельно показываю регион Google, страну IP по Cloudflare и ответ Gemini. Поле Google недокументировано: при изменении разметки, CAPTCHA, ошибке или неоднозначном ответе возвращаю «не определён». Не использую список стран Gemini API как доказательство поддержки веб-версии Gemini.
При включённом мониторинге два последовательных сигнала RU от Google либо два явных региональных отказа Gemini запускают существующее ограниченное переподключение WARP. Разные типы сигналов не складываю в два подтверждения. Сохранил паузу 30 минут, лимит трёх попыток за шесть часов, защиту при смене ноды и повторную проверку после смены IP. Ручная проверка не меняет IP. Определение другого региона не подтверждает возможность генерации или регион Google-аккаунта.
Добавил необязательный профиль Telegram MTProto с FakeTLS. В «Протоколы → Telegram» укажите свободный TCP-порт (по умолчанию 8445) и доступный HTTPS-домен, выберите активную ноду и включите канал. При первом включении с действующими клиентами установлю закреплённую версию dolonet/mtg-multi 1.13.0 с проверкой SHA256. Пока канал выключен, бинарник не скачиваю и прокси не запускаю.
Для каждого клиента создаю отдельный зашифрованный секрет. Ссылку tg://proxy и QR-код выдаю в карточке клиента и на личной странице подписки. В обычную VPN-подписку MTProto не включаю: его нужно открыть непосредственно в Telegram. Срок и приостановка подписки, отключение профиля и общие лимиты действуют и на этот доступ. Перевыпуск секрета доступен администратору.
Путь соединения: Telegram → MTProto на сервере панели → отдельный SOCKS-вход Xray → выбранная выходная нода → Telegram. При отсутствии ноды блокирую этот путь без прямого выхода через IP панели. Установка или обновление компонентов на нодах не требуется. Внешний файрвол хостинга и файрвол сервера должны разрешать выбранный TCP-порт панели; порт 443 оставляю существующим протоколам.
Подробности установки, отзыва, статистики и ограничений описал в руководстве MTProto. На рабочем VPS подключение ещё нужно проверить из приложения Telegram; работа в конкретной ограниченной сети не гарантирована.







