Descubrimiento y transportes
OpenClaw tiene dos problemas distintos que en la superficie parecen similares:- Control remoto del operador: la app de barra de menús de macOS controlando un gateway que se ejecuta en otro lugar.
- Emparejamiento de nodos: iOS/Android (y futuros nodos) encontrando un gateway y emparejándose de forma segura.
openclaw gateway) y mantener a los clientes (app de Mac, iOS) como consumidores.
Términos
- Gateway: un único proceso gateway de larga duración que posee el estado (sesiones, emparejamiento, registro de nodos) y ejecuta canales. La mayoría de las configuraciones usan uno por host; son posibles configuraciones aisladas con varios gateway.
- Gateway WS (plano de control): el endpoint WebSocket en
127.0.0.1:18789de forma predeterminada; puede enlazarse a LAN/tailnet mediantegateway.bind. - Transporte WS directo: un endpoint Gateway WS orientado a LAN/tailnet (sin SSH).
- Transporte SSH (respaldo): control remoto reenviando
127.0.0.1:18789sobre SSH. - Puente TCP heredado (eliminado): transporte antiguo de nodos (consulta Protocolo de puente); ya no se anuncia para descubrimiento y ya no forma parte de las compilaciones actuales.
Por qué mantenemos tanto “directo” como SSH
- WS directo es la mejor experiencia de usuario en la misma red y dentro de una tailnet:
- descubrimiento automático en LAN mediante Bonjour
- tokens de emparejamiento + ACL propiedad del gateway
- no requiere acceso de shell; la superficie del protocolo puede mantenerse reducida y auditable
- SSH sigue siendo el respaldo universal:
- funciona en cualquier lugar donde tengas acceso SSH (incluso entre redes no relacionadas)
- sobrevive a problemas de multidifusión/mDNS
- no requiere nuevos puertos de entrada aparte de SSH
Entradas de descubrimiento (cómo saben los clientes dónde está el gateway)
1) Descubrimiento Bonjour / DNS-SD
El Bonjour por multidifusión es de mejor esfuerzo y no cruza redes. OpenClaw también puede explorar la misma baliza del gateway mediante un dominio DNS-SD de área amplia configurado, por lo que el descubrimiento puede cubrir:local.en la misma LAN- un dominio DNS-SD unicast configurado para descubrimiento entre redes
- El gateway anuncia su endpoint WS mediante Bonjour.
- Los clientes exploran y muestran una lista de “elegir un gateway”, y luego almacenan el endpoint elegido.
Detalles de la baliza de servicio
- Tipos de servicio:
_openclaw-gw._tcp(baliza de transporte del gateway)
- Claves TXT (no secretas):
role=gatewaytransport=gatewaydisplayName=<friendly name>(nombre para mostrar configurado por el operador)lanHost=<hostname>.localgatewayPort=18789(Gateway WS + HTTP)gatewayTls=1(solo cuando TLS está habilitado)gatewayTlsSha256=<sha256>(solo cuando TLS está habilitado y la huella digital está disponible)canvasPort=<port>(puerto del host canvas; actualmente es el mismo quegatewayPortcuando el host canvas está habilitado)tailnetDns=<magicdns>(pista opcional; se detecta automáticamente cuando Tailscale está disponible)sshPort=<port>(solo en modo mDNS completo; DNS-SD de área amplia puede omitirlo, en cuyo caso se mantienen los valores predeterminados de SSH en22)cliPath=<path>(solo en modo mDNS completo; DNS-SD de área amplia sigue escribiéndolo como pista de instalación remota)
- Los registros TXT de Bonjour/mDNS no están autenticados. Los clientes deben tratar los valores TXT solo como pistas de experiencia de usuario.
- El enrutamiento (host/puerto) debe preferir el endpoint de servicio resuelto (SRV + A/AAAA) sobre
lanHost,tailnetDnsogatewayPortproporcionados por TXT. - La fijación de TLS nunca debe permitir que un
gatewayTlsSha256anunciado anule una fijación almacenada previamente. - Los nodos iOS/Android deben requerir una confirmación explícita de “confiar en esta huella digital” antes de almacenar una primera fijación (verificación fuera de banda) siempre que la ruta elegida esté protegida/basada en TLS.
OPENCLAW_DISABLE_BONJOUR=1desactiva la publicidad.gateway.binden~/.openclaw/openclaw.jsoncontrola el modo de enlace del Gateway.OPENCLAW_SSH_PORTanula el puerto SSH anunciado cuando se emitesshPort.OPENCLAW_TAILNET_DNSpublica una pistatailnetDns(MagicDNS).OPENCLAW_CLI_PATHanula la ruta de CLI anunciada.
2) Tailnet (entre redes)
Para configuraciones de estilo Londres/Viena, Bonjour no ayudará. El objetivo “directo” recomendado es:- nombre de Tailscale MagicDNS (preferido) o una IP tailnet estable.
tailnetDns como pista opcional para los clientes (incluidas las balizas de área amplia).
La app de macOS ahora prefiere nombres MagicDNS frente a direcciones IP Tailscale sin procesar para el descubrimiento de gateway. Esto mejora la fiabilidad cuando cambian las IP de tailnet (por ejemplo, tras reinicios de nodos o reasignación CGNAT), porque los nombres MagicDNS se resuelven automáticamente a la IP actual.
Para el emparejamiento de nodos móviles, las pistas de descubrimiento no relajan la seguridad de transporte en rutas tailnet/públicas:
- iOS/Android siguen requiriendo una ruta segura de primera conexión tailnet/pública (
wss://o Tailscale Serve/Funnel). - Una IP tailnet sin procesar descubierta es una pista de enrutamiento, no un permiso para usar
ws://remoto en texto plano. - La conexión directa privada de LAN con
ws://sigue siendo compatible. - Si quieres la ruta Tailscale más sencilla para nodos móviles, usa Tailscale Serve para que tanto el descubrimiento como el código de configuración se resuelvan al mismo endpoint MagicDNS seguro.
3) Destino manual / SSH
Cuando no hay una ruta directa (o la directa está desactivada), los clientes siempre pueden conectarse mediante SSH reenviando el puerto loopback del gateway. Consulta Acceso remoto.Selección de transporte (política del cliente)
Comportamiento recomendado del cliente:- Si hay un endpoint directo emparejado configurado y accesible, úsalo.
- En caso contrario, si el descubrimiento encuentra un gateway en
local.o en el dominio de área amplia configurado, ofrece una opción de un toque “Usar este gateway” y guárdalo como endpoint directo. - En caso contrario, si hay un DNS/IP de tailnet configurado, intenta directo.
Para nodos móviles en rutas tailnet/públicas, directo significa un endpoint seguro, no
ws://remoto en texto plano. - En caso contrario, recurre a SSH.
Emparejamiento + autenticación (transporte directo)
El gateway es la fuente de verdad para la admisión de nodos/clientes.- Las solicitudes de emparejamiento se crean/aprueban/rechazan en el gateway (consulta Emparejamiento del Gateway).
- El gateway aplica:
- autenticación (token / par de claves)
- ámbitos/ACL (el gateway no es un proxy sin procesar para todos los métodos)
- límites de tasa
Responsabilidades por componente
- Gateway: anuncia balizas de descubrimiento, es propietario de las decisiones de emparejamiento y aloja el endpoint WS.
- App de macOS: te ayuda a elegir un gateway, muestra prompts de emparejamiento y usa SSH solo como respaldo.
- Nodos iOS/Android: exploran Bonjour por comodidad y se conectan al Gateway WS emparejado.