Tailscale (painel do Gateway)
O 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.Modos
serve: Serve somente na 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).
Autenticação
Definagateway.auth.mode para controlar o handshake:
token(padrão quandoOPENCLAW_GATEWAY_TOKENestá definido)password(segredo compartilhado viaOPENCLAW_GATEWAY_PASSWORDou configuração)
tailscale.mode = "serve" e gateway.auth.allowTailscale é true,
requisições válidas de proxy do Serve podem se autenticar por meio dos cabeçalhos de identidade do Tailscale
(tailscale-user-login) sem fornecer um token/senha. O OpenClaw verifica
a identidade resolvendo o endereço x-forwarded-for por meio do daemon local do Tailscale
(tailscale whois) e correspondendo-o ao cabeçalho antes de aceitá-lo.
O OpenClaw só trata uma requisição como Serve quando ela chega pelo loopback com
os cabeçalhos do Tailscale x-forwarded-for, x-forwarded-proto e x-forwarded-host.
Para exigir credenciais explícitas, defina gateway.auth.allowTailscale: false ou
force gateway.auth.mode: "password".
Exemplos de configuração
Somente Tailnet (Serve)
https://<magicdns>/ (ou o 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
http://127.0.0.1:18789) não funcionará neste modo.
Internet pública (Funnel + senha compartilhada)
OPENCLAW_GATEWAY_PASSWORD em vez de salvar uma senha no disco.
Exemplos de CLI
Notas
- Serve/Funnel do Tailscale exige que a CLI
tailscaleesteja instalada e com login efetuado. tailscale.mode: "funnel"se recusa a iniciar a menos que o modo de autenticação sejapasswordpara evitar exposição pública.- Defina
gateway.tailscale.resetOnExitse quiser que o OpenClaw desfaça a configuração detailscale serveoutailscale funnelao encerrar. gateway.bind: "tailnet"é um bind direto à 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. Os nós se conectam pelo mesmo endpoint WS do Gateway, então o Serve pode funcionar para acesso aos nós.
Controle do 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 nó na máquina do navegador e mantenha ambos na mesma tailnet. O Gateway fará proxy das ações do navegador para o nó; não é necessário um servidor de controle separado nem uma URL do Serve. Evite o Funnel para controle do navegador; trate o pareamento de nós como acesso de operador.Pré-requisitos + limites do Tailscale
- O Serve requer HTTPS habilitado para sua tailnet; a CLI solicita caso esteja ausente.
- O Serve injeta cabeçalhos de identidade do Tailscale; o Funnel não.
- O Funnel requer Tailscale v1.38.3+, MagicDNS, HTTPS habilitado e um atributo de nó funnel.
- O Funnel oferece suporte apenas às portas
443,8443e10000via TLS. - O Funnel no macOS requer a variante open-source do aplicativo 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