Gateway
Découverte et transports
OpenClaw doit résoudre deux problèmes de découverte liés mais distincts :
- Contrôle distant par l’opérateur : l’app de la barre des menus macOS contrôle un Gateway exécuté ailleurs.
- Appairage des Node : iOS/Android (et les futurs Node) trouvent un Gateway et s’y appairent de manière sécurisée.
Toute la découverte et la publication réseau sont gérées par le Gateway des Node
(openclaw gateway) ; les clients (app Mac, iOS) sont uniquement des consommateurs.
Terminologie
- Gateway : processus unique de longue durée qui détient l’état (sessions, appairage, registre des Node) et exécute les canaux. La plupart des configurations en utilisent un par hôte ; des configurations isolées avec plusieurs Gateway sont possibles.
- WS du Gateway (plan de contrôle) : point de terminaison WebSocket sur
127.0.0.1:18789par défaut ; liez-le au LAN/tailnet viagateway.bind. - Transport WS direct : point de terminaison WS du Gateway accessible depuis le LAN/tailnet (sans SSH).
- Transport SSH (solution de secours) : contrôle distant par transfert de
127.0.0.1:18789via SSH. - Ancien pont TCP (supprimé) : ancien transport des Node (voir Protocole du pont) ; il n’est plus annoncé pour la découverte et ne fait plus partie des versions actuelles.
Détails des protocoles : Protocole du Gateway, Protocole du pont (ancien).
Pourquoi les modes direct et SSH coexistent
- WS direct offre la meilleure expérience utilisateur sur le même réseau et au sein d’un tailnet : découverte automatique sur le LAN via Bonjour, jetons d’appairage et ACL gérés par le Gateway, sans nécessiter d’accès à un shell.
- SSH est la solution de secours universelle : il fonctionne partout où vous disposez d’un accès SSH, même entre des réseaux sans lien, résiste aux problèmes de multidiffusion/mDNS et ne nécessite aucun nouveau port entrant en dehors de SSH.
Sources de découverte
1) Bonjour / DNS-SD
Bonjour en multidiffusion fonctionne au mieux et ne traverse pas les réseaux. OpenClaw
permet également de rechercher la même balise de Gateway via un domaine DNS-SD étendu
configuré, afin que la découverte couvre à la fois local. sur le même LAN et un domaine
DNS-SD monodiffusion configuré pour la découverte entre réseaux.
Le Gateway annonce son point de terminaison WS via Bonjour lorsque le Plugin
bonjour intégré est activé ; les clients le recherchent et affichent une liste « choisir un Gateway »,
puis enregistrent le point de terminaison sélectionné.
Dépannage et détails de la balise : Bonjour.
Détails de la balise de service
-
Type de service :
_openclaw-gw._tcp(balise de transport du Gateway). -
Clés TXT (non secrètes) :
Clé Remarques role=gatewayToujours présente. transport=gatewayToujours présente. displayName=<name>Nom d’affichage configuré par l’opérateur. lanHost=<hostname>.localUniquement pour l’annonceur mDNS du LAN ; non écrite par le DNS-SD étendu. gatewayPort=18789Port WS + HTTP du Gateway. gatewayTls=1Uniquement lorsque TLS est activé. gatewayTlsSha256=<sha256>Uniquement lorsque TLS est activé et qu’une empreinte est disponible. tailnetDns=<magicdns>Indication facultative ; détectée automatiquement lorsque Tailscale est disponible. sshPort=<port>Présente uniquement lorsque discovery.mdns.mode="full"; omise (SSH utilise22par défaut) dans le mode"minimal"par défaut, aussi bien pour l’annonceur du LAN que pour le DNS-SD étendu.cliPath=<path>Même condition discovery.mdns.mode="full"que poursshPort; indication d’installation distante du chemin de la CLI.Une clé TXT
canvasPortest définie dans le contrat de découverte du Plugin pour un futur port d’hôte de canevas, mais aucun chemin de code actuel ne lui attribue de valeur ; elle n’est donc jamais émise actuellement.
Remarques de sécurité :
- Les enregistrements TXT Bonjour/mDNS ne sont pas authentifiés. Les clients doivent considérer les valeurs TXT uniquement comme des indications pour l’expérience utilisateur.
- Le routage (hôte/port) doit privilégier le point de terminaison de service résolu
(SRV + A/AAAA) plutôt que
lanHost,tailnetDnsougatewayPortfournis par TXT. - L’épinglage TLS ne doit jamais permettre à un
gatewayTlsSha256annoncé de remplacer une empreinte précédemment enregistrée. - Les Node iOS/Android doivent exiger une confirmation explicite « faire confiance à cette empreinte » avant d’enregistrer une empreinte pour la première fois (vérification hors bande) chaque fois que la route choisie est sécurisée ou fondée sur TLS.
Activation, désactivation et remplacement :
openclaw plugins enable bonjouractive la publication par multidiffusion sur le LAN.discovery.mdns.modedansopenclaw.jsoncontrôle la diffusion mDNS :"minimal"(par défaut),"full"(ajoutecliPath/sshPortà la balise du LAN et à toute zone DNS-SD étendue) ou"off"(désactive mDNS).OPENCLAW_DISABLE_BONJOUR=1force la désactivation de la publication ;discovery.mdns.mode="off"la désactive indépendamment.OPENCLAW_DISABLE_BONJOUR=0est une activation explicite qui remplace la désactivation automatique du Plugin dans un conteneur détecté (Docker, containerd, Kubernetes, LXC) ; elle ne remplace pasdiscovery.mdns.mode="off". Le Pluginbonjourintégré démarre automatiquement sur les hôtes macOS (enabledByDefaultOnPlatforms: ["darwin"]) et se désactive automatiquement dans les conteneurs détectés ; Linux, Windows et les autres déploiements conteneurisés nécessitent l’exécution explicite deplugins enable bonjour.gateway.binddans~/.openclaw/openclaw.jsoncontrôle le mode de liaison du Gateway.OPENCLAW_SSH_PORTremplace le port SSH annoncé (prend effet uniquement lorsquediscovery.mdns.mode="full").OPENCLAW_TAILNET_DNSpublie une indicationtailnetDns(MagicDNS).OPENCLAW_CLI_PATHremplace le chemin de CLI annoncé.
2) Tailnet (entre réseaux)
Pour les Gateway situés sur des réseaux physiques différents, Bonjour ne sera d’aucune aide. La cible directe recommandée est un nom MagicDNS Tailscale (de préférence) ou une adresse IP tailnet stable.
Si le Gateway détecte qu’il s’exécute sous Tailscale, il publie
tailnetDns comme indication facultative pour les clients (y compris dans les balises étendues).
L’app macOS privilégie les noms MagicDNS par rapport aux adresses IP Tailscale brutes pour la
découverte du Gateway, ce qui reste fiable lorsque les adresses IP tailnet changent (redémarrage
des Node, réattribution CGNAT), car MagicDNS résout automatiquement l’adresse IP actuelle.
Pour l’appairage des Node mobiles, les indications de découverte n’assouplissent jamais la sécurité du transport sur les routes tailnet/publiques :
- iOS/Android nécessitent toujours un chemin de connexion initial tailnet/public sécurisé
(
wss://ou Tailscale Serve/Funnel). - Une adresse IP tailnet brute découverte est une indication de routage, et non une autorisation d’utiliser
une connexion distante
ws://en clair. - La connexion directe privée au LAN via
ws://reste prise en charge. - Pour le chemin Tailscale le plus simple sur les Node mobiles, utilisez Tailscale Serve afin que la découverte et la configuration aboutissent toutes deux au même point de terminaison MagicDNS sécurisé.
3) Cible manuelle / SSH
En l’absence de route directe (ou si le mode direct est désactivé), les clients peuvent toujours se connecter via SSH en transférant le port local loopback du Gateway. Voir Accès distant.
Sélection du transport (politique du client)
- Si un point de terminaison direct appairé est configuré et accessible, utilisez-le.
- Sinon, si la découverte trouve un Gateway sur
local.ou le domaine étendu configuré, proposez en un geste le choix « utiliser ce Gateway » et enregistrez-le comme point de terminaison direct. - Sinon, si un DNS/une adresse IP tailnet est configuré, essayez le mode direct. Pour les Node mobiles sur
des routes tailnet/publiques, le mode direct désigne un point de terminaison sécurisé, et non une connexion distante
ws://en clair. - Sinon, utilisez SSH comme solution de secours.
Appairage et authentification (transport direct)
Le Gateway est la source de vérité pour l’admission des Node/clients :
- Les demandes d’appairage sont créées/approuvées/rejetées dans le Gateway (voir Appairage du Gateway).
- Le Gateway applique l’authentification (jeton/paire de clés), les portées/ACL (il ne s’agit pas d’un simple proxy vers toutes les méthodes) et les limites de débit.
Responsabilités par composant
- Gateway : annonce les balises de découverte, gère les décisions d’appairage et héberge le point de terminaison WS.
- App macOS : vous aide à choisir un Gateway, affiche les demandes d’appairage et utilise SSH uniquement comme solution de secours.
- Node iOS/Android : recherchent Bonjour pour plus de commodité et se connectent au WS du Gateway appairé.