📱 QR-коды и подписки: как подключать клиентов за 30 секунд
- Получить ссылку
- X
- Электронная почта
- Другие приложения
В прошлой статье мы настроили Marzban и добавили первого клиента через панель. Но настоящая магия начинается, когда клиент получает доступ к своему VPN-профилю в один клик — без ручного ввода ключей, без копирования конфигов, без объяснений «скачай файл, открой приложение, импортируй...».
Сегодня мы разберём, как работает система подписок в
Marzban, как генерируются QR-коды и как сделать так, чтобы подключение к вашему
VPN занимало ровно 30 секунд.
🚀 Вместо введения: почему
подписки — это революция
Раньше для подключения к VPN нужно было:
- Получить
файл конфигурации от администратора
- Скачать
его на устройство
- Открыть
VPN-клиент
- Импортировать
файл вручную
- Проверить,
что всё работает
Если администратор менял сервер — процедура повторялась
заново. А если у клиента было три устройства? Умножьте всё на три.
Система подписок решает эту проблему раз и
навсегда. Клиент получает одну ссылку, которая автоматически
обновляется при любых изменениях на сервере. Добавили новый сервер? Клиент
просто нажимает «Обновить подписку» — и всё работает.
А QR-код — это тот же принцип, но ещё
проще. Клиент открывает приложение, сканирует код камерой — и туннель создаётся
автоматически. Никаких файлов, никаких настроек.
🧠 Часть 1. Как устроена
система подписок в Marzban
Архитектура подписки
Когда вы создаёте пользователя в Marzban, панель автоматически генерирует ссылку-подписку. Она выглядит так:
https://{XRAY_SUBSCRIPTION_URL_PREFIX}/{XRAY_SUBSCRIPTION_PATH}/{JWT_TOKEN}/{KEY}
Разберём каждую часть:
📋 Элементы ссылки-подписки в Marzban
| Элемент | Что это | Пример |
|---|---|---|
XRAY_SUBSCRIPTION_URL_PREFIX |
Домен для подписок | https://panel.example.com |
XRAY_SUBSCRIPTION_PATH |
Префикс пути (по умолчанию sub) |
sub |
JWT_TOKEN |
Токен аутентификации | eyJhbGciOiJIUzI1NiIs... |
KEY |
Дополнительные параметры | /info, /usage, /clash |
Таблица обновлена в рамках серии статей о WireGuard и Marzban
Полная ссылка выглядит так:
https://panel.example.com/sub/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.../info
💡 Важно: Ссылка-подписка
работает только по HTTPS. Если у вас нет SSL-сертификата, подписка
не будет работать. Именно поэтому мы настраивали Caddy для панели в прошлой
статье.
Что такое JWT-токен
JWT (JSON Web Token) — это закодированный
«паспорт» пользователя. Он содержит:
json
{
"sub": "username",
"access": "subscription",
"iat": 1621357861
}
- sub —
имя пользователя
- access —
уровень доступа (subscription)
- iat —
время выдачи токена
Токен генерируется автоматически каждый
раз, когда вы открываете страницу подписки. Его нельзя предустановить или
отредактировать — это гарантирует безопасность.
Что получает клиент
Когда клиент открывает ссылку-подписку в браузере, Marzban
показывает специальную страницу с:
- QR-кодом для
быстрого подключения
- Ссылками
для импорта в популярные приложения
- Инструкциями для
каждой платформы
- Информацией
о подписке: срок действия, использованный трафик, лимиты
Эта страница называется subscription page.
📊 Часть 2. Что умеет
стандартная страница подписки
Стандартная страница Marzban уже неплохо справляется со
своей задачей. Вот что она показывает:
📋 Функции стандартной страницы подписки
| Функция | Описание |
|---|---|
| QR-код | Автоматически сгенерированный код для сканирования |
| Ссылки для импорта | Deep links для iOS, Android, Windows, macOS |
| Инструкции | Пошаговые руководства для каждой ОС |
| Статистика | Использованный трафик, оставшиеся дни |
| Копирование | Кнопка для копирования ссылки в буфер обмена |
Таблица обновлена в рамках серии статей о WireGuard и Marzban
Но стандартная страница выглядит довольно просто. Если вы
хотите брендированную страницу с вашим логотипом, цветами и
инструкциями — её можно заменить на кастомный шаблон.
🎨 Часть 3. Установка
кастомной страницы подписки
Шаг 1. Выбор шаблона
В сообществе Marzban есть несколько готовых шаблонов. Вот
самые популярные:
📋 Популярные шаблоны страниц подписки
| Шаблон | Особенности | Ссылка |
|---|---|---|
| Marzbanner | Bootstrap CSS, QR-код, инструкции для всех ОС | GitHub |
| x0sina/marzban-sub | Поддержка 3 языков, привлекательный дизайн | GitHub |
| ryabkov82/marzban-sub-page | Один файл, все стили и скрипты встроены | GitHub |
| shayannjn/Marzban-template | Одно-кликовое QR-кодирование, мульти-ОС | GitHub |
Таблица обновлена в рамках серии статей о WireGuard и Marzban
Шаг 2. Установка шаблона
Рассмотрим установку на примере Marzbanner (рекомендую
для начала):
1. Создайте директорию для шаблонов:
sudo mkdir -p /var/lib/marzban/templates/subscription/
2. Скачайте шаблон:
sudo wget -N -P /var/lib/marzban/templates/subscription/
https://raw.githubusercontent.com/streletskiy/marzban-sub-page/main/index.html
3. Активируйте кастомный шаблон:
Откройте файл /opt/marzban/.env:
sudo nano
/opt/marzban/.env
Добавьте (или раскомментируйте) строки:
CUSTOM_TEMPLATES_DIRECTORY="/var/lib/marzban/templates/"
SUBSCRIPTION_PAGE_TEMPLATE="subscription/index.html"
4. Перезапустите Marzban:
marzban restart
Шаг
3. Проверка
Откройте ссылку-подписку в браузере. Вы должны увидеть новую
страницу с QR-кодом, ссылками для импорта и инструкциями.
🔗 Часть 4. Как работает
QR-код
Что закодировано в QR-коде
QR-код на странице подписки содержит deep link —
специальную ссылку, которая открывает VPN-клиент и автоматически добавляет
подписку.
Например, для V2RayNG (Android) deep link выглядит так:
v2rayng://install-sub?url=https://panel.example.com/sub/TOKEN&name=MyVPN
Для Streisand (iOS):
streisand://import/https://panel.example.com/sub/TOKEN#MyVPN
Как это работает для клиента
- Клиент
открывает страницу подписки на телефоне
- Видит
QR-код
- Открывает
VPN-клиент (V2RayNG, Streisand, Hiddify и т.д.)
- Нажимает
«Добавить подписку» → «Сканировать QR-код»
- Наводит
камеру на код
- Подписка
добавляется автоматически
- Клиент
нажимает «Подключиться» — и всё работает
Время подключения: 30 секунд. Реально.
Поддерживаемые клиенты
Marzban поддерживает deep links для огромного количества
приложений. Вот основные:
📋 Поддерживаемые клиенты и Deep Links
| Платформа | Клиент | Deep Link |
|---|---|---|
| Android | V2RayNG | v2rayng://install-sub?url=... |
| Android | Hiddify | hiddify://install-config/?url=... |
| Android | NekoBox | nekobox://install-sub?url=... |
| iOS | Streisand | streisand://import/... |
| iOS | Shadowrocket | sub://... |
| iOS | V2Box | v2box://install-sub?url=... |
| iOS | Sing-box | sing-box://import-remote-profile?url=... |
| Windows | Hiddify | hiddify://install-config/?url=... |
| Windows | NekoRay | sn://subscription?url=... |
| macOS | ClashX | clashx://install-config?url=... |
Таблица обновлена в рамках серии статей о WireGuard и Marzban
📊 Часть 5. Сравнение:
ручное подключение vs подписка
📋 Сравнение: ручное подключение vs подписка + QR-код
| Критерий | Ручное подключение | Подписка + QR-код |
|---|---|---|
| Время подключения | 5–10 минут | 30 секунд |
| Нужен файл конфига | Да | Нет |
| Ручной ввод ключей | Да | Нет |
| Обновление при смене сервера | Вручную | Автоматически |
| Поддержка нескольких устройств | Нужно настраивать каждое | Одна ссылка для всех |
| Удобство для клиента | Сложно | Максимально просто |
Таблица обновлена в рамках серии статей о WireGuard и Marzban
🛠 Часть 6. Продвинутая
настройка: кастомизация страницы подписки
Добавление логотипа и цветов
Откройте файл шаблона:
nano
/var/lib/marzban/templates/subscription/index.html
Найдите секцию с CSS-переменными или цветами. Например, в
Marzbanner:
css
:root {
--primary-color: #38bdf8;
--background-color: #0b1120;
}
Замените значения на свои. Сохраните файл и перезапустите Marzban:
marzban restart
Добавление ссылки на Telegram-бота
В шаблоне найдите место, где выводится контакт поддержки.
Обычно это:
html
<a href="https://t.me/yourID">Поддержка</a>
Замените yourID на имя вашего Telegram-бота или
аккаунта.
Настройка языков
Многие шаблоны поддерживают мультиязычность. Например,
в x0sina/marzban-sub можно изменить язык по умолчанию,
отредактировав тег <select> в конце HTML-файла.
📌 Часть 7. Что мы узнали?
- Система
подписок в Marzban позволяет клиенту подключаться за 30 секунд.
- QR-код содержит
deep link, который автоматически импортирует подписку в VPN-клиент.
- JWT-токен обеспечивает
безопасность — ссылка генерируется автоматически и не может быть
подделана.
- Кастомные
шаблоны позволяют заменить стандартную страницу на брендированную
с логотипом и инструкциями.
- Поддерживается
огромное количество клиентов — от V2RayNG до Streisand.
🔜 Что дальше?
В следующей статье мы разберём интеграцию Marzban с
Caddy: как настроить reverse proxy, чтобы панель, подписки и API работали
через один домен с автоматическим HTTPS. А пока — подключайте клиентов за 30
секунд! 🚀
📚 Читайте также:
📚 Источники
Материалы подготовлены на основе открытых источников:
- Marzban
Documentation — Subscription
- GitHub
— Akiyamov/marzban-sub-page — шаблон страницы подписки
- GitHub
— x0sina/marzban-sub — мультиязычный шаблон
- GitHub
— ryabkov82/marzban-sub-page — однофайловый шаблон
- DeepWiki
— Marzban Docs — Client Integration
- DeepWiki
— Marzban Docs — Supported Clients
- Marzban
Docs (sm1ky) — Подписки
- GitHub
— Gozargah/Marzban — официальный репозиторий
- Получить ссылку
- X
- Электронная почта
- Другие приложения
Популярные сообщения
🧬 ChaCha20 и Curve25519: Криптография под капотом WireGuard
Немного о том, зачем это нужно.
🔌 L2TP: протокол, который объединил лучшее от двух миров
⚡ ИИ-помощник (на OpenRouter)
Спросите про VPN, протоколы или настройку серверов.
Комментарии
Отправить комментарий