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

Профили

Что такое профиль, как устроен редактор, как профиль ставится на ноды со своим портом и сертификатом и какие изменения ломают уже выданное.

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

Профиль — это настройки протокола с названием: «Hysteria2 · 443 с Salamander и Let's Encrypt», «AmneziaWG 3.1, похожий на DNS». Его делают один раз и ставят на сколько угодно нод; каждая такая постановка — профиль на ноде, то есть сервер, к которому подключаются люди. Люди получают профиль через свою группу. На этой странице — раздел Профили, редактор профиля и постановка профилей на ноды; настройки каждого протокола описаны в разделах Hysteria2 и AmneziaWG.

Профили, ноды и группы#

Что Что решает
Профиль Протокол и его настройки: порт, сертификат, обфускацию, выход.
Профиль на ноде Где он работает. Нода может поменять для себя порт и домен (SNI) профиля.
Группа Кто его получит. Группа — это набор профилей; каждый пользователь состоит в одной группе.

Человек получает сервер, когда выполнено всё сразу: профиль есть в его группе, он стоит на ноде, которой человеку можно пользоваться, этот профиль на ноде включён и работает или запускается, человек активен, а включённое у него приложение умеет этот протокол. Пользователи и группы описаны в разделе Пользователи и группы.

Протоколы — это плагины#

Каждый протокол — плагин панели: сейчас это Hysteria2 и AmneziaWG. Плагин приносит свои настройки в виде схемы, и редактор рисует форму по ней. Поэтому формы всех протоколов устроены одинаково:

  • поля разложены по группам Основное, Обфускация и Продвинутое; в заголовке группы видно, сколько изменено («изменено 2») и сколько ошибок («1 ошибка»);
  • у чисел подписаны единицы (Мбит/с, с, байт);
  • у секретов (пароль обфускации Hysteria2, ключ защиты заголовков AmneziaWG) есть кнопка Сгенерировать. Секрет хранится зашифрованным и больше не показывается: поле пишет «Задан и хранится на сервере, показать его нельзя. Сгенерируй новый, чтобы заменить.»;
  • часть полей критичные: если их поменять, у людей перестанут работать уже выданные настройки. Перед сохранением таких изменений редактор переспрашивает, см. ниже.

Список профилей#

Каждый профиль — карточка: название, протокол, короткая строка настроек («UDP 443 · Salamander · Let's Encrypt»), на скольких нодах он работает и сколько пользователей его получают. Жёлтые метки говорят, почему профиль никому не достаётся: Нигде не работает (не стоит ни на одной ноде) и Ни в одной группе. Жёлтая точка предупреждает, что профиль не запустился на какой-то ноде или туда не доходит UDP.

Новый профиль открывает редактор.

Создание профиля#

  1. Новый профиль. Если протоколов в панели больше одного, выберите его в поле Протокол. Форма начинается с настроек плагина по умолчанию, все секреты уже сгенерированы.
  2. Название. Пока его не ввели, оно следует за портом: «Hysteria2 · 443». До 64 символов, видно в списках панели.
  3. Поменяйте нужные настройки. Панель проверяет их по ходу ввода; поле с ошибкой отмечено, а предпросмотр ждёт, пока её исправят.
  4. Блок Сразу после создания решает, что произойдёт по кнопке:
    • Поставить на ноды — отмечены все ноды или только та, с которой вы пришли. Если у профиля Let's Encrypt без домена, блок предупредит о нодах, у которых в адресе IP.
    • Добавить в группы — отмечены группы, где ещё нет профиля этого протокола (без него их люди ничего не получат в этом приложении); группы, где он уже есть, не отмечены: второй профиль обычно для проверки или запасной. Если групп нет совсем, предлагается переключатель Создать группу «Все» с этим профилем.
  5. Создать профиль. Профиль создаётся, добавляется в группы, а затем в том же окне по очереди ставится на ноды. Если какая-то нода отказала, окно остаётся открытым: в нём причина и поле, где это исправить (другой порт, домен).

Панель справа, Как увидит клиент, показывает, что получит клиент для этого профиля, со скрытыми секретами: ссылку для Hysteria2 («Happ · URI list») или файл .conf для AmneziaWG («AmneziaVPN · .conf»).

Где работает#

Страница существующего профиля начинается с блока Где работает: строка о том, работает ли профиль («Работает: 2 ноды, 1 группа, 14 пользователей») или чего не хватает, с кнопкой, которая это исправит, а под ней три столбца:

  • Ноды — каждая нода с портом и состоянием профиля на ней и с ошибкой агента, если профиль не запустился. Поставить на ноды добавляет новые.
  • Группы — группы, в которых он есть; Изменить открывает группу, Добавить в группу добавляет ещё в одну.
  • Пользователи — сколько людей его получают, по группам. Считаются только активные пользователи, у которых включено подходящее приложение.

Постановка профиля на ноды#

Есть два пути с одинаковыми проверками:

  • со страницы профиля: Поставить на ноды, отметить ноды (или Все ноды), затем Поставить на N нод;
  • со страницы ноды: Профили → Добавить профиль, выбрать профиль, затем Добавить.

Профиль можно поставить на любую ноду флота, в том числе на ту, что ещё ждёт установки; на выведенную — нельзя. Нода на связи получает новое состояние сразу, и профиль запускается за несколько секунд; нода не на связи запустит его, когда вернётся агент.

На ноде у профиля могут быть свои:

  • Порт. Пусто — порт из профиля.
  • Домен (SNI) (Hysteria2). Пусто — домен из профиля, а если в профиле его нет — адрес ноды, если это домен.

Первый профиль AmneziaWG на ноде вдобавок спрашивает, каким бэкендом AmneziaWG будет пользоваться нода, см. AmneziaWG.

Порты и подсказка свободного порта#

Два профиля не могут слушать один порт на одной ноде, и порт не может попадать в диапазон прыжков другого профиля. Если порт занят, окно сразу подставляет свободный и говорит об этом («Порт 443 занят профилем «Основной» — подставили свободный 8443. Можно вписать свой.»), а кнопка Взять 8443 вернёт его, если вы вписали другое. Панель сначала пробует 8443, 4443, 2053, 2083, 2087 и 2096, потом случайные порты от 10000 до 60000, и диапазоны прыжков считает занятыми.

Порт может держать и программа вне Mistgate. До запуска профиля панель этого не видит: профиль тогда не запустится с ошибкой «Порт 443 занят другой программой», доктор назовёт процесс, если сможет, а Сменить порт откроет окно со свободным портом.

Сертификаты#

У AmneziaWG сертификата нет. У профиля Hysteria2 — один из двух:

Сертификат Что нужно Как его проверяет приложение
Let's Encrypt Домен, у которого A-запись указывает на ноду, и порты 80 и 443, открытые из интернета. Обычным путём: по домену и цепочке доверия.
Самоподписанный (с пином) Ничего: работает и по IP. По отпечатку SHA-256 сертификата (пину), который приходит в подписке.

Сертификаты Let's Encrypt нода получает сама и продлевает примерно за месяц до окончания. На проверку она отвечает на TCP 443 (там же профиль Hysteria2 показывает свой сайт-маскировку) и на порту 80, если он свободен. Самоподписанный сертификат делается на ноде и действует 10 лет; нода сделает новый, с новым пином, когда останется меньше 30 дней или поменяется домен (SNI). Новый пин дойдёт до людей при следующем обновлении подписки.

На какое имя выписан сертификат: Домен (SNI) ноды, иначе Домен (SNI) профиля, иначе адрес ноды, если это домен. Для самоподписанного сертификата на ноде с IP в сертификат попадает IP.

Профиль с Let's Encrypt на ноде, у которой адрес — IP, а домен не указан, работать не может. Окно говорит об этом до нажатия кнопки и предлагает два выхода:

  • Вписать домен, у которого A-запись указывает на IP ноды;
  • перейти на самоподписанный сертификат: Переключить «…» на самоподписанный, если профиль ещё нигде не стоит, или Создать самоподписанный профиль для …, если он уже работает где-то с Let's Encrypt (тот профиль останется как есть).
Важно

панель пишет, что самоподписанный сертификат проверен с официальным клиентом Hysteria2 и с Mihomo, а в Happ — ещё нет. Проверьте на своём телефоне, прежде чем на него полагаться.

Проверка до нажатия кнопки#

Пока вы заполняете окно добавления профиля (и окно правки профиля на ноде), панель спрашивает у сервера, пройдёт ли настоящий запрос: примерно через 300 мс после каждого изменения она отправляет тот же запрос с флагом «только проверить». Сервер прогоняет все проверки настоящего запроса и ничего не записывает. Ответ — либо отказ, который окно пишет словами рядом с нужным полем и из-за которого кнопка недоступна, либо профиль таким, каким он будет на этой ноде (его настоящие порт и домен для подсказок в полях), с предупреждениями и свободным портом.

Код Когда Что пишет или делает окно
acme_needs_domain Let's Encrypt без домена на ноде с IP Блок Let's Encrypt с кнопкой Вписать домен и путями к самоподписанному.
port_taken Этот порт слушает другой профиль ноды или порт попадает в его диапазон прыжков «Порт 443 на de1 уже занят профилем «Основной».» Подставлен свободный порт; Взять N.
hop_taken Собственный диапазон прыжков профиля пересекается с другим профилем на ноде Пересечение и Открыть профиль: поможет только смена диапазона.
port_in_hop Порт попадает в собственный диапазон прыжков профиля «Порт должен быть вне диапазона прыжков профиля (20000–30000).»
sni_needs_domain В Домен (SNI) профиля с Let's Encrypt вписан IP «Для Let's Encrypt здесь нужен домен, а «…» — не домен.»
sni_invalid Ни домен, ни IP ««…» — не домен и не IP-адрес.»
already_on_node Профиль уже стоит на этой ноде «Этот профиль уже стоит на этой ноде.»
node_retired Нода выведена из флота «Нода выведена из флота.»

Предупреждение кнопку не блокирует. Сейчас оно одно: warp_missing — профиль выходит через WARP, а у ноды нет аккаунта WARP, WARP на ней на паузе или по последнему отчёту ноды туннель лежит. Окно говорит, что профиль там не пропустит трафик, и ведёт к карточке WARP ноды.

Те же коды возвращают API и сервер MCP в виде «код: ключ=значение&ключ=значение», так что их могут читать и скрипты. См. API.

Ошибки, которые объясняет редактор#

Поле, которое отклонил сервер, получает пояснение рядом. На эти случаи у редактора свои слова; для остальных полей и кодов он показывает короткий английский текст сервера.

Поле Код Что пишет редактор
Порт out_of_range Порт — от 1 до 65535
Прыжки по портам, начало invalid Порт должен быть вне диапазона прыжков
Прыжки по портам, начало out_of_range Начало диапазона — от 1024 до 65535, чтобы не задеть SSH и служебные порты
Прыжки по портам, конец too_wide В диапазоне не больше 20 000 портов
Пароль обфускации length Пароль — от 8 до 128 символов
Домен (SNI) invalid Это не похоже на домен

Для сетей клиентов AmneziaWG показывается текст сервера: сеть пересекается с другим профилем AmneziaWG («overlaps the network of profile …») или её уже нельзя менять («the client network cannot change once the profile is on a node or has devices»).

Сохранение изменений и что ломает выданное#

Полоса внизу считает изменения («Изменено параметров: 3»), рядом Отменить и Сохранить. Сохранённое уходит на все ноды, где стоит профиль («Сохранено · раскатываю на 2 ноды»); профиль там перезапускается, а подключённые через него люди переподключаются сами.

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

Протокол Критичные поля Что произойдёт
Hysteria2 Порт, прыжки по портам, домен (SNI), сертификат, тип и пароль обфускации Сервер перестанет работать у всех пользователей профиля, пока их приложение не обновит подписку (до интервала обновления, по умолчанию 12 ч). Окно перечисляет затронутых пользователей.
AmneziaWG Версия протокола, порт, сети клиентов, S1–S4, H1–H4, ключ защиты заголовков, случайные хвосты Все устройства профиля перестанут работать и будут помечены как устаревшие: каждому нужен конфиг заново. Кнопка называется Сменить и перевыдать ключи.

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

Смена порта профиля AmneziaWG на одной ноде (на вкладке Профили ноды) тоже помечает устройства этого профиля устаревшими: в их конфигах старый порт.

Если кто-то сохранил профиль, пока вы его правили, при сохранении появится «Этот профиль изменили в другом месте» с кнопкой Перезагрузить: панель никогда молча не затирает более новую версию.

Один и тот же сервер с WARP и без#

На странице профиля, под блоком Где работает, кнопка Копия через WARP (или Копия без WARP у профиля, который уже выходит через WARP) делает двойника профиля с другим выходом. Окно перечисляет, что именно будет создано:

  • название с добавленным (или убранным) « · WARP»;
  • порт, свободный на всех нодах профиля;
  • новые пароли и ключи: ничего секретного не копируется; двойник AmneziaWG получает ещё и свою сеть клиентов;
  • без прыжков по портам (диапазоны пересеклись бы);
  • те же ноды и те же группы. Ноды без рабочего WARP для двойника с WARP перечислены и не отмечены: там он ничего не пропустит.

Сначала сохраните изменения: копия делается из сохранённого профиля. После этого люди из этих групп увидят каждую ноду в приложении дважды. При шаблоне названий по умолчанию второй сервер получит номер («🇩🇪 Германия 2»); чтобы различать их по названию, добавьте в шаблон {profile}, см. Подписки. Для AmneziaWG каждому, кому нужен двойник, нужно отдельное устройство (ключ) для него. Сам WARP описан в разделе WARP.

Удаление профиля#

Опасная зона → Удалить профиль удаляет профиль насовсем, из групп он пропадает. Профиль, который ещё стоит на какой-то ноде, удалить нельзя: окно назовёт эти ноды. Сначала уберите его с них (нода → Профили → Убрать).

Кто что может#

Создавать, менять и удалять профили, ставить их на ноды, снимать с нод и делать двойников может владелец. Добавлять профиль в группу могут владелец и помощники. Смотреть профили может любой админ. См. Безопасность.

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