OpenClaw pode configurar automaticamente o Tailscale Serve (tailnet) ou Funnel (público) para o painel do Gateway e a porta WebSocket. Isso mantém o Gateway vinculado ao loopback enquanto o Tailscale fornece HTTPS, roteamento e (para Serve) cabeçalhos de identidade.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Modos
serve: Serve somente para Tailnet viatailscale serve. O gateway permanece em127.0.0.1.funnel: HTTPS público viatailscale funnel. O OpenClaw exige uma senha compartilhada.off: Padrão (sem automação do Tailscale).
off significa que o OpenClaw não está gerenciando Serve nem Funnel; não significa que o daemon local do Tailscale esteja parado ou desconectado.
Autenticação
Definagateway.auth.mode para controlar o handshake:
none(somente ingresso privado)token(padrão quandoOPENCLAW_GATEWAY_TOKENestá definido)password(segredo compartilhado viaOPENCLAW_GATEWAY_PASSWORDou configuração)trusted-proxy(proxy reverso com reconhecimento de identidade; consulte Autenticação de proxy confiável)
tailscale.mode = "serve" e gateway.auth.allowTailscale é true, a autenticação da UI de controle/WebSocket pode usar cabeçalhos de identidade do Tailscale (tailscale-user-login) sem fornecer token/senha. O OpenClaw verifica a identidade resolvendo o endereço x-forwarded-for via daemon local do Tailscale (tailscale whois) e comparando-o com o cabeçalho antes de aceitá-lo. O OpenClaw só trata uma solicitação como Serve quando ela chega de loopback com os cabeçalhos x-forwarded-for, x-forwarded-proto e x-forwarded-host do Tailscale.
Para sessões de operador da UI de controle que incluem identidade de dispositivo do navegador, esse caminho Serve verificado também ignora a ida e volta de pareamento do dispositivo. Ele não contorna a identidade de dispositivo do navegador: clientes sem dispositivo ainda são rejeitados, e conexões WebSocket de função de Node ou que não sejam da UI de controle ainda seguem as verificações normais de pareamento e autenticação.
Endpoints da API HTTP (por exemplo, /v1/*, /tools/invoke e /api/channels/*) não usam autenticação por cabeçalho de identidade do Tailscale. Eles ainda seguem o modo normal de autenticação HTTP do gateway: autenticação por segredo compartilhado por padrão, ou uma configuração none de proxy confiável / ingresso privado configurada intencionalmente.
Esse fluxo sem token pressupõe que o host do gateway seja confiável. Se código local não confiável puder ser executado no mesmo host, desative gateway.auth.allowTailscale e exija autenticação por token/senha.
Para exigir credenciais explícitas de segredo compartilhado, defina gateway.auth.allowTailscale: false e use gateway.auth.mode: "token" ou "password".
Exemplos de configuração
Somente Tailnet (Serve)
https://<magicdns>/ (ou seu gateway.controlUi.basePath configurado)
Somente Tailnet (vincular ao IP da Tailnet)
Use isto quando quiser que o Gateway escute diretamente no IP da Tailnet (sem Serve/Funnel).- UI de controle:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
Loopback (
http://127.0.0.1:18789) não funcionará neste modo.Internet pública (Funnel + senha compartilhada)
OPENCLAW_GATEWAY_PASSWORD em vez de confirmar uma senha no disco.
Exemplos de CLI
Observações
- Tailscale Serve/Funnel exige que a CLI
tailscaleesteja instalada e conectada. tailscale.mode: "funnel"se recusa a iniciar a menos que o modo de autenticação sejapassword, para evitar exposição pública.- Defina
gateway.tailscale.resetOnExitse quiser que o OpenClaw desfaça a configuração detailscale serveoutailscale funnelno desligamento. - Defina
gateway.tailscale.preserveFunnel: truepara manter uma rotatailscale funnelconfigurada externamente ativa entre reinicializações do gateway. Quando habilitado e o gateway é executado emmode: "serve", o OpenClaw verificatailscale funnel statusantes de reaplicar Serve e ignora isso quando uma rota Funnel já cobre a porta do gateway. A política de Funnel gerenciado pelo OpenClaw somente com senha permanece inalterada. gateway.bind: "tailnet"é uma vinculação direta à Tailnet (sem HTTPS, sem Serve/Funnel).gateway.bind: "auto"prefere loopback; usetailnetse quiser somente Tailnet.- Serve/Funnel expõem apenas a UI de controle do Gateway + WS. Nodes se conectam pelo mesmo endpoint WS do Gateway, então Serve pode funcionar para acesso de Node.
Controle de navegador (Gateway remoto + navegador local)
Se você executa o Gateway em uma máquina, mas quer controlar um navegador em outra máquina, execute um host de Node na máquina do navegador e mantenha ambos na mesma tailnet. O Gateway fará proxy das ações do navegador para o Node; nenhum servidor de controle separado ou URL Serve é necessário. Evite Funnel para controle de navegador; trate o pareamento de Node como acesso de operador.Pré-requisitos + limites do Tailscale
- Serve exige HTTPS habilitado para sua tailnet; a CLI solicita isso se estiver ausente.
- Serve injeta cabeçalhos de identidade do Tailscale; Funnel não.
- Funnel exige Tailscale v1.38.3+, MagicDNS, HTTPS habilitado e um atributo de Node de funnel.
- Funnel só é compatível com as portas
443,8443e10000sobre TLS. - Funnel no macOS exige a variante de código aberto do app Tailscale.
Saiba mais
- Visão geral do Tailscale Serve: https://tailscale.com/kb/1312/serve
- Comando
tailscale serve: https://tailscale.com/kb/1242/tailscale-serve - Visão geral do Tailscale Funnel: https://tailscale.com/kb/1223/tailscale-funnel
- Comando
tailscale funnel: https://tailscale.com/kb/1311/tailscale-funnel