2026 OpenClaw × Tailscale tailnet : `gateway.bind`, ACL et runbook CLI/canaux hors exposition publique

Env. 16 min de lecture · MACCOME

Contexte problématique : OpenClaw fonctionne mais le port 18789 ne doit pas servir depuis l’internet non filtré, alors que postes mobiles, pipelines CI et bastions gardent encore besoin du même petit périmètre de confiance pour clore CLIs/canaux. Lecture courte : alignez gateway.bind avec la sémantique tailnet et utilisez HuJSON Tailscale pour attribuer précisément 18789/tcp. Séquence conseillée : openclaw gateway status, pings mesh, puis un chat minimaliste. Cartographie docs : triangle avec 《checklist TLS Nginx/Caddy》, 《Cloudflare Tunnel + systemd》 (internet public, tunnels sortants, mesh pur). Détails conteneurisés : 《Docker Compose pairing》 et 《Mac distant zero trust SSH/Tunnel》.

Cinq motifs d’erreur encore possibles alors que le WAN est fermé

Sans exposition publique, il reste des ACL trop larges, des DNS antagonistes ou des problèmes de MTU avant de pointer du doigt vos jetons ou modèles.

  1. ACL trop ouvertes permettant *:* : tous les membres peuvent tenter TCP 18789.
  2. divergence binds vs GATEWAY_URL, d’où pings Tailscale verts mais anciens chemins encore utilisés par la passerelle OpenClaw.
  3. MagicDNS et VPN Split DNS, avec résolutions différentes provoquant des timeouts sporadiques.
  4. WebSocket + encapsulation excessive : fragmentations équivalent TLS bloquées.
  5. Subnet router annoncé abusivement sans policy exit : trajets imprévisibles.

Considérez HuJSON comme le pare-feu intérieur ; poursuivez aussi la rigueur de sécurisation CVE / firewall minimal.

Modèle Préalables Compromis
Internet + reverse‑proxy TLS Webhooks tiers, clients mobiles flottants sans agent standard. Certificats, WAF et rate‑limit ; suivre checklist TLS.
Cloudflare Tunnel (ou analogue) Masquer IP source sans carte NAT entrante dédiée. Dépendance POP ; suivre runbook Tunnel.
tailnet‑only et gateway.bind=tailnet Inventaires déjà enrolés ; passerelle Linux ou Mini distant multi‑régions. Documentation fine des ACL ; hors mesh = inaccessible par conception.
warning

Le tailnet remplace‑il vos contrôles d’audit ? Non. Associer un tag générique group:dev à des droits ICMP illimités ruinera vos analyses post‑incident sur 18789.

Esquisse topo : nœuds G, O et SR facultatif

Sur G, n’exposez TCP 18789 que via tags whitelist. Sur O, OPENCLAW_GATEWAY_URL pointe uniquement MagicDNS ou IP tailnet. Nettoyage des entrées LAN héritées.

Pour runners CI, cloisonnez tag:ci contre tag:gateway:18789 exclusivement TCP.

Les matrices décision SSH/tunnel : suivre également l’article zero trust Mac distant.

Six étapes de validation

  1. Identités fixes via tailscale status.
  2. Déploie ACL (UDP 41641, TCP requis avec 18789, deny‑all).
  3. Lie gateway.bind=tailnet ; fichier ~/.openclaw/openclaw.json ou volume synchrone.Schémas version‑dépendants.
  4. Jeton mono‑source synchronisée entre fichier et variable d'environnement (voir le tableau du runbook Compose pairing).
  5. openclaw gateway status && doctor; si échec, logs contrôle & hôte corrélés UTC.
  6. Smoke E2E : curl -v --max-time 5 puis conversation minimale ; poursuivez avec Doctor post‑install.
json
{
  "gateway": {
    "mode": "local",
    "bind": "tailnet",
    "port": 18789,
    "auth": {
      "mode": "token",
      "token": "${OPENCLAW_GATEWAY_TOKEN}"
    }
  }
}
// NOTE : exemple ; vérifiez le schéma livré puis redémarrez le service/container.
HuJSON
// Esquisse ACL : uniquement ops → gateway:18789 (renommez les tags)
{
  "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"
    }
  ]
}

Trois faits auditables pour CAPEX/OPEX RéseauSec

  • Tailscale n’implique pas zéro confiance automatique ; revocation lente = fenêtre élargie.
  • Freeze WebSocket ⇒ priorité MTU/ICMP+tailscale ping avant élargissement bind.
  • DNS désaligné ⇒ webhooks KO même si santé passerelle encore verte ; document MagicDNS annexé billet.

Éviter notebook comme sortie défaut 

Voyages / mise en veille / uplink domestique perturbent les SLAsur 18789; Apple Silicon dédiée multi‑régions offre meilleure prévisibilité.

RACI doit couvrir chaque vecteur ; lorsque matériel et cycles locatifs rejoignent l’architecture, vérifiez tarifs publics Mac mini cloud et centre d’aide.

Conclusion sketch

Sans tableau blanc succinct, vos JSON deviendront folklore MagicDNS ; périmètre tailnet, c’est la capacité d’expliquer en phrases courtes quel flux passe.

Itérez Compose, Tunnel, TLS public ou durcissement selon SLA.

FAQ

Faut‑il rejeter Docker ?

Non. Réutilisez 《Compose pairing》 : gardez IPs tailnet hôte + mapping publish synchrones.

SSH bastion combiné ?

Oui, grâce à 《Mac distant zero trust》 ; préservez entrées ACL séparées 18789 vs 22.