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

Обзор

Что такое Mistgate и чем он не является, для кого он и как связаны его части.

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

Mistgate — панель для небольшого VPN-флота на ваших собственных серверах. На этой странице — что она умеет, чего не делает, и понятия, на которых держится вся остальная документация.

Что такое Mistgate#

  • Две программы, без Docker. mistgate — панель. mistgate-node — агент, который работает на каждом VPN-сервере. Обе — одиночные бинарники на Go для Linux (amd64 и arm64).
  • Одна админка на весь флот. Панель хранит людей, настройки протоколов и серверы в одной базе SQLite и показывает их в веб-админке на русском и английском.
  • Работу на серверах делают агенты. Агент запускает протоколы и держит хост в том состоянии, которое просит панель. Он сам подключается к панели: панель никогда не заходит на ваши серверы, и управляющий порт на них не нужен.
  • Протоколы. Hysteria2 (официальное ядро, встроено в агента) и AmneziaWG 2.0 и 3.1 (по умолчанию в userspace, модуль ядра — по запросу для отдельной ноды). Выходом в интернет для обоих может служить Cloudflare WARP.
  • Одна ссылка на человека. Приложение для подписок получает по ней список серверов в понятном ему формате (список ссылок hysteria2:// или профиль Mihomo в YAML — выбор по правилам User-Agent). Браузер получает личную страницу человека с инструкциями. Пользователи AmneziaVPN получают по ключу на устройство.
  • Скрыта по умолчанию. Посторонний, открывший адрес панели, видит сайт-ширму. Админка спрятана за секретным путём, секретным именем хоста или отдельным портом, а на неизвестную ссылку подписки отвечает та же ширма.
  • Здоровье и обновления. Панель проверяет каждый сервер так, как его видит клиент, на каждой ноде работает доктор с проверками хоста и несколькими безопасными исправлениями, а алерты объясняют проблему простыми словами. Агенты нод обновляются сами, но только из сборок, подписанных вашим собственным ключом релиза.
  • Автоматизация. Скрипты работают с тем же Connect API, что и админка, через API-токены с ограниченными правами; ИИ-агенты — через встроенный MCP-сервер, и рискованные изменения ждут одобрения владельца.

Чем Mistgate не является#

  • Не VPN-сервис. Серверы и доменные имена — ваши, и управляете всем вы. Mistgate не сдаёт серверы и не продаёт доступ.
  • Не биллинг. Нет платежей, тарифов и счетов. Квоты трафика, сроки и лимиты устройств — это ограничения, которые вы задаёте сами.
  • Не клиентское приложение. Люди подключаются готовыми приложениями: приложением для подписок вроде Happ или приложением на ядре mihomo вроде Clash Verge или FlClash, а для ключей AmneziaWG — AmneziaVPN.
  • Не готовый продукт. Бинарных релизов пока нет, поэтому собирать нужно из исходников, а API, сохранённые настройки и протокол связи с нодами до версии 1.0 ещё могут меняться. Модель данных рассчитана примерно на 5000 пользователей и 50 нод.
  • Не установщик в один клик. Панель ставится вручную, а каждая нода подключается одной командой. Установщик в одну строку и подготовка нод по SSH прямо из админки — Планируется.

Для кого он#

Для человека или небольшой команды, которые держат несколько VPN-серверов для себя, семьи, друзей или небольшого сообщества. Понадобится уверенно обращаться с Linux, SSH, systemd и DNS-записями. Часть настроек по умолчанию рассчитана на пользователей в России (Яндекс DNS для нод в России, контрольные домены доктора, пресеты раздельного DNS); всё это настраивается.

Понятия#

Понятие Что это
Панель Процесс mistgate serve, один на установку. Хранит базу, мастер-ключ, которым зашифрованы секреты, и собственный удостоверяющий центр (CA) панели. Отдаёт сайт-ширму, подписки и страницы пользователей на публичном адресе, админку на секретном адресе и точку подключения для агентов нод.
Нода Linux-сервер, через который идёт VPN-трафик. У неё есть имя (de1), адрес, к которому подключаются клиенты (домен или IP), и при желании страна.
Агент Служба mistgate-node на ноде. Держит клиентский сертификат от CA панели и одно соединение с панелью, применяет то, что панель хочет видеть на этой ноде, и отправляет трафик, сессии, состояние и события.
Профиль Готовый набор настроек протокола: протокол и его параметры (порт, сертификат, обфускация и так далее). Пока профиль не поставлен на ноду, он ничего не делает.
Сервер на ноде Профиль, поставленный на ноду, — он же профиль на ноде. Именно он слушает порт на ноде, и именно его человек видит в приложении как один сервер. Порт и домен (SNI) у него можно задать отдельно для каждой ноды.
Группа Набор профилей. Каждый пользователь состоит в одной группе и получает её профили. В новой панели есть пустая группа «Все».
Пользователь Человек с доступом: группа, приложения (подписка, AmneziaVPN или оба), ноды (все или выбранные), квота трафика, срок и лимит устройств. Статус: «Активен», «Отключён», «Истёк» или «Квота исчерпана».
Устройство Устройство пользователя, у которого есть учётные данные. Для приложений с подпиской устройство появляется само, когда приложение забирает ссылку. В AmneziaWG устройство — это один ключ, привязанный к одному профилю. Лимит устройств считает именно их.
Ссылка подписки Одна секретная ссылка на пользователя. Приложение получает по ней серверы пользователя, браузер — его страницу. Новая ссылка сразу заменяет старую.
Страница пользователя То, что ссылка показывает в браузере: инструкции для платформы человека, QR-код, трафик и срок, а если вы разрешили, то и ключи AmneziaWG, которые человек сам создаёт для своих устройств. Страница может спрашивать пароль.

Как они связаны:

  • Пользователь получает сервер на ноде, если профиль есть в группе пользователя, нода входит в его ноды, сервер включён, пользователь активен и одно из его приложений умеет этот протокол (Hysteria2 — приложения для подписок, AmneziaWG — AmneziaVPN).
  • Любое изменение в этой цепочке сразу уходит на нужные ноды. Перезапускать ничего не надо.

Как приложение человека попадает на ноду#

text
  приложение человека             панель (mistgate)                    нода de1 (mistgate-node)
  -------------------             -----------------                    ------------------------
  1. забирает ссылку
     https://panel.example.com/<секрет>/<токен>
     ------------------------------------>  публичный порт, TCP 443
     <------------------------------------  список серверов (по одному на профиль на ноде)

  2. подключается к серверу, например de1.example.com, UDP 443 (Hysteria2)
     ---------------------------------------------------------------->  движок  ---->  интернет
                                                                               (напрямую или через WARP)

  3. управление, соединение всегда открывает нода:
                                    <---------------------------------  агент подключается к TCP 443
                                                                        с секретным именем SNI, взаимный TLS
                                    желаемое состояние  ------------->
                                    <------------------  трафик, сессии, состояние, события

С панелью приложение говорит только когда забирает ссылку. VPN-трафик идёт напрямую от приложения к ноде и дальше в интернет; через панель он не проходит.

Что дальше#

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