Wykrywanie i transporty
OpenClaw ma dwa odrębne problemy, które na pierwszy rzut oka wyglądają podobnie:- Zdalne sterowanie przez operatora: aplikacja paska menu macOS kontrolująca Gateway uruchomiony gdzie indziej.
- Parowanie węzłów: iOS/Android (oraz przyszłe węzły) odnajdujące Gateway i bezpiecznie parujące się z nim.
openclaw gateway) oraz traktowanie klientów (aplikacja macOS, iOS) wyłącznie jako konsumentów.
Regulamin
- Gateway: pojedynczy, długotrwale działający proces Gateway, który posiada stan (sesje, parowanie, rejestr węzłów) i uruchamia kanały. Większość konfiguracji używa jednego na host; możliwe są izolowane konfiguracje z wieloma Gateway.
- Gateway WS (płaszczyzna sterowania): punkt końcowy WebSocket na
127.0.0.1:18789domyślnie; może być powiązany z LAN/tailnet za pomocągateway.bind. - Bezpośredni transport WS: punkt końcowy Gateway WS dostępny z LAN/tailnet (bez SSH).
- Transport SSH (awaryjny): zdalne sterowanie przez przekazywanie
127.0.0.1:18789przez SSH. - Starszy most TCP (przestarzały/usunięty): starszy transport węzłów (zob. Bridge protocol); nie jest już reklamowany do wykrywania.
Dlaczego utrzymujemy zarówno „bezpośredni”, jak i SSH
- Bezpośredni WS zapewnia najlepsze UX w tej samej sieci i w obrębie tailnet:
- automatyczne wykrywanie w LAN przez Bonjour
- tokeny parowania i ACL-e zarządzane przez Gateway
- brak potrzeby dostępu do powłoki; powierzchnia protokołu może pozostać wąska i audytowalna
- SSH pozostaje uniwersalnym rozwiązaniem awaryjnym:
- działa wszędzie tam, gdzie masz dostęp SSH (nawet między niepowiązanymi sieciami)
- radzi sobie z problemami multicast/mDNS
- nie wymaga nowych portów przychodzących poza SSH
Wejścia wykrywania (jak klienci dowiadują się, gdzie jest Gateway)
1. Bonjour / mDNS (tylko LAN)
Bonjour działa w trybie best-effort i nie przekracza granic sieci. Jest używany wyłącznie dla wygody w „tej samej sieci LAN”. Kierunek docelowy:- Gateway reklamuje swój punkt końcowy WS przez Bonjour.
- Klienci przeglądają i wyświetlają listę „wybierz Gateway”, a następnie zapisują wybrany punkt końcowy.
Szczegóły beaconu usługi
- Typy usług:
_openclaw-gw._tcp(beacon transportu Gateway)
- Klucze TXT (niejawne):
role=gatewaylanHost=<hostname>.localsshPort=22(lub cokolwiek jest reklamowane)gatewayPort=18789(Gateway WS + HTTP)gatewayTls=1(tylko gdy TLS jest włączony)gatewayTlsSha256=<sha256>(tylko gdy TLS jest włączony i dostępny jest odcisk palca)canvasPort=18793(domyślny port hosta canvas; serwuje/__openclaw__/canvas/)cliPath=<path>(opcjonalne; bezwzględna ścieżka do uruchamialnego punktu wejścia lub binarkiopenclaw)tailnetDns=<magicdns>(opcjonalna wskazówka; wykrywana automatycznie, gdy dostępny jest Tailscale)
- Rekordy TXT Bonjour/mDNS są nieuwierzytelnione. Klienci powinni traktować wartości TXT wyłącznie jako wskazówki UX.
- Routing (host/port) powinien preferować rozwiązany endpoint usługi (SRV + A/AAAA) zamiast
lanHost,tailnetDnslubgatewayPortpodanych w TXT. - Pinowanie TLS nigdy nie może pozwalać, aby reklamowany
gatewayTlsSha256nadpisywał wcześniej zapisany pin. - Węzły iOS/Android powinny traktować bezpośrednie połączenia oparte na discovery jako wyłącznie TLS oraz wymagać jawnego potwierdzenia „zaufaj temu fingerprintowi” przed zapisaniem pina przy pierwszym użyciu (weryfikacja poza pasmem).
OPENCLAW_DISABLE_BONJOUR=1wyłącza reklamowanie.gateway.bindw~/.openclaw/openclaw.jsonkontroluje tryb powiązania Gateway.OPENCLAW_SSH_PORTzastępuje port SSH reklamowany w TXT (domyślnie 22).OPENCLAW_TAILNET_DNSpublikuje wskazówkętailnetDns(MagicDNS).OPENCLAW_CLI_PATHzastępuje reklamowaną ścieżkę CLI.
2. Tailnet (między sieciami)
Dla konfiguracji w stylu Londyn/Wiedeń Bonjour nie pomoże. Zalecanym celem „bezpośrednim” jest:- nazwa MagicDNS Tailscale (preferowana) lub stabilny adres IP w tailnet.
tailnetDns jako opcjonalną wskazówkę dla klientów (w tym w beaconach szerokiego zasięgu).
3. Cel ręczny / SSH
Gdy nie ma trasy bezpośredniej (lub bezpośrednia jest wyłączona), klienci zawsze mogą połączyć się przez SSH, przekazując port Gateway na local loopback. Zobacz Remote access.Wybór transportu (polityka klienta)
Zalecane zachowanie klienta:- Jeśli sparowany bezpośredni punkt końcowy jest skonfigurowany i osiągalny, użyj go.
- W przeciwnym razie, jeśli Bonjour znajdzie Gateway w LAN, zaoferuj jednorazowy wybór „Użyj tego Gateway” i zapisz go jako bezpośredni punkt końcowy.
- W przeciwnym razie, jeśli skonfigurowano DNS/IP tailnet, spróbuj bezpośrednio.
- W przeciwnym razie użyj SSH jako rozwiązania awaryjnego.
Parowanie i uwierzytelnianie (transport bezpośredni)
Gateway jest źródłem prawdy w zakresie dopuszczania węzłów/klientów.- Żądania parowania są tworzone/zatwierdzane/odrzucane w Gateway (zob. Gateway pairing).
- Gateway egzekwuje:
- uwierzytelnianie (token / para kluczy)
- zakresy/ACL-e (Gateway nie jest surowym proxy do każdej metody)
- limity szybkości
Odpowiedzialności według komponentu
- Gateway: reklamuje beacony wykrywania, podejmuje decyzje parowania i hostuje punkt końcowy WS.
- Aplikacja macOS: pomaga wybrać Gateway, pokazuje monity parowania i używa SSH wyłącznie jako rozwiązania awaryjnego.
- Węzły iOS/Android: przeglądają Bonjour jako udogodnienie i łączą się z sparowanym Gateway WS.