mistgate Документация

Подписки

Одна ссылка на человека для всех приложений: какой формат получает каждое приложение и как панель это решает, как называются серверы, что показывают приложения и какие у подписки настройки.

На этой странице

У каждого человека одна ссылка на подписку. Одна и та же ссылка даёт приложению по ссылке список серверов, приложению на ядре mihomo — готовый конфиг, а браузеру — личную страницу человека. Раздел Подписки решает, что получает каждое приложение и что видят люди. В нём пять вкладок: Приложения и форматы, Кому что отдавать, Названия и тексты, Страница пользователя и DNS.

Ссылка#

Ссылка выглядит так:

ini
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.

Править страницу на GitHub