AllowedIPs, DNS split, OPENCLAW_GATEWAY_TOKEN, порт 18789 на loopback и политика переподключения. См. также hardening шлюза, RAG и embeddings, повторы после сбоев.
- Случайный обход туннеля: процесс шлюза резолвит имя через публичный DNS хостинга и уходит в интернет мимо корпоративного egress — аудит фиксирует нарушение даже при рабочей модели.
- Дрейф токена и plist: после ротации секрета
launchdвсё ещё отдаёт старыйOPENCLAW_GATEWAY_TOKEN, health остаётся зелёным на анонимном маршруте, а вызовы с Bearer падают. - Шторм webhook: каждый этап CI шлёт отдельный POST в чат без агрегации и без паузы 2 / 4 / 8 с, пока WireGuard кратковременно пересобирает маршрут.
Топология и принцип минимальных привилегий
Сервисный пользователь только для демона OpenClaw и отдельные ключи WireGuard без общих сессий. Запретите исходящие TCP и UDP вне туннеля на уровне хоста или агента. Цель: произвольный curl из job не достигает произвольного IP. SSH и brew держите вне профиля раннера шлюза.
| Паттерн | Плюс | Риск |
|---|---|---|
| Только WireGuard как default route к API-префиксам | Предсказуемый след в логах SIEM | Ошибка AllowedIPs ломает npm |
| HTTP-прокси с доменным ACL | Централизованный аудит | Пролезает CONNECT-туннель вне списка |
| Только host firewall | Быстрый старт | Сложнее сопоставить с DNS split |
Установка по документации 2026 года и проверка openclaw doctor
Зафиксируйте Node 22 LTS или Node 24 в runbook. По docs.openclaw.ai сохраните официальный curl-скрипт установки проверьте хеш при зеркале выполните от имени службы. Затем openclaw doctor до чистого вывода и onboard. Несколько инстансов — разные OPENCLAW_HOME в plist чтобы конфиги и кеш не смешивались.
node -v # ожидайте v22.x или v24.x по политике openclaw doctor openclaw doctor --repair # только после чтения предупреждений в документации
Критерий приёмки: which openclaw указывает на префикс сервисного пользователя doctor не выводит критичных ошибок про Docker или права на каталог внутри выбранного OPENCLAW_HOME.
Маршруты WireGuard и DNS split
Узкие AllowedIPs к подсетям inference HF npm Git по необходимости. В DNS — resolver туннеля или split через scutil чтобы API моделей не резолвились публично. Проверьте IPv6 и порядок сервисов. После подъёма — команды ниже в журнал узла.
sudo wg show scutil --dns | head -n 80 ping -c 2 api.openai.com # или ваш хост политики после включения туннеля
Привязка шлюза, токен и белый список доменов
openclaw onboard --install-daemon неинтерактивно с --gateway-auth token и --gateway-token-ref-env OPENCLAW_GATEWAY_TOKEN. Слушатель 127.0.0.1:18789 или иной порт — одинаково в runbook и CI. Таблица allowlist доменов в git рядом с правилами egress и NO_PROXY для зеркал. Наружу — узкий reverse-proxy см. hardening.
export OPENCLAW_GATEWAY_TOKEN="$(openssl rand -hex 32)"
openclaw onboard --non-interactive --install-daemon \
--gateway-auth token --gateway-token-ref-env OPENCLAW_GATEWAY_TOKEN
curl -fsS --max-time 6 -H "Authorization: Bearer ${OPENCLAW_GATEWAY_TOKEN}" \
"http://127.0.0.1:18789/health"
Переподключение после обрыва и health-пробы
Периодически wg show и curl к health с коротким таймаутом. Живой туннель но нет health — launchctl kickstart только для OpenClaw. Health есть а облако молчит — маршрут DNS не токен. После сна сначала WireGuard потом шлюз.
openclaw gateway status --deep
curl -fsS --max-time 8 -H "Authorization: Bearer ${OPENCLAW_GATEWAY_TOKEN}" \
"http://127.0.0.1:18789/health" || launchctl kickstart -k gui/$(id -u)/ai.openclaw.gateway
Имя метки Label в примере замените на фактическое из вашего plist после onboard.
Сводка для CI и webhook: один JSON вместо шторма
Склейте префлайт линтер шлюз и сеть в один JSON с полями wg gateway preflight без секретов POST только на URL из реестра. Повторы 2 4 8 с до трёх раз. Ключ идемпотентности из сборки и коммита. Подробнее восстановление и backoff.
- Зафиксировать версию OpenClaw и Node в метаданных job.
- Перед шагом модели проверить
wg showи код ответа health. - Склеить ошибки этапов в один JSON и отправить на allowlist URL.
- При
401не повторять бесконечно — остановить job и обновить секрет.
FAQ: типичные сообщения об ошибках
ENOTFOUND для домена модели при рабочем wg show
Чаще всего split-DNS не применился к процессу шлюза перезапустите сеть или вынесите resolver в конфиг WireGuard и проверьте что LaunchAgent наследует те же search domains.
connect ECONNREFUSED 127.0.0.1:18789
Демон не поднялся или порт переопределён в конфиге сверьте plist и вывод openclaw gateway status --deep убедитесь что другой инстанс с другим OPENCLAW_HOME не занял порт.
Петля перезапусков kickstart
Отключите агрессивный watchdog пока не стабилизируете WireGuard иначе plist будет бить по CPU сравните интервалы probe и время handshake туннеля.
handshake в wg show не обновляется
Проверьте время на Mac NAT на стороне концентратора и что UDP порт не фильтруется хостингом удалённого Mac сравните с политикой MacPull для исходящего трафика.
Стабильный Mac под OpenClaw и WireGuard
SSH и документация без обязательной оплаты: помощь, цены, аренда узла, главная и блог. Вход в консоль — через кнопку «Войти».