Tailscale
OpenClaw puede configurar automáticamente Tailscale Serve (tailnet) o Funnel (público) para el tablero de Gateway y el puerto WebSocket. Esto mantiene el Gateway vinculado al loopback mientras Tailscale proporciona HTTPS, enrutamiento y (para Serve) encabezados de identidad.
serve: Serve solo para tailnet a través detailscale serve. El gateway se mantiene en127.0.0.1.funnel: HTTPS público a través detailscale funnel. OpenClaw requiere una contraseña compartida.off: Predeterminado (sin automatización de Tailscale).
El estado y la salida de auditoría utilizan exposición Tailscale para este modo OpenClaw Serve/Funnel. off significa que OpenClaw no está gestionando Serve o Funnel; no significa que el demonio local de Tailscale se haya detenido o cerrado la sesión.
Autenticación
Sección titulada «Autenticación»Establezca gateway.auth.mode para controlar el enlace:
none(solo ingreso privado)token(predeterminado cuando se estableceOPENCLAW_GATEWAY_TOKEN)password(secreto compartido a través deOPENCLAW_GATEWAY_PASSWORDo configuración)trusted-proxy(proxy inverso con reconocimiento de identidad; consulte Trusted Proxy Auth)
Cuando tailscale.mode = "serve" y gateway.auth.allowTailscale está true,
la autenticación de la Interfaz de Control/WebSocket puede usar los encabezados de identidad de Tailscale
(tailscale-user-login) sin proporcionar un token/contraseña. OpenClaw verifica
la identidad resolviendo la dirección x-forwarded-for a través del demonio local de Tailscale
(tailscale whois) y coincidiéndola con el encabezado antes de aceptarla.
OpenClaw solo trata una solicitud como Serve cuando llega desde loopback con
los encabezados x-forwarded-for, x-forwarded-proto y x-forwarded-host
de Tailscale.
Para las sesiones del operador de la Interfaz de Control que incluyen la identidad del dispositivo del navegador, esta
ruta de Serve verificada también omite el viaje de ida y vuelta de emparejamiento de dispositivos. No omite
la identidad del dispositivo del navegador: los clientes sin dispositivo siguen siendo rechazados, y las conexiones
WebSocket de rol de nodo o que no sean de la Interfaz de Control todavía siguen las comprobaciones normales de emparejamiento y
autenticación.
Los endpoints de la API HTTP (por ejemplo /v1/*, /tools/invoke y /api/channels/*)
no usan la autenticación por encabezado de identidad de Tailscale. Todavía siguen el modo normal
de autenticación HTTP de la puerta de enlace: autenticación de secreto compartido de forma predeterminada, o una configuración none de proxy de confianza / ingreso privado configurada intencionalmente.
Este flujo sin token asume que el host de la puerta de enlace es confiable. Si código local no confiable
puede ejecutarse en el mismo host, deshabilite gateway.auth.allowTailscale y requiera
autenticación de token/contraseña en su lugar.
Para requerir credenciales explícitas de secreto compartido, establezca gateway.auth.allowTailscale: false
y use gateway.auth.mode: "token" o "password".
Ejemplos de configuración
Sección titulada «Ejemplos de configuración»Solo Tailnet (Serve)
Sección titulada «Solo Tailnet (Serve)»{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Abrir: https://<magicdns>/ (o su gateway.controlUi.basePath configurado)
Solo Tailnet (vincular a IP de Tailnet)
Sección titulada «Solo Tailnet (vincular a IP de Tailnet)»Use esto cuando desee que Gateway escuche directamente en la IP de Tailnet (sin Serve/Funnel).
{ gateway: { bind: "tailnet", auth: { mode: "token", token: "your-token" }, },}Conectarse desde otro dispositivo de Tailnet:
- Interfaz de Control:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
Internet público (Funnel + contraseña compartida)
Sección titulada «Internet público (Funnel + contraseña compartida)»{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password", password: "replace-me" }, },}Prefiera OPENCLAW_GATEWAY_PASSWORD antes de comprometer una contraseña en el disco.
Ejemplos de CLI
Sección titulada «Ejemplos de CLI»openclaw gateway --tailscale serveopenclaw gateway --tailscale funnel --auth password- Tailscale Serve/Funnel requiere que la CLI de
tailscaleesté instalada y iniciada sesión. tailscale.mode: "funnel"se niega a iniciar a menos que el modo de autenticación seapasswordpara evitar la exposición pública.- Establezca
gateway.tailscale.resetOnExitsi desea que OpenClaw deshaga la configuración detailscale serveotailscale funnelal apagar. - Establezca
gateway.tailscale.preserveFunnel: truepara mantener una rutatailscale funnelconfigurada externamente activa a través de reinicios de la puerta de enlace. Cuando está habilitado y la puerta de enlace se ejecuta enmode: "serve", OpenClaw verificatailscale funnel statusantes de volver a aplicar Serve y lo omite cuando una ruta Funnel ya cubre el puerto de la puerta de enlace. La política de OpenClaw administrada solo de contraseña Funnel no cambia. gateway.bind: "tailnet"es un enlace directo a Tailnet (sin HTTPS, sin Serve/Funnel).gateway.bind: "auto"prefiere el loopback; usetailnetsi desea solo Tailnet.- Serve/Funnel solo exponen la interfaz de usuario de control de Gateway + WS. Los nodos se conectan a través del mismo extremo WS de Gateway, por lo que Serve puede funcionar para el acceso a nodos.
Control del navegador (Gateway remoto + navegador local)
Sección titulada «Control del navegador (Gateway remoto + navegador local)»Si ejecuta el Gateway en una máquina pero desea controlar un navegador en otra máquina, ejecute un node host en la máquina del navegador y mantenga ambos en la misma tailnet. El Gateway will proxy las acciones del navegador al nodo; no se necesita un servidor de control separado ni una URL de Serve.
Evite Funnel para el control del navegador; trate el emparejamiento de nodos como el acceso del operador.
Requisitos previos y límites de Tailscale
Sección titulada «Requisitos previos y límites de Tailscale»- Serve requiere que HTTPS esté habilitado para su tailnet; la CLI lo solicita si falta.
- Serve inyecta encabezados de identidad de Tailscale; Funnel no lo hace.
- Funnel requiere Tailscale v1.38.3+, MagicDNS, HTTPS habilitado y un atributo de nodo de embudo.
- Funnel solo admite los puertos
443,8443y10000a través de TLS. - Funnel en macOS requiere la variante de código abierto de la aplicación Tailscale.
Más información
Sección titulada «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