2026 OpenClaw × Tailscale tailnet: `gateway.bind`, ACL и приватная проверка CLI/каналов

Около 16 минут чтения · MACCOME

Читать тем, кому нужно: OpenClaw уже работает, но порт TCP 18789 нельзя оставлять на неподконтрольном WAN, пока ноутбуки, CI‑раннеры и постоянный хост должны через CLI/каналы оставаться в одном малом доверенном острове mesh. Итог: синхронизируйте gateway.bind с семантикой tailnet и выразите в ACL HuJSON, кому разрешено открыть 18789. Порядок проверки: openclaw gateway status, затем контрольные ping в mesh и минимальный диалог. Связки материалов: вместе с 《чек‑листом Nginx/Caddy TLS》 и 《Cloudflare Tunnel + systemd》 они закрывают публичный TLS, outbound‑туннели и режим строго без публичного слушателя. Compose и zero-trust см. 《Docker Compose pairing》,《zero-trust удалённый Mac》.

Пять причин жаловаться даже при отключении интернет‑слушателя

Интернет не сканируется, но intra‑mesh может «шуметь». Держите рядом временные шкалы журналов OpenClaw и Tailscale.

  1. Слишком широкие ACL (*:*) дают полный перебор 18789 любым узлом mesh.
  2. Расхождение bind и GATEWAY_URL приводит к ситуации: ping Tailscale есть, канал висит на устаревшем IP.
  3. MagicDNS против корпоративных split DNS ⇒ размытые TTL и «рандомные» тайм-ауты.
  4. Малый MTU + WebSockets ⇒ лучше смотреть фрагменты ICMP, прежде чем переписывать токен.
  5. subnet router анонсирует слишком много без exit‑политик ⇒ трафик «обходит» шлюз вручную нарисованный.

Относитесь к HuJSON как к новым правилам пакетного фильтра; см. темы портальной дисциплины из runbook усиление CVE / минимальный привилегий.

Модель Если нужна Компромиссы
Публ. TLS reverse proxy Внешние SaaS webhooks без единых агентов. Certs/WAF/throttle; отдельный TLS чек‑лист.
Outbound Cloudflare Tunnel Нужно скрыть источник и не городить проброс портов. Vendor POP; см. Tunnel runbook.
Pure tailnet + gateway.bind=tailnet Все уже в Tailscale; шлюз — выделенные Mac mini или Linux-хост со стеком Tailscale. Требуется чёткое тэгирование; отсутствие клиента — норма, если так задано RACI.
warning

tailnet без привязки к тикетам — худший сценарий: нельзя понять после инцидента, кто брал TCP 18789. Каждый блок ACL требует владельца.

Минимальная топология G / O / SR

После tailscale up узел G рекламирует 18789 только выбранным тегам. Оператор O заполняет OPENCLAW_GATEWAY_URL именем MagicDNS/V4/V6 без legacy LAN записей после заявления «только mesh».

CI-runner оформляет отдельный tag:ci → tag:gateway:18789/tcp отдельно от широкого dev-сегмента.

Для смешений см. 《zero-trust remote Mac》; здесь — слой OpenClaw bind.

Шесть шагов от tailscale до осмысленного первого пакета

  1. Зафиксировать узлы: tailscale status строки должны быть в тексте задачи CI/CD.
  2. ACL раньше JSON OpenClaw; UDP41641 для NAT + нужные TCP, затем финальный deny.
  3. gateway.bind=tailnet через ~/.openclaw/openclaw.json или volume монтёр.Структура меняется релизом.
  4. Один источник токена; сверять env и файл (как Compose pairing описывает двойную строку).
  5. Статус/докторopenclaw gateway status и openclaw doctor, лог дважды если fault.
  6. Smoke: HTTPS curl -v --max-time 5 или WebSocket проба; см. порядок Doctor post‑install triage.
json
{
  "gateway": {
    "mode": "local",
    "bind": "tailnet",
    "port": 18789,
    "auth": {
      "mode": "token",
      "token": "${OPENCLAW_GATEWAY_TOKEN}"
    }
  }
}
// NOTE: набросок; сверьтесь со схемой продукта и перезапустите процесс/container.
HuJSON
// Пример ACL: ops → gateway только 18789 (переименуйте теги под Org)
{
  "groups": { "group:ops": ["[email protected]"] },
  "tagOwners": { "tag:gateway": ["autogroup:admin"], "tag:ops": ["autogroup:admin"] },
  "acls": [
    {
      "action": "accept",
      "src": ["tag:ops"],
      "dst": ["tag:gateway:18789"],
      "proto": "tcp"
    }
  ]
}

Три технических утверждения для заявки

  • Вступление в tailnet не равняется нулевому доверию по умолчанию без быстрого отзыва ключей украденной техники.
  • WebSockets чувствительны к MTU; проверять ping и tailscale ping перед расширением bind на WAN.
  • Соревнующийся DNS убивает webhooks пораньше статусной метрики; MagicDNS нужно вкладывать в дополнение задачи.

Почему ноутбук с tailnet‑exit почти всегда плохой якорь

Сон, крышка, патчи и jitter домашней линии убивают SLA на 18789; приватное хранилище рядом с gateway‑логом ухудшает расследование. Серийные узлы — удалённые Mac Mini / M‑серии — лучше поддерживают 24×7 паттерны.

MACCOME синхронизирует RACI железом и резкими календарями аренды; посмотреть открытые цены аренды и центр поддержки перед финальными bind изменениями.

Краткая выводимость перед merge JSON

Если картины «кто кому насчёт TCP 18789» нет, не мержите; «tailnet only» должно переводиться в ясный словесный путь аудита.

Возвращайтесь к Compose pairing, Tunnel, TLS‑чеклисту или hardening когда SLA требует.

Вопросы

Нужно ли убивать Docker?

Нет. Совместите это с 《Docker Compose pairing》, проверяя соответствие tailnet‑IP хоста и порта publish.

Можно ли SSH-бастионы поверх tailnet?

Да; см. 《zero-trust remote Mac》 для матрицы. Правило 18789/tcp изолируйте от 22/tcp.