Для команд с шлюзом OpenClaw на арендованном Mac: трафик к моделям и реестрам только через утверждённый выход — WireGuard с узкими 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.

  1. Зафиксировать версию OpenClaw и Node в метаданных job.
  2. Перед шагом модели проверить wg show и код ответа health.
  3. Склеить ошибки этапов в один JSON и отправить на allowlist URL.
  4. При 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 для исходящего трафика.

Итог: curl-установка Node 22 или 24 doctor onboard демон плюс WireGuard split-DNS плюс токен и 18789 плюс один webhook JSON снимают типичные инциденты egress. Без оплаты: главная, помощь, тарифы; вход в консоль — кнопка «Войти». Узел: покупка, блог.

Стабильный Mac под OpenClaw и WireGuard

SSH и документация без обязательной оплаты: помощь, цены, аренда узла, главная и блог. Вход в консоль — через кнопку «Войти».