Читать тем, кому нужно: 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.
*:*) дают полный перебор 18789 любым узлом mesh.GATEWAY_URL приводит к ситуации: ping Tailscale есть, канал висит на устаревшем IP.Относитесь к 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. |
tailnet без привязки к тикетам — худший сценарий: нельзя понять после инцидента, кто брал TCP 18789. Каждый блок ACL требует владельца.
После 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 status строки должны быть в тексте задачи CI/CD.tailnet через ~/.openclaw/openclaw.json или volume монтёр.Структура меняется релизом.openclaw gateway status и openclaw doctor, лог дважды если fault.curl -v --max-time 5 или WebSocket проба; см. порядок Doctor post‑install triage.{
"gateway": {
"mode": "local",
"bind": "tailnet",
"port": 18789,
"auth": {
"mode": "token",
"token": "${OPENCLAW_GATEWAY_TOKEN}"
}
}
}
// NOTE: набросок; сверьтесь со схемой продукта и перезапустите процесс/container.
// Пример 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"
}
]
}
tailscale ping перед расширением bind на WAN.Сон, крышка, патчи и jitter домашней линии убивают SLA на 18789; приватное хранилище рядом с gateway‑логом ухудшает расследование. Серийные узлы — удалённые Mac Mini / M‑серии — лучше поддерживают 24×7 паттерны.
MACCOME синхронизирует RACI железом и резкими календарями аренды; посмотреть открытые цены аренды и центр поддержки перед финальными bind изменениями.
Если картины «кто кому насчёт 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.