Gateway
Descoberta e transportes
OpenClaw tem dois problemas distintos que parecem semelhantes à primeira vista:
- Controle remoto do operador: o app da barra de menus do macOS controlando um Gateway em execução em outro lugar.
- Pareamento de Node: iOS/Android (e Nodes futuros) encontrando um Gateway e pareando com segurança.
O objetivo do design é manter toda descoberta/anúncio de rede no Node Gateway (openclaw gateway) e manter os clientes (app para Mac, iOS) como consumidores.
Termos
- Gateway: um único processo de Gateway de longa duração que é dono do estado (sessões, pareamento, registro de Nodes) e executa canais. A maioria das configurações usa um por host; configurações isoladas com múltiplos Gateways são possíveis.
- Gateway WS (plano de controle): o endpoint WebSocket em
127.0.0.1:18789por padrão; pode ser vinculado à LAN/tailnet viagateway.bind. - Transporte WS direto: um endpoint Gateway WS voltado para LAN/tailnet (sem SSH).
- Transporte SSH (fallback): controle remoto encaminhando
127.0.0.1:18789por SSH. - Ponte TCP legada (removida): transporte de Node mais antigo (consulte Protocolo da ponte); não é mais anunciado para descoberta e não faz mais parte das builds atuais.
Detalhes do protocolo:
Por que mantemos direto e SSH
- WS direto é a melhor UX na mesma rede e dentro de uma tailnet:
- descoberta automática na LAN via Bonjour
- tokens de pareamento + ACLs pertencentes ao Gateway
- não exige acesso ao shell; a superfície do protocolo pode permanecer restrita e auditável
- SSH continua sendo o fallback universal:
- funciona em qualquer lugar onde você tenha acesso SSH (mesmo entre redes não relacionadas)
- resiste a problemas de multicast/mDNS
- não exige novas portas de entrada além de SSH
Entradas de descoberta (como os clientes descobrem onde está o Gateway)
1) Descoberta Bonjour / DNS-SD
Bonjour multicast é de melhor esforço e não atravessa redes. OpenClaw também pode navegar pelo mesmo beacon de Gateway por meio de um domínio DNS-SD de área ampla configurado, então a descoberta pode cobrir:
local.na mesma LAN- um domínio DNS-SD unicast configurado para descoberta entre redes
Direção-alvo:
- O Gateway anuncia seu endpoint WS via Bonjour quando o Plugin integrado
bonjourestá habilitado. O Plugin inicia automaticamente em hosts macOS e é opcional em outros lugares. - Os clientes navegam e mostram uma lista "escolha um Gateway", depois armazenam o endpoint escolhido.
Solução de problemas e detalhes do beacon: Bonjour.
Detalhes do beacon de serviço
- Tipos de serviço:
_openclaw-gw._tcp(beacon de transporte do Gateway)
- Chaves TXT (não secretas):
role=gatewaytransport=gatewaydisplayName=<friendly name>(nome de exibição configurado pelo operador)lanHost=<hostname>.localgatewayPort=18789(Gateway WS + HTTP)gatewayTls=1(somente quando TLS está habilitado)gatewayTlsSha256=<sha256>(somente quando TLS está habilitado e a impressão digital está disponível)canvasPort=<port>(porta do host de canvas; atualmente a mesma quegatewayPortquando o host de canvas está habilitado)tailnetDns=<magicdns>(dica opcional; detectada automaticamente quando Tailscale está disponível)sshPort=<port>(somente modo completo mDNS; DNS-SD de área ampla pode omiti-la; nesse caso, os padrões de SSH permanecem em22)cliPath=<path>(somente modo completo mDNS; DNS-SD de área ampla ainda a escreve como uma dica de instalação remota)
Observações de segurança:
- Registros TXT Bonjour/mDNS não são autenticados. Clientes devem tratar valores TXT apenas como dicas de UX.
- Roteamento (host/porta) deve preferir o endpoint de serviço resolvido (SRV + A/AAAA) em vez de
lanHost,tailnetDnsougatewayPortfornecidos por TXT. - A fixação de TLS nunca deve permitir que um
gatewayTlsSha256anunciado substitua um pin armazenado anteriormente. - Nodes iOS/Android devem exigir uma confirmação explícita de "confiar nesta impressão digital" antes de armazenar um pin pela primeira vez (verificação fora de banda) sempre que a rota escolhida for segura/baseada em TLS.
Habilitar/desabilitar/sobrescrever:
openclaw plugins enable bonjourhabilita anúncio multicast na LAN.OPENCLAW_DISABLE_BONJOUR=1desabilita anúncios.- Quando o Plugin Bonjour está habilitado e
OPENCLAW_DISABLE_BONJOURnão está definido, Bonjour anuncia em hosts normais e se desabilita automaticamente dentro de contêineres detectados. A inicialização do Gateway no macOS com configuração vazia habilita o Plugin automaticamente; implantações em Linux, Windows e conteinerizadas precisam de habilitação explícita. Use0somente em host, macvlan ou outra rede compatível com mDNS; use1para forçar a desativação. gateway.bindem~/.openclaw/openclaw.jsoncontrola o modo de bind do Gateway.OPENCLAW_SSH_PORTsubstitui a porta SSH anunciada quandosshPorté emitido.OPENCLAW_TAILNET_DNSpublica uma dicatailnetDns(MagicDNS).OPENCLAW_CLI_PATHsubstitui o caminho da CLI anunciado.
2) Tailnet (entre redes)
Para configurações no estilo Londres/Viena, Bonjour não ajuda. O alvo "direto" recomendado é:
- nome Tailscale MagicDNS (preferencial) ou um IP estável de tailnet.
Se o Gateway conseguir detectar que está em execução sob Tailscale, ele publica tailnetDns como uma dica opcional para clientes (incluindo beacons de área ampla).
O app macOS agora prefere nomes MagicDNS em vez de IPs Tailscale brutos para descoberta de Gateway. Isso melhora a confiabilidade quando IPs de tailnet mudam (por exemplo, após reinicializações de Node ou reatribuição de CGNAT), porque nomes MagicDNS resolvem automaticamente para o IP atual.
Para pareamento de Node móvel, dicas de descoberta não flexibilizam a segurança de transporte em rotas tailnet/públicas:
- iOS/Android ainda exigem um caminho seguro de conexão inicial em tailnet/público (
wss://ou Tailscale Serve/Funnel). - Um IP bruto de tailnet descoberto é uma dica de roteamento, não permissão para usar
ws://remoto em texto claro. - Conexão direta
ws://em LAN privada continua sendo compatível. - Se você quiser o caminho Tailscale mais simples para Nodes móveis, use Tailscale Serve para que a descoberta e o código de configuração resolvam para o mesmo endpoint MagicDNS seguro.
3) Alvo manual / SSH
Quando não há rota direta (ou o direto está desabilitado), os clientes sempre podem se conectar via SSH encaminhando a porta do Gateway em loopback.
Consulte Acesso remoto.
Seleção de transporte (política do cliente)
Comportamento recomendado do cliente:
- Se um endpoint direto pareado estiver configurado e alcançável, use-o.
- Caso contrário, se a descoberta encontrar um Gateway em
local.ou no domínio de área ampla configurado, ofereça uma escolha de um toque "Usar este Gateway" e salve-o como o endpoint direto. - Caso contrário, se um DNS/IP de tailnet estiver configurado, tente direto.
Para Nodes móveis em rotas tailnet/públicas, direto significa um endpoint seguro, não
ws://remoto em texto claro. - Caso contrário, use SSH como fallback.
Pareamento + autenticação (transporte direto)
O Gateway é a fonte da verdade para admissão de Node/cliente.
- Solicitações de pareamento são criadas/aprovadas/rejeitadas no Gateway (consulte Pareamento do Gateway).
- O Gateway aplica:
- autenticação (token / par de chaves)
- escopos/ACLs (o Gateway não é um proxy bruto para todos os métodos)
- limites de taxa
Responsabilidades por componente
- Gateway: anuncia beacons de descoberta, controla decisões de pareamento e hospeda o endpoint WS.
- App macOS: ajuda você a escolher um Gateway, mostra prompts de pareamento e usa SSH apenas como fallback.
- Nodes iOS/Android: navegam Bonjour por conveniência e se conectam ao Gateway WS pareado.