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

Командная строка

Все команды mistgate и mistgate-node с флагами, переменными окружения, значениями по умолчанию и примерами.

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

У Mistgate два бинарника: mistgate — панель, mistgate-node — агент ноды. Оба принимают команду, а за ней флаги. Флаги можно писать с одним дефисом или с двумя (-data-dir или --data-dir); здесь везде два. <команда> -h печатает флаги команды.

У многих флагов есть запасная переменная окружения. Флаг в командной строке важнее переменной. Все флаги и переменные serve и setup, а также устройство каталога данных описаны ещё и в «Конфигурации».

mistgate#

Команда Что делает
serve Запускает панель.
setup Создаёт каталог данных, мастер-ключ и базу; печатает адрес админки и одноразовую ссылку настройки.
auth turnstile off Выключает капчу Cloudflare на страницах входа и настройки.
auth reset-login Выдаёт админу новый пароль и приложение-аутентификатор или добавляет вход по паролю.
mcp Локальный stdio-прокси к MCP панели для агентов, которые не умеют HTTP.
release keygen Создаёт ключ релиза владельца.
release sign Подписывает бинарники нод в пакет релиза.
version Печатает версию, время сборки и отпечаток ключа релиза.

mistgate завершается с кодом 0 при успехе, 1 при ошибке (печатает mistgate: <ошибка>) и 2 при неизвестной или пропущенной команде.

mistgate serve#

Запускает панель на переднем плане. Запускайте её под systemd или другим супервизором. Вне режима разработки нужна установка, сделанная mistgate setup.

sh
mistgate serve --listen :443 --acme-domain panel.example.com
Флаг Переменная По умолчанию Значение
--listen MISTGATE_LISTEN 127.0.0.1:8080 Публичный адрес: сайт-ширма, подписки, админка (если она под секретным префиксом или хостом) и точка подключения агентов.
--data-dir MISTGATE_DATA_DIR /var/lib/mistgate (./.data с --dev) Каталог данных.
--tls-cert, --tls-key MISTGATE_TLS_CERT, MISTGATE_TLS_KEY нет Свой сертификат и ключ для публичного адреса. Указываются вместе. Сертификат перечитывается, когда файл меняется.
--acme-domain MISTGATE_ACME_DOMAIN (через запятую) нет Получить сертификат Let's Encrypt для этого имени. Можно повторять. Публичный адрес должен быть доступен на порту 443. Используя флаг, вы принимаете условия CA. Сертификаты хранятся в <data-dir>/acme.
--acme-email MISTGATE_ACME_EMAIL нет Контактный адрес для Let's Encrypt.
--acme-http MISTGATE_ACME_HTTP :80 Адрес для проверки ACME HTTP-01 и перенаправления http → https, вместе с --acme-domain. Пустое значение выключает его.
--admin-listen MISTGATE_ADMIN_LISTEN сохранённая настройка Отдельный адрес админки (обычный HTTP). Только для установки, настроенной через setup --admin-listen; в остальных случаях панель откажется запускаться.
--agent-listen MISTGATE_AGENT_LISTEN нет (127.0.0.1:8082 с --dev) Отдельный TLS-адрес для агентов нод. Без него агенты подключаются к публичному адресу с секретным именем SNI, а для этого на нём нужен TLS (--tls-cert или --acme-domain).
--agent-addr MISTGATE_AGENT_ADDR --agent-listen, если в нём указан хост, иначе хост и порт публичного URL (443, если порта нет) host:port, к которому подключаются агенты; попадает в команду установки.
--decoy-dir MISTGATE_DECOY_DIR встроенная страница Каталог со своим сайтом-ширмой. 404.html и 429.html в нём заменяют встроенные страницы ошибок.
--trusted-proxy MISTGATE_TRUSTED_PROXY (через запятую) нет CIDR или IP обратного прокси, чьим заголовкам X-Forwarded-For и Forwarded можно верить. Можно повторять. Без него клиентом считается TCP-собеседник.
--source-url MISTGATE_SOURCE_URL https://github.com/Mistgate/mistgate Где опубликован исходный код этой сборки; ссылка стоит рядом с версией в админке (AGPL-3.0, раздел 13). Форк указывает свой репозиторий; пустое значение скрывает ссылку.
--dev MISTGATE_DEV (1, true, yes, on) выключен Режим разработки, см. ниже.

Режим разработки. --dev берёт ./.data, работает по обычному HTTP: ширма на 127.0.0.1:8080, админка на 127.0.0.1:8081, точка подключения агентов на 127.0.0.1:8082; WebAuthn RP — localhost; setup не нужен; пока админа нет, печатается одноразовая ссылка настройки (http://localhost:8081/setup#…, действует 30 минут). Никогда не используйте его на сервере.

mistgate setup#

Готовит новую установку: создаёт каталог данных (режим 0700), мастер-ключ и базу, сохраняет, как попасть в админку, и печатает это. Запускать повторно безопасно: существующая конфигурация сохраняется, а новая ссылка настройки выдаётся, только пока админа нет (прежние неиспользованные ссылки перестают работать).

sh
mistgate setup --public-url https://panel.example.com
text
Data dir:   /var/lib/mistgate
Admin URL:  https://panel.example.com/<secret prefix>/
Setup link: https://panel.example.com/<secret prefix>/setup#<token>
The link works once and expires in 30 minutes. Open it in a browser and create your admin (a passkey, or a password with an authenticator code).
Флаг Переменная По умолчанию Значение
--data-dir MISTGATE_DATA_DIR /var/lib/mistgate Каталог данных (база, мастер-ключ).
--public-url MISTGATE_PUBLIC_URL нет URL публичного сайта (ширмы), например https://panel.example.com. Он же — основа ссылок подписки.
--admin-host MISTGATE_ADMIN_HOST нет Отдавать админку на этом секретном имени хоста вместо секретного префикса пути.
--admin-listen MISTGATE_ADMIN_LISTEN нет Отдавать админку на отдельном адресе, например 127.0.0.1:8081. Нельзя сочетать с --admin-host.
--rp-id MISTGATE_RP_ID выводится Идентификатор WebAuthn RP.
--rp-origins MISTGATE_RP_ORIGINS выводятся Разрешённые источники WebAuthn через запятую.

Нужен один из флагов --public-url, --admin-host или --admin-listen. Где окажется админка:

Указано Адрес админки WebAuthn RP
только --public-url <public url>/<24 случайных символа>/ публичный хост
--admin-host admin-k7q2.example.com https://admin-k7q2.example.com/ (схема и порт из --public-url, если он указан) хост админки
--admin-listen 127.0.0.1:8081 http://localhost:8081/ localhost

Ещё setup создаёт секретное имя SNI точки подключения агентов и секретный префикс ссылок подписки. Повторный setup эти настройки не меняет.

mistgate auth#

Команды оператора на сервере панели. Обе работают и при запущенной, и при остановленной панели: она читает эти настройки на каждый запрос.

text
mistgate auth turnstile off [--data-dir DIR]
mistgate auth reset-login [<login>] [--admin ID] [--qr-invert] [--data-dir DIR]
Флаг Переменная По умолчанию Значение
--data-dir MISTGATE_DATA_DIR /var/lib/mistgate (./.data с --dev) Каталог данных. Каталог без базы панели команда не примет.
--dev MISTGATE_DEV выключен Установка для разработки: данные в ./.data.
--admin нет нет Только reset-login: идентификатор админа, которому даётся вход по паролю.
--qr-invert нет выключен Только reset-login: рисовать QR-код для светлого фона терминала.

auth turnstile off выключает проверку Cloudflare на страницах входа и настройки; ключи остаются сохранены. Это путь обратно, когда Cloudflare недоступен или ключи неверны. Включить снова — в Настройки → Безопасность.

auth reset-login — путь обратно после потери телефона:

  • mistgate auth reset-login показывает админов панели: идентификатор, имя, роль, логин и число passkey.
  • mistgate auth reset-login <логин> выдаёт этому логину новый пароль и новое приложение-аутентификатор, снимает его блокировки и завершает все сессии этого админа. Passkey остаются.
  • mistgate auth reset-login <новый логин> --admin <id> даёт админу, у которого только passkey, вход по паролю (--admin выбирает админа, если их несколько).

Команда печатает логин, новый пароль и ключ аутентификатора: QR-кодом в терминале, текстом группами по четыре символа и ссылкой otpauth://. Пароль показывается один раз. Нужен мастер-ключ, поэтому запускайте команду от пользователя, который может читать каталог данных. Обе команды пишутся в журнал аудита как «командная строка».

sh
mistgate auth reset-login alice

mistgate mcp#

Локальный MCP-сервер на stdin и stdout для агентов, которые умеют только запускать команду. Он пересылает каждое сообщение в MCP панели (адрес админки плюс mcp) и сам ничего не решает: отвечает панель, с профилем токена.

sh
mistgate mcp --url https://panel.example.com/<prefix>/ --token-file ~/.config/mistgate/token
Флаг Переменная Значение
--url MISTGATE_URL Адрес админки, который напечатал mistgate setup. Обычный http отклоняется, кроме localhost и loopback-адресов. В URL не должно быть учётных данных, query и fragment.
--token-file MISTGATE_TOKEN_FILE Файл, первая строка которого — API-токен (tk1_…). Токен читается только из файла, никогда из командной строки или окружения, и никогда не печатается. Если файл читают другие, печатается предупреждение.

Прокси останавливается, когда панель отклоняет токен (истёк, отозван или не тот профиль). В stdout идут только сообщения протокола, всё остальное — в stderr. См. MCP.

mistgate release keygen#

sh
mistgate release keygen --out ~/mistgate-release.key
Флаг Значение
--out Файл для закрытого ключа. Файла не должно быть: существующий ключ никогда не перезаписывается. Режим файла — 0600.

Печатает открытый ключ и его отпечаток. Открытый ключ вшивается в сборку: RELEASE_KEY=<открытый ключ> make build. Храните файл ключа офлайн и сделайте его копию. См. «Обновления».

mistgate release sign#

text
mistgate release sign --key FILE --version V --built UNIX [--expires 30d] BINARY... --out DIR
Флаг По умолчанию Значение
--key нет Файл закрытого ключа релиза от release keygen.
--version нет Версия релиза, например вывод git describe.
--built нет Unix-время коммита исходников (git log -1 --format=%ct). Задаёт порядок релизов и должно совпадать со временем сборки, вшитым в бинарники.
--expires 30d Сколько манифест можно устанавливать: дни (30d) или длительность в формате Go (720h).
--out нет Каталог для manifest.json, manifest.sig и копий бинарников.

Бинарники называются <имя>-<ос>-<архитектура>, например mistgate-node-linux-amd64. Флаги можно писать и после бинарников. Команда проверяет то, что записала, и печатает каждый файл с размером и отпечаток ключа. Скопируйте каталог в <data-dir>/dist на панели.

sh
mistgate release sign --key ~/mistgate-release.key \
  --version "$(git describe --tags --always)" \
  --built "$(git log -1 --format=%ct)" --expires 30d \
  bin/mistgate-node-linux-amd64 bin/mistgate-node-linux-arm64 --out dist/

mistgate version#

Печатает mistgate <версия>, затем built <время>, если бинарник собран со временем сборки, затем release key <отпечаток> или release key: none (unsigned build, nodes are updated by hand).

mistgate-node#

Команда Что делает
enroll Обменивает одноразовый токен на сертификат ноды.
install Пишет защищённый unit systemd, включает и запускает его.
run Запускает агента на переднем плане.
cleanup-net Убирает туннельные интерфейсы агента, маршруты WARP и таблицы nftables.
awg prepare-kernel Ставит модуль ядра AmneziaWG.
version Печатает версию, время сборки и отпечаток ключа релиза.

enroll и run принимают --state-dir; давайте им один и тот же каталог. Коды завершения: 0 — успех, 1 — ошибка, 2 — неверный вызов, 78 — от run, если для ноды не выполнен enroll (тогда systemd не перезапускает агента).

Когда вы добавляете ноду, панель показывает команду установки целиком:

sh
chmod +x /root/mistgate-node && /root/mistgate-node enroll --panel panel.example.com:443 --sni <секретное имя> \
  --ca-sha256 <отпечаток> --token <одноразовый токен> && /root/mistgate-node install

mistgate-node enroll#

Флаг Переменная По умолчанию Значение
--panel MISTGATE_PANEL нет Адрес панели, host:port.
--sni MISTGATE_AGENT_SNI нет Секретное имя SNI точки подключения агентов.
--ca-sha256 MISTGATE_CA_SHA256 нет Отпечаток SHA-256 сертификата CA панели (64 шестнадцатеричные цифры). Агент доверяет панели только по нему.
--token MISTGATE_ENROLL_TOKEN нет Одноразовый токен подключения. Переменная прячет его из списка процессов.
--state-dir MISTGATE_NODE_STATE_DIR /var/lib/mistgate-node Каталог состояния.
--force нет выключен Заменить существующее удостоверение ноды.

Первые четыре обязательны. Токен срабатывает один раз и действует столько, сколько показала панель (по умолчанию час). При успехе команда печатает идентификатор ноды и следующий шаг:

text
enrolled as nod_… with panel.example.com:443; state in /var/lib/mistgate-node
next: mistgate-node install   (or, in the foreground: mistgate-node run)

mistgate-node install#

Только Linux, от root, после enroll.

Флаг Переменная По умолчанию Значение
--state-dir MISTGATE_NODE_STATE_DIR /var/lib/mistgate-node Каталог состояния; тот же, что у enroll.
--bin нет /usr/local/bin/mistgate-node Где лежит бинарник. Если запущенный бинарник в другом месте, он копируется туда.
--no-start нет выключен Записать и включить unit, но не запускать.

Команда пишет /etc/systemd/system/mistgate-node.service, затем выполняет systemctl daemon-reload, enable и restart. Этот unit:

  • запускает агента от root только с двумя возможностями (администрирование сети и занятие низких портов) и с системой только для чтения, кроме каталога состояния, каталога бинарника (для самообновления), /etc/sysctl.d и /etc/systemd/journald.conf.d;
  • выставляет лимиты памяти по объёму RAM сервера;
  • перезапускает агента через 5 секунд после сбоя, но не после кода 78;
  • перед каждым запуском возвращает прежний бинарник после цикла падений свежего обновления, а после каждой остановки выполняет cleanup-net.

Повторный install с новым бинарником — это и есть ручное обновление ноды (см. «Обновления»). В путях допустимы только буквы, цифры и _ . / -.

mistgate-node run#

Запускает агента на переднем плане: то же, что делает unit, и способ попробовать агента без systemd.

Флаг Переменная По умолчанию Значение
--state-dir MISTGATE_NODE_STATE_DIR /var/lib/mistgate-node Каталог состояния.
--log-level MISTGATE_LOG_LEVEL info debug, info, warn или error.
--log-format MISTGATE_LOG_FORMAT text text или json. Лог идёт в stderr.

Завершается с кодом 78, если в каталоге состояния нет удостоверения ноды, и с кодом 0, если панель вывела ноду из флота.

mistgate-node cleanup-net#

Аргументов не принимает. Убирает туннельные интерфейсы агента, его туннельную таблицу nftables и, если они есть, устройство, маршруты, правила и таблицу WARP. Ему не нужны ни состояние, ни панель. Unit выполняет эту команду после каждой остановки; при запуске агент создаёт всё заново.

mistgate-node awg prepare-kernel#

Ставит модуль ядра AmneziaWG на ноду. Только Linux, от root. Бэкенду userspace, который работает по умолчанию, модуль не нужен.

sh
mistgate-node awg prepare-kernel          # печатает план, ничего не выполняет
mistgate-node awg prepare-kernel --yes    # выполняет
Флаг По умолчанию Значение
--yes выключен Выполнить команды. Без него план только печатается.
--verify-only выключен Только проверить уже установленный модуль (загружен, нужная версия интерфейса, загружается при старте).
--status-file нет Писать ход и результат в этот файл (так агент следит за сборкой, когда её запросила панель).
--timeout 15m Жёсткий предел времени.

Пакеты ставятся через apt (без вопросов, с ожиданием блокировки другого менеджера пакетов). Поддерживаются Debian и Ubuntu, не в контейнере, без Secure Boot, с systemd. См. AmneziaWG.

mistgate-node version#

Печатает mistgate-node <версия>, built <Unix-время> и release key <отпечаток> или release key none (unsigned build: update by hand).

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