Подписки
Одна ссылка на человека для всех приложений: какой формат получает каждое приложение и как панель это решает, как называются серверы, что показывают приложения и какие у подписки настройки.
На этой странице
У каждого человека одна ссылка на подписку. Одна и та же ссылка даёт приложению по ссылке список серверов, приложению на ядре mihomo — готовый конфиг, а браузеру — личную страницу человека. Раздел Подписки решает, что получает каждое приложение и что видят люди. В нём пять вкладок: Приложения и форматы, Кому что отдавать, Названия и тексты, Страница пользователя и DNS.
Ссылка#
Ссылка выглядит так:
https://sub.example.com/<секретный префикс>/<токен>- Основу ссылки вместе с секретным префиксом задаёт
mistgate setupна сервере панели; Настройки → Домены показывает её владельцу как Основа ссылок подписки. Без неё ссылки не выдаются. См. Установка панели. - Токен — личный секрет человека. Ссылка подписки в карточке пользователя показывает ссылку и её QR-код; Новая ссылка заменяет её, и старая сразу перестаёт работать (вместе с ней меняется пароль страницы).
- Ссылка, которой нет, отвечает как любой другой неизвестный адрес сайта, поэтому подобрать ссылку перебором нельзя.
Форматы#
| Формат | Что это | Кому отдаётся по умолчанию |
|---|---|---|
| Список ссылок (base64) | Список ссылок, по одной на сервер. Его читают Happ, v2rayNG, Hiddify и большинство других приложений. | Любому приложению, для которого нет правила. |
| Веб-страница | Страница человека: инструкция, QR-код, его трафик. См. Страница пользователя. | Всем, кто открыл ссылку в браузере. |
| Mihomo YAML | Готовый конфиг для Mihomo и Clash Meta со всеми протоколами человека. | Приложениям на ядре mihomo (Clash Meta, FlClash, Clash Verge) — по правилам mihomo и clash. |
| Заглушка 404 | Делает вид, что такой ссылки нет. Удобно, чтобы закрыть ссылку от сканера по его User-Agent. | Никому, пока вы не добавите правило. |
Вкладка Приложения и форматы перечисляет приложения, с которыми работают протоколы, и что каждое читает: Happ — список ссылок, Mihomo / Clash Meta — Mihomo YAML, а AmneziaVPN подписку не читает вовсе (оно берёт ключ vpn:// со страницы человека).
Планируется: новые форматы (Xray JSON, sing-box) и зеркала подписки.
Кому что отдавать#
Вкладка Кому что отдавать — список правил сверху вниз. Правило — это кусок текста и формат: приложение, чей User-Agent содержит этот текст (регистр не важен), получает этот формат. Решает первое подошедшее правило. Всё, что не подошло ни под одно, попадает в последнюю строку Всё остальное: браузеру — страница, приложению — список ссылок.
В свежей панели два правила: mihomo и clash, оба — Mihomo YAML.
- Добавить правило: User-Agent содержит и Отдавать.
- Порядок меняется перетаскиванием или стрелками и сохраняется сразу.
- Удалённое правило можно несколько секунд вернуть из сообщения.
- До 50 правил; двух правил с одинаковым текстом быть не может.
Что считается браузером: User-Agent, который начинается с Mozilla/, содержит движок браузера (AppleWebKit, Gecko/, Firefox/, Trident/) и не называет известное VPN-приложение (Happ, v2ray, clash, mihomo, hiddify, sing-box, streisand, shadowrocket, karing, flclash, nekobox, okhttp, cfnetwork). Необычное приложение, похожее на браузер, направляют правилом.
Проверка User-Agent: вставьте то, что присылает приложение, или выберите пример, и вкладка покажет, какое правило сработает («Подходит правило 2 → Mihomo YAML», «Ничего не подошло, похоже на браузер → веб-страница», «Ничего не подошло → список ссылок»).
Что получают приложения#
Каждый ответ приложению, кроме серверов, несёт заголовки, которые читают приложения подписки:
| Заголовок | Что в нём |
|---|---|
Profile-Title |
Название подписки (Название в приложении). |
Subscription-Userinfo |
Отданный и полученный трафик периода, квота (0 — без лимита) и конец срока (0 — бессрочно). |
Profile-Update-Interval |
Как часто приложение обновляет ссылку, в часах. |
Profile-Web-Page-Url |
Сама ссылка: кнопка приложения, ведущая на страницу человека. |
Announce |
Объявление или причина, по которой подписка не работает. |
Support-Url |
Ссылка на поддержку. |
Routing |
Только для Happ: DNS-пресет человека в виде профиля маршрутизации Happ. См. DNS. |
Mihomo YAML несёт те же заголовки, одну группу прокси со всеми серверами и раздел dns: из DNS-пресета человека.
Названия и тексты#
| Настройка | Что делает |
|---|---|
| Название в приложении | Показывается вверху списка в Happ. Пусто — название панели (бренд). |
| Объявление | Одна-две строки над списком серверов; показывается и на странице пользователя. Счётчик говорит, сколько видно в Happ: 200 символов. Более длинный текст для приложений обрезается по слову с «…». |
| Ссылка на поддержку | Открывается по кнопке «Написать в поддержку». Ссылка на Telegram (https://t.me/…) или сайт. |
| Обновлять каждые | 1–72 часа, по умолчанию 12: как часто приложение заново скачивает подписку. |
Названия серверов — шаблон, собранный из частей:
| Часть | Что подставляется |
|---|---|
{flag} |
Флаг-эмодзи страны ноды. |
{country} |
Название страны на языке панели по умолчанию. |
{node} |
Имя ноды. |
{profile} |
Имя профиля. |
По умолчанию — {flag} {country}: «🇩🇪 Германия». Если у одного человека два сервера получили одинаковое название, второй получает номер: «🇩🇪 Германия 2». Имя профиля появится, только если вставить {profile}: это слово панели, а не человека. У ноды без страны вместо названия будет её имя. Happ рисует флаг иконкой сервера, только если название с флага начинается.
Так это выглядит в приложении рисует список так, как его покажет Happ, с серверами группы, в которой больше всего людей, а если такой нет — с выдуманными серверами.
Когда подписка не работает#
Когда человек отключён, срок закончился или квота исчерпана, приложения получают не пустой список. Они получают одну запись, названную по причине, которая никуда не подключается, а объявление заменяется той же причиной на языке панели по умолчанию:
| Причина | Текст |
|---|---|
| Срок закончился | «Подписка закончилась 29 сентября. Напишите — продлим» (без даты, если она неизвестна) |
| Квота исчерпана, есть сброс | «Трафик закончился, обнулится 1 октября» |
| Квота исчерпана, сброса нет | «Трафик закончился. Напишите — увеличим» |
| Отключён | «Доступ приостановлен» |
По-английски: "Subscription ended on 29 September. Message us to renew", "Traffic used up, resets on 1 October", "Traffic used up. Message us to raise the limit", "Access paused".
Для такого человека интервал обновления падает до 1 часа, чтобы исправление (продлённый срок, увеличенная квота) быстро дошло до приложения. Страница человека объясняет то же на его языке.
Страница пользователя#
На вкладке Страница пользователя — параметры страницы и приложения, которые она рекомендует, с живым предпросмотром. Сама страница описана в разделе Страница пользователя.
Приложения на странице#
Страница показывает по карточке на каждое приложение для каждой платформы, в порядке этого списка. На одной платформе может быть несколько приложений. У каждого:
| Поле | Что это |
|---|---|
| Платформа и вид | iOS, Android, Windows, macOS или Linux; По ссылке подписки или Ключ AmneziaWG. |
| Название приложения | Показывается на карточке. |
| Ссылка на скачивание | Ссылка https://: страница в магазине или файл. |
| Шаблон ссылки «добавить» | Ссылка в одно касание, которая открывает приложение с подпиской. Подстановки: {url} — ссылка подписки, {url_enc} — она же в URL-кодировке, {name_enc} — закодированное название подписки. Пусто — страница предложит скопировать ссылку. Схемы со скриптами (javascript:, data: и подобные) не принимаются. |
| Описание на карточке | Обычный текст до 80 символов. Пусто — на карточке будет сказано, как приложение подключается. |
| Рекомендуем | Значок на карточке; рекомендованное приложение идёт первым на своей платформе. |
Добавить приложение спрашивает платформу и вид (Принимает). Стрелки двигают приложение среди приложений его платформы. До 30 приложений.
Свежая панель рекомендует Happ на iOS, Android, Windows и macOS с шаблоном happ://add/{url} и AmneziaVPN для ключей на всех пяти платформах (на телефонах — из магазина, на остальных — с сайта AmneziaVPN).
Параметры страницы#
| Параметр | По умолчанию | Что делает |
|---|---|---|
| Показывать объявление | включено | Текст из Названия и тексты. |
| Кнопка поддержки | включено | Ведёт по ссылке на поддержку. |
| QR для второго устройства | включено | Удобно, если подписка на телефоне. |
| Пароль на странице | включено | Страница каждого человека спрашивает пароль — один раз на устройстве. Приложения берут подписку без пароля. |
| Устройства на странице | включено | Люди сами добавляют, перевыпускают ключ и удаляют свои устройства AmneziaWG на своей странице, в пределах лимита устройств. |
Правила сохраняются сразу, как только правило добавлено, перемещено или удалено. На вкладках Названия и тексты и Страница пользователя изменения ждут кнопки Сохранить на полосе внизу (Сбросить их отменяет). В любом случае они действуют со следующего запроса, без перезапуска.
Защита ссылок#
- Запросы. Одна ссылка отвечает не больше 60 раз в час; дальше — «слишком много запросов». Запросы чаще чем раз в 10 секунд получают тот же ответ.
- Перебор. Сеть (/24 для IPv4, /48 для IPv6), которая за минуту попробовала 20 несуществующих ссылок, на 15 минут получает только заглушку 404 — даже на настоящие ссылки.
- Передача ссылки. Если одной ссылкой за сутки пользуются из больше чем 8 сетей, панель пишет событие «ссылкой подписки пользуются из 9 сетей за сутки» и открывает алерт «Подписка похожа на общую». Она считает сети, но никогда не хранит адреса. Если ссылка утекла, выдайте новую.
Кто что может#
Читать эти настройки и проверять User-Agent может любой админ. Менять их могут владелец и помощники. Вкладка DNS описана в разделе DNS.