Командная строка
Все команды 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.
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), мастер-ключ и базу, сохраняет, как попасть в админку, и печатает это. Запускать повторно безопасно: существующая конфигурация сохраняется, а новая ссылка настройки выдаётся, только пока админа нет (прежние неиспользованные ссылки перестают работать).
mistgate setup --public-url https://panel.example.comData 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#
Команды оператора на сервере панели. Обе работают и при запущенной, и при остановленной панели: она читает эти настройки на каждый запрос.
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://. Пароль показывается один раз. Нужен мастер-ключ, поэтому запускайте команду от пользователя, который может читать каталог данных. Обе команды пишутся в журнал аудита как «командная строка».
mistgate auth reset-login alicemistgate mcp#
Локальный MCP-сервер на stdin и stdout для агентов, которые умеют только запускать команду. Он пересылает каждое сообщение в MCP панели (адрес админки плюс mcp) и сам ничего не решает: отвечает панель, с профилем токена.
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#
mistgate release keygen --out ~/mistgate-release.key| Флаг | Значение |
|---|---|
--out |
Файл для закрытого ключа. Файла не должно быть: существующий ключ никогда не перезаписывается. Режим файла — 0600. |
Печатает открытый ключ и его отпечаток. Открытый ключ вшивается в сборку: RELEASE_KEY=<открытый ключ> make build. Храните файл ключа офлайн и сделайте его копию. См. «Обновления».
mistgate release sign#
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 на панели.
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 не перезапускает агента).
Когда вы добавляете ноду, панель показывает команду установки целиком:
chmod +x /root/mistgate-node && /root/mistgate-node enroll --panel panel.example.com:443 --sni <секретное имя> \
--ca-sha256 <отпечаток> --token <одноразовый токен> && /root/mistgate-node installmistgate-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 |
нет | выключен | Заменить существующее удостоверение ноды. |
Первые четыре обязательны. Токен срабатывает один раз и действует столько, сколько показала панель (по умолчанию час). При успехе команда печатает идентификатор ноды и следующий шаг:
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, который работает по умолчанию, модуль не нужен.
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).