Tailscale (dashboard del Gateway)
OpenClaw puede auto-configurar Tailscale Serve (tailnet) o Funnel (público) para el dashboard del Gateway y el puerto WebSocket. Esto mantiene el Gateway enlazado a loopback mientras Tailscale proporciona HTTPS, enrutamiento y (para Serve) headers de identidad.
Modos
serve: Serve solo para tailnet víatailscale serve. El gateway permanece en127.0.0.1.funnel: HTTPS público víatailscale funnel. OpenClaw requiere una contraseña compartida.off: Por defecto (sin automatización de Tailscale).
Autenticación
Configura gateway.auth.mode para controlar el handshake:
token(por defecto cuandoOPENCLAW_GATEWAY_TOKENestá establecido)password(secreto compartido víaOPENCLAW_GATEWAY_PASSWORDo configuración)
Cuando tailscale.mode = "serve" y gateway.auth.allowTailscale es true,
la autenticación de la UI de control/WebSocket puede usar headers de identidad de Tailscale
(tailscale-user-login) sin proporcionar un token/password. OpenClaw verifica
la identidad resolviendo la dirección x-forwarded-for a través del daemon local de Tailscale
(tailscale whois) y comparándola con el header antes de aceptarlo.
OpenClaw solo trata una solicitud como Serve cuando llega desde loopback con
los headers x-forwarded-for, x-forwarded-proto y x-forwarded-host de Tailscale.
Los endpoints de la API HTTP (por ejemplo /v1/*, /tools/invoke y /api/channels/*)
siguen requiriendo autenticación por token/password.
Este flujo sin token asume que el host del gateway es de confianza. Si código local
no confiable puede ejecutarse en el mismo host, deshabilita gateway.auth.allowTailscale y requiere
autenticación por token/password en su lugar.
Para requerir credenciales explícitas, establece gateway.auth.allowTailscale: false o
fuerza gateway.auth.mode: "password".
Ejemplos de configuración
Solo tailnet (Serve)
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" },
},
}
Abre: https://<magicdns>/ (o tu gateway.controlUi.basePath configurado)
Solo tailnet (enlazar a IP de Tailnet)
Usa esto cuando quieras que el Gateway escuche directamente en la IP de Tailnet (sin Serve/Funnel).
{
gateway: {
bind: "tailnet",
auth: { mode: "token", token: "your-token" },
},
}
Conecta desde otro dispositivo de Tailnet:
- UI de control:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
Nota: loopback (http://127.0.0.1:18789) no funcionará en este modo.
Internet público (Funnel + contraseña compartida)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password", password: "replace-me" },
},
}
Prefiere OPENCLAW_GATEWAY_PASSWORD sobre guardar una contraseña en disco.
Ejemplos de CLI
openclaw gateway --tailscale serve
openclaw gateway --tailscale funnel --auth password
Notas
- Tailscale Serve/Funnel requiere que el CLI
tailscaleesté instalado y con sesión iniciada. tailscale.mode: "funnel"se niega a iniciar a menos que el modo de autenticación seapasswordpara evitar exposición pública.- Establece
gateway.tailscale.resetOnExitsi quieres que OpenClaw deshaga la configuración detailscale serveotailscale funnelal apagarse. gateway.bind: "tailnet"es un enlace directo a Tailnet (sin HTTPS, sin Serve/Funnel).gateway.bind: "auto"prefiere loopback; usatailnetsi quieres solo Tailnet.- Serve/Funnel solo exponen la UI de control del Gateway + WS. Los nodos se conectan a través del mismo endpoint WS del Gateway, así que Serve puede funcionar para el acceso de nodos.
Control del navegador (Gateway remoto + navegador local)
Si ejecutas el Gateway en una máquina pero quieres controlar un navegador en otra máquina, ejecuta un node host en la máquina del navegador y mantén ambos en el mismo tailnet. El Gateway reenviará las acciones del navegador al nodo; no se necesita un servidor de control separado o URL de Serve.
Evita Funnel para el control del navegador; trata el emparejamiento de nodos como acceso de operador.
Prerrequisitos + límites de Tailscale
- Serve requiere que HTTPS esté habilitado para tu tailnet; el CLI te lo indica si falta.
- Serve inyecta headers de identidad de Tailscale; Funnel no.
- Funnel requiere Tailscale v1.38.3+, MagicDNS, HTTPS habilitado y un atributo de nodo funnel.
- Funnel solo soporta los puertos
443,8443y10000sobre TLS. - Funnel en macOS requiere la variante de código abierto de la app de Tailscale.
Más información
- Resumen de Tailscale Serve: https://tailscale.com/kb/1312/serve
- Comando
tailscale serve: https://tailscale.com/kb/1242/tailscale-serve - Resumen de Tailscale Funnel: https://tailscale.com/kb/1223/tailscale-funnel
- Comando
tailscale funnel: https://tailscale.com/kb/1311/tailscale-funnel