Remote access
Tailscale
O OpenClaw pode configurar automaticamente o Tailscale Serve (tailnet) ou Funnel (público) para o dashboard 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).
A saída de status e auditoria usa exposição do Tailscale para este modo Serve/Funnel
do OpenClaw. off significa que o OpenClaw não está gerenciando Serve ou Funnel; isso não significa que o
daemon local do Tailscale está parado ou desconectado.
Autenticação
Defina gateway.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 ciente de identidade; consulte Autenticação de proxy confiável)
Quando tailscale.mode = "serve" e gateway.auth.allowTailscale é true,
a autenticação da interface de controle/WebSocket pode usar 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 via daemon local do Tailscale
(tailscale whois) e comparando-o ao cabeçalho antes de aceitá-lo.
O OpenClaw só trata uma solicitação como Serve quando ela chega pelo loopback com
os cabeçalhos x-forwarded-for, x-forwarded-proto e x-forwarded-host
do Tailscale.
Para sessões de operador da interface de controle que incluem identidade de dispositivo do navegador, esse
caminho Serve verificado também ignora a viagem de ida e volta de pareamento de dispositivo. Ele não contorna
a identidade de dispositivo do navegador: clientes sem dispositivo ainda são rejeitados, e conexões
WebSocket com função de nó ou fora da interface 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 é confiável. Se código local não confiável
puder ser executado no mesmo host, desabilite 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)
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Abra: https://<magicdns>/ (ou o gateway.controlUi.basePath configurado)
Para expor a interface de controle por meio de um Serviço Tailscale nomeado em vez do
nome de host do dispositivo, defina gateway.tailscale.serviceName para o nome do Serviço:
{ gateway: { bind: "loopback", tailscale: { mode: "serve", serviceName: "svc:openclaw" }, },}Com o exemplo acima, a inicialização relata a URL do Serviço como
https://openclaw.<tailnet-name>.ts.net/ em vez do nome de host do dispositivo.
Os Serviços Tailscale exigem que o host seja um nó marcado aprovado na sua
tailnet. Configure a tag e aprove o Serviço no Tailscale antes de habilitar
esta opção; caso contrário, tailscale serve --service=... falhará durante a inicialização do gateway.
Somente tailnet (vincular ao IP da tailnet)
Use isto quando quiser que o Gateway escute diretamente no IP da tailnet (sem Serve/Funnel).
{ gateway: { bind: "tailnet", auth: { mode: "token", token: "your-token" }, },}Conecte a partir de outro dispositivo da tailnet:
- Interface de controle:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
Internet pública (Funnel + senha compartilhada)
{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password", password: "replace-me" }, },}Prefira OPENCLAW_GATEWAY_PASSWORD a fazer commit de uma senha em disco.
Exemplos de CLI
openclaw gateway --tailscale serveopenclaw gateway --tailscale funnel --auth passwordObservaçõ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.gateway.tailscale.serviceNamese aplica somente ao modo Serve e é passado paratailscale serve --service=<name>. O valor deve usar o formato de nome de Serviçosvc:<dns-label>do Tailscale, por exemplosvc:openclaw. O Tailscale exige que hosts de Serviço sejam nós marcados, e o Serviço pode precisar de aprovação no console administrativo antes que o Serve possa publicá-lo.- Defina
gateway.tailscale.resetOnExitse quiser que o OpenClaw desfaça a configuraçãotailscale serveoutailscale funnelao encerrar. - 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 o ignora quando uma rota Funnel já cobre a porta do gateway. A política de Funnel somente com senha gerenciada pelo OpenClaw não muda. gateway.bind: "tailnet"é um vínculo direto à tailnet (sem HTTPS, sem Serve/Funnel).gateway.bind: "auto"prefere loopback; usetailnetse quiser somente tailnet.- Serve/Funnel expõem apenas a interface de controle do Gateway + WS. Nós se conectam pelo mesmo endpoint WS do Gateway, então Serve pode funcionar para acesso de nós.
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 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 URL Serve.
Evite Funnel para controle de navegador; trate o pareamento de nós como acesso de operador.
Pré-requisitos + limites do Tailscale
- Serve exige HTTPS habilitado para sua tailnet; a CLI solicita se isso 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 nó funnel.
- Funnel oferece suporte somente às portas
443,8443e10000sobre TLS. - Funnel no macOS exige a variante de app Tailscale de código aberto.
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