Rilevamento e trasporti
OpenClaw ha due problemi distinti che in superficie sembrano simili:- Controllo remoto dell’operatore: l’app per la barra dei menu di macOS che controlla un gateway in esecuzione altrove.
- Pairing del nodo: iOS/Android (e futuri nodi) che trovano un gateway e si associano in modo sicuro.
openclaw gateway) e mantenere i client (app Mac, iOS) come consumer.
Termini
- Gateway: un singolo processo gateway a lunga esecuzione che possiede lo stato (sessioni, pairing, registro dei nodi) ed esegue i canali. La maggior parte delle configurazioni ne usa uno per host; sono possibili configurazioni multi-gateway isolate.
- Gateway WS (piano di controllo): l’endpoint WebSocket su
127.0.0.1:18789per impostazione predefinita; può essere associato a LAN/tailnet tramitegateway.bind. - Trasporto WS diretto: un endpoint Gateway WS esposto verso LAN/tailnet (senza SSH).
- Trasporto SSH (fallback): controllo remoto inoltrando
127.0.0.1:18789tramite SSH. - Bridge TCP legacy (rimosso): vecchio trasporto dei nodi (vedi Protocollo bridge); non viene più pubblicizzato per il rilevamento e non fa più parte delle build correnti.
Perché manteniamo sia il “diretto” sia SSH
- WS diretto è la UX migliore sulla stessa rete e all’interno di una tailnet:
- rilevamento automatico su LAN tramite Bonjour
- token di pairing + ACL gestiti dal gateway
- nessun accesso shell richiesto; la superficie del protocollo può restare ristretta e verificabile
- SSH rimane il fallback universale:
- funziona ovunque tu abbia accesso SSH (anche tra reti non correlate)
- resiste ai problemi di multicast/mDNS
- non richiede nuove porte in ingresso oltre a SSH
Input di rilevamento (come i client imparano dove si trova il gateway)
1) Rilevamento Bonjour / DNS-SD
Il multicast Bonjour è best effort e non attraversa le reti. OpenClaw può anche esplorare lo stesso beacon del gateway tramite un dominio DNS-SD wide-area configurato, quindi il rilevamento può coprire:local.sulla stessa LAN- un dominio DNS-SD unicast configurato per il rilevamento tra reti
- Il gateway pubblicizza il suo endpoint WS tramite Bonjour.
- I client lo esplorano e mostrano un elenco “scegli un gateway”, quindi memorizzano l’endpoint selezionato.
Dettagli del beacon di servizio
- Tipi di servizio:
_openclaw-gw._tcp(beacon di trasporto gateway)
- Chiavi TXT (non segrete):
role=gatewaytransport=gatewaydisplayName=<friendly name>(nome descrittivo configurato dall’operatore)lanHost=<hostname>.localgatewayPort=18789(Gateway WS + HTTP)gatewayTls=1(solo quando TLS è abilitato)gatewayTlsSha256=<sha256>(solo quando TLS è abilitato e l’impronta digitale è disponibile)canvasPort=<port>(porta dell’host canvas; attualmente uguale agatewayPortquando l’host canvas è abilitato)tailnetDns=<magicdns>(suggerimento facoltativo; rilevato automaticamente quando Tailscale è disponibile)sshPort=<port>(solo modalità completa mDNS; DNS-SD wide-area può ometterlo, nel qual caso le impostazioni predefinite SSH restano22)cliPath=<path>(solo modalità completa mDNS; DNS-SD wide-area lo scrive comunque come suggerimento per l’installazione remota)
- I record TXT Bonjour/mDNS sono non autenticati. I client devono trattare i valori TXT solo come suggerimenti UX.
- Il routing (host/porta) dovrebbe preferire l’endpoint del servizio risolto (SRV + A/AAAA) rispetto a
lanHost,tailnetDnsogatewayPortforniti via TXT. - Il pinning TLS non deve mai consentire a un
gatewayTlsSha256pubblicizzato di sovrascrivere un pin memorizzato in precedenza. - I nodi iOS/Android dovrebbero richiedere una conferma esplicita “fidati di questa impronta digitale” prima di memorizzare un pin al primo utilizzo (verifica fuori banda) ogni volta che il percorso scelto è sicuro/basato su TLS.
OPENCLAW_DISABLE_BONJOUR=1disabilita la pubblicazione.gateway.bindin~/.openclaw/openclaw.jsoncontrolla la modalità di bind del Gateway.OPENCLAW_SSH_PORTsostituisce la porta SSH pubblicizzata quando viene emessosshPort.OPENCLAW_TAILNET_DNSpubblica un suggerimentotailnetDns(MagicDNS).OPENCLAW_CLI_PATHsostituisce il percorso CLI pubblicizzato.
2) Tailnet (tra reti)
Per configurazioni in stile Londra/Vienna, Bonjour non aiuta. Il target “diretto” consigliato è:- nome Tailscale MagicDNS (preferito) o un IP tailnet stabile.
tailnetDns come suggerimento facoltativo per i client (inclusi i beacon wide-area).
L’app macOS ora preferisce i nomi MagicDNS agli IP Tailscale grezzi per il rilevamento del gateway. Questo migliora l’affidabilità quando gli IP tailnet cambiano (ad esempio dopo riavvii dei nodi o riassegnazioni CGNAT), perché i nomi MagicDNS si risolvono automaticamente nell’IP corrente.
Per il pairing dei nodi mobili, i suggerimenti di rilevamento non attenuano la sicurezza del trasporto sui percorsi tailnet/pubblici:
- iOS/Android richiedono comunque un percorso di prima connessione tailnet/pubblico sicuro (
wss://o Tailscale Serve/Funnel). - Un IP tailnet grezzo rilevato è un suggerimento di routing, non un’autorizzazione a usare
ws://remoto in chiaro. - La connessione diretta
ws://sulla LAN privata resta supportata. - Se vuoi il percorso Tailscale più semplice per i nodi mobili, usa Tailscale Serve così sia il rilevamento sia il codice di configurazione risolvono nello stesso endpoint MagicDNS sicuro.
3) Target manuale / SSH
Quando non esiste un percorso diretto (o il diretto è disabilitato), i client possono sempre connettersi tramite SSH inoltrando la porta loopback del gateway. Vedi Accesso remoto.Selezione del trasporto (criterio del client)
Comportamento client consigliato:- Se è configurato un endpoint diretto associato ed è raggiungibile, usalo.
- Altrimenti, se il rilevamento trova un gateway su
local.o sul dominio wide-area configurato, offri una scelta “Usa questo gateway” con un tocco e salvalo come endpoint diretto. - Altrimenti, se è configurato un DNS/IP tailnet, prova il diretto.
Per i nodi mobili su percorsi tailnet/pubblici, diretto significa un endpoint sicuro, non
ws://remoto in chiaro. - Altrimenti, ripiega su SSH.
Pairing + autenticazione (trasporto diretto)
Il gateway è la fonte di verità per l’ammissione di nodi/client.- Le richieste di pairing vengono create/approvate/rifiutate nel gateway (vedi Pairing del Gateway).
- Il gateway applica:
- autenticazione (token / coppia di chiavi)
- scope/ACL (il gateway non è un proxy grezzo verso ogni metodo)
- limiti di velocità
Responsabilità per componente
- Gateway: pubblicizza i beacon di rilevamento, gestisce le decisioni di pairing e ospita l’endpoint WS.
- App macOS: ti aiuta a scegliere un gateway, mostra prompt di pairing e usa SSH solo come fallback.
- Nodi iOS/Android: esplorano Bonjour come comodità e si connettono al Gateway WS associato.