Gateway
Wykrywanie Bonjour
OpenClaw może używać Bonjour (mDNS/DNS-SD) do wykrywania aktywnego Gateway (punktu końcowego WebSocket). Przeglądanie multiemisji local. jest udogodnieniem działającym wyłącznie w sieci LAN: dołączony Plugin bonjour odpowiada za rozgłaszanie w sieci LAN, uruchamiając się automatycznie na hostach macOS, a na systemach Linux, Windows i we wdrożeniach Gateway w kontenerach wymaga jawnego włączenia. Ten sam sygnał może być również publikowany za pośrednictwem skonfigurowanej domeny DNS-SD sieci rozległej, aby umożliwić wykrywanie między sieciami. Wykrywanie działa na zasadzie najlepszej dostępnej możliwości i nie zastępuje łączności opartej na SSH ani Tailnet.
Bonjour w sieci rozległej (DNS-SD unicast) przez Tailscale
Jeśli Node i Gateway znajdują się w różnych sieciach, multiemisja mDNS nie może przekroczyć ich granicy. Zachowaj ten sam sposób wykrywania, przełączając się na DNS-SD unicast („Bonjour sieci rozległej”) przez Tailscale:
- Uruchom serwer DNS na hoście Gateway, dostępny przez Tailnet.
- Opublikuj rekordy DNS-SD dla
_openclaw-gw._tcpw dedykowanej strefie (przykład:openclaw.internal.). - Skonfiguruj w Tailscale dzielony DNS, aby wybrana domena była rozwiązywana dla klientów, w tym iOS, przez ten serwer DNS.
Powyższa domena openclaw.internal. jest tylko przykładem — OpenClaw obsługuje dowolną domenę wykrywania. Węzły iOS/Android przeglądają zarówno domenę local., jak i skonfigurowaną domenę sieci rozległej.
Konfiguracja Gateway
{ gateway: { bind: "tailnet" }, // tailnet-only (recommended) discovery: { wideArea: { enabled: true, domain: "openclaw.internal" } },}Gdy discovery.wideArea.domain nie jest ustawione, jako wartość zapasową można również podać zmienną środowiskową OPENCLAW_WIDE_AREA_DOMAIN.
Jednorazowa konfiguracja serwera DNS (host Gateway, tylko macOS)
openclaw dns setup --applyTo polecenie działa tylko w systemie macOS i wymaga Homebrew oraz aktywnego połączenia Tailscale. Instaluje CoreDNS (brew install coredns) i konfiguruje go tak, aby:
- nasłuchiwał na porcie 53 wyłącznie na interfejsach Tailscale hosta Gateway
- obsługiwał wybraną domenę (przykład:
openclaw.internal.) z pliku~/.openclaw/dns/<domain>.db
Najpierw uruchom polecenie bez --apply, aby wyświetlić podgląd planu (domenę, ścieżkę pliku strefy, wykryty adres IP Tailnet i zalecaną konfigurację) bez instalowania czegokolwiek.
Sprawdź działanie z komputera połączonego z Tailnet:
dns-sd -B _openclaw-gw._tcp openclaw.internal.dig @<TAILNET_IPV4> -p 53 _openclaw-gw._tcp.openclaw.internal PTR +shortUstawienia DNS Tailscale
W konsoli administracyjnej Tailscale:
- Dodaj serwer nazw wskazujący adres IP Tailnet hosta Gateway (UDP/TCP 53).
- Dodaj dzielony DNS, aby domena wykrywania korzystała z tego serwera nazw.
Gdy klienci zaakceptują DNS Tailnet, węzły iOS oraz mechanizm wykrywania CLI mogą przeglądać _openclaw-gw._tcp w domenie wykrywania bez multiemisji.
Bezpieczeństwo nasłuchiwania Gateway
Port WS Gateway (domyślnie 18789) jest domyślnie wiązany z interfejsem local loopback. Aby uzyskać dostęp przez LAN/Tailnet, jawnie skonfiguruj wiązanie i pozostaw uwierzytelnianie włączone. W konfiguracjach używających wyłącznie Tailnet ustaw gateway.bind: "tailnet" w pliku ~/.openclaw/openclaw.json i ponownie uruchom Gateway (lub aplikację paska menu macOS).
Co jest rozgłaszane
Tylko Gateway rozgłasza _openclaw-gw._tcp. Za rozgłaszanie multiemisji w sieci LAN odpowiada dołączony Plugin bonjour, gdy jest włączony; publikowanie DNS-SD w sieci rozległej pozostaje zadaniem Gateway.
Typy usług
_openclaw-gw._tcp— sygnał transportowy Gateway używany przez węzły macOS/iOS/Android.
Klucze TXT (wskazówki niezawierające danych poufnych)
| Klucz | Kiedy występuje |
|---|---|
role=gateway |
Zawsze. |
displayName=<friendly name> |
Zawsze. |
lanHost=<hostname>.local |
Zawsze. |
gatewayPort=<port> |
Zawsze (WS + HTTP Gateway). |
transport=gateway |
Zawsze. |
gatewayTls=1 |
Tylko gdy TLS jest włączony. |
gatewayTlsSha256=<sha256> |
Tylko gdy TLS jest włączony i dostępny jest odcisk. |
gatewayDirectReachable=1 |
Tylko gdy Gateway jest dostępny bezpośrednio (a nie wyłącznie przez ścieżkę przekaźnika/serwera proxy). |
canvasPort=<port> |
Tylko gdy host obszaru roboczego jest włączony; obecnie jest taki sam jak gatewayPort. |
tailnetDns=<magicdns> |
Tylko w pełnym trybie mDNS; opcjonalna wskazówka, gdy Tailnet jest dostępny. |
sshPort=<port> |
Tylko w pełnym trybie; pomijany w trybach minimalnym i wyłączonym. |
cliPath=<path> |
Tylko w pełnym trybie; pomijany w trybach minimalnym i wyłączonym. |
Uwagi dotyczące bezpieczeństwa:
- Rekordy TXT Bonjour/mDNS nie są uwierzytelniane. Klienci nie mogą traktować rekordów TXT jako wiarygodnego źródła informacji o routingu.
- Klienci powinni wyznaczać trasę przy użyciu rozwiązanego punktu końcowego usługi (SRV + A/AAAA). Wartości
lanHost,tailnetDns,gatewayPortigatewayTlsSha256należy traktować wyłącznie jako wskazówki. - Automatyczne wybieranie celu SSH powinno analogicznie używać rozwiązanego hosta usługi, a nie wskazówek pochodzących wyłącznie z TXT.
- Przypinanie TLS nigdy nie może pozwalać, aby rozgłaszana wartość
gatewayTlsSha256zastąpiła wcześniej zapisane przypięcie. - Węzły iOS/Android powinny traktować bezpośrednie połączenia oparte na wykrywaniu jako obsługujące wyłącznie TLS i wymagać wyraźnego potwierdzenia użytkownika przed zaufaniem odciskowi widzianemu po raz pierwszy.
Debugowanie w systemie macOS
Wbudowane narzędzia:
# Browse instancesdns-sd -B _openclaw-gw._tcp local. # Resolve one instance (replace <instance>)dns-sd -L "<instance>" _openclaw-gw._tcp local.Jeśli przeglądanie działa, ale rozwiązywanie kończy się niepowodzeniem, zwykle przyczyną jest polityka sieci LAN lub problem z mechanizmem rozwiązywania mDNS.
Debugowanie w dziennikach Gateway
Gateway zapisuje rotacyjny plik dziennika (wyświetlany podczas uruchamiania jako gateway log file: ...). Szukaj wierszy bonjour:, zwłaszcza:
bonjour: advertise failed ...bonjour: suppressing ciao cancellation ...bonjour: ... name conflict resolved/hostname conflict resolvedbonjour: watchdog detected non-announced service ...bonjour: disabling advertiser after ... failed restarts ...
Mechanizm nadzorujący traktuje aktywne stany probing, announcing oraz niedawne zmiany nazw po konfliktach jako operacje w toku. Jeśli usługa nigdy nie osiągnie stanu announced, OpenClaw ponownie tworzy mechanizm rozgłaszający, a po kolejnych niepowodzeniach wyłącza Bonjour dla danego procesu Gateway, zamiast bez końca ponawiać rozgłaszanie.
Bonjour używa systemowej nazwy hosta dla rozgłaszanego hosta .local, jeśli jest ona prawidłową etykietą DNS. Jeśli systemowa nazwa hosta zawiera spacje, podkreślenia lub inny znak niedozwolony w etykiecie DNS, OpenClaw używa wartości zapasowej openclaw.local. Jeśli potrzebujesz jawnie określonej etykiety hosta, ustaw OPENCLAW_MDNS_HOSTNAME=<name> przed uruchomieniem Gateway.
Debugowanie w węźle iOS
Węzeł iOS używa NWBrowser do wykrywania _openclaw-gw._tcp.
Aby przechwycić dzienniki: Ustawienia -> Gateway -> Zaawansowane -> Dzienniki debugowania wykrywania, następnie Ustawienia -> Gateway -> Zaawansowane -> Dzienniki wykrywania -> odtwórz problem -> Kopiuj. Dziennik zawiera zmiany stanów przeglądarki i zestawu wyników.
Kiedy włączyć Bonjour
Bonjour uruchamia się automatycznie przy uruchamianiu Gateway z pustą konfiguracją na hostach macOS, ponieważ lokalna aplikacja oraz pobliskie węzły iOS/Android często korzystają z wykrywania w tej samej sieci LAN.
Włącz go jawnie, gdy automatyczne wykrywanie w tej samej sieci LAN jest przydatne w systemie Linux, Windows lub na innym hoście bez macOS:
openclaw plugins enable bonjourGdy Bonjour jest włączony, używa discovery.mdns.mode do określenia ilości publikowanych metadanych TXT; ten sam tryb steruje opcjonalnymi wskazówkami TXT w rekordach DNS-SD sieci rozległej. Tryby:
| Tryb | Działanie |
|---|---|
minimal (domyślny) |
Tylko podstawowe klucze TXT; pomija sshPort, cliPath, tailnetDns. |
full |
Dodaje sshPort, cliPath, tailnetDns — używaj, gdy klienci potrzebują tych wskazówek. |
off |
Wyłącza multiemisję w sieci LAN bez zmiany stanu włączenia Pluginu; DNS-SD sieci rozległej nadal może publikować minimalny sygnał, gdy discovery.wideArea.enabled ma wartość true. |
Kiedy wyłączyć Bonjour
Pozostaw Bonjour wyłączony, gdy rozgłaszanie multiemisji w sieci LAN jest zbędne, niedostępne lub szkodliwe — typowe przypadki to serwery bez macOS, sieci mostkowe Docker, WSL lub polityka sieciowa odrzucająca multiemisję mDNS. Gateway pozostaje dostępny przez opublikowany adres URL, SSH, Tailnet lub DNS-SD sieci rozległej; zawodny jest jedynie mechanizm automatycznego wykrywania w sieci LAN.
Użyj zmiennej środowiskowej, gdy problem dotyczy konkretnego wdrożenia (jest to bezpieczne dla obrazów Docker, plików usług, skryptów uruchamiających i jednorazowego debugowania — ustawienie znika wraz ze środowiskiem):
OPENCLAW_DISABLE_BONJOUR=1Użyj konfiguracji Pluginu, gdy celowo chcesz wyłączyć dołączony Plugin wykrywania w sieci LAN dla danej konfiguracji OpenClaw:
openclaw plugins disable bonjourPułapki związane z Docker
Dołączony Plugin Bonjour automatycznie wyłącza rozgłaszanie multiemisji w sieci LAN w wykrytych kontenerach, gdy OPENCLAW_DISABLE_BONJOUR nie jest ustawione. Sieci mostkowe Docker zwykle nie przekazują multiemisji mDNS (224.0.0.251:5353) między kontenerem a siecią LAN, dlatego rozgłaszanie z kontenera rzadko umożliwia działanie wykrywania.
Pułapki:
- Bonjour uruchamia się automatycznie na hostach macOS, a w innych systemach wymaga jawnego włączenia. Pozostawienie go wyłączonego nie zatrzymuje Gateway — pomija jedynie rozgłaszanie multiemisji w sieci LAN.
- Wyłączenie Bonjour nie zmienia
gateway.bind; Docker nadal domyślnie używaOPENCLAW_GATEWAY_BIND=lan, dzięki czemu opublikowany port hosta działa. - Wyłączenie Bonjour nie wyłącza DNS-SD sieci rozległej. Gdy Gateway i Node nie znajdują się w tej samej sieci LAN, użyj wykrywania w sieci rozległej lub Tailnet.
- Ponowne użycie tego samego
OPENCLAW_CONFIG_DIRpoza Docker nie utrwala zasad automatycznego wyłączania stosowanych w kontenerze. - Ustaw
OPENCLAW_DISABLE_BONJOUR=0tylko dla sieci hosta, macvlan lub innej sieci, o której wiadomo, że przepuszcza multiemisję mDNS; ustaw wartość1, aby wymusić wyłączenie.
Rozwiązywanie problemów z wyłączonym Bonjour
Jeśli po skonfigurowaniu Docker Node przestanie automatycznie wykrywać Gateway:
-
Sprawdź, czy Gateway działa w trybie automatycznym, wymuszonego włączenia czy wymuszonego wyłączenia:
bash docker compose config | grep OPENCLAW_DISABLE_BONJOUR -
Sprawdź, czy sam Gateway jest dostępny przez opublikowany port:
bash curl -fsS http://127.0.0.1:18789/healthz -
Gdy Bonjour jest wyłączony, użyj bezpośredniego celu:
- Interfejs sterowania lub narzędzia lokalne:
http://127.0.0.1:18789 - Klienci LAN:
http://<gateway-host>:18789 - Klienci w innych sieciach: MagicDNS Tailnet, adres IP Tailnet, tunel SSH lub DNS-SD sieci rozległej
- Interfejs sterowania lub narzędzia lokalne:
-
Jeśli celowo włączono Plugin Bonjour w Docker i wymuszono rozgłaszanie za pomocą
OPENCLAW_DISABLE_BONJOUR=0, przetestuj multiemisję z hosta:bash dns-sd -B _openclaw-gw._tcp local.Jeśli przeglądanie nie zwraca wyników lub dzienniki Gateway pokazują powtarzające się anulowania mechanizmu nadzorującego ciao, przywróć
OPENCLAW_DISABLE_BONJOUR=1i użyj trasy bezpośredniej lub Tailnet.
Typowe tryby awarii
- Bonjour nie działa między sieciami: użyj Tailnetu lub SSH.
- Multiemisja jest zablokowana: niektóre sieci Wi-Fi wyłączają mDNS.
- Moduł rozgłaszający utknął w fazie sondowania/ogłaszania: hosty z zablokowaną multiemisją, mosty kontenerów, WSL lub częste zmiany interfejsów mogą pozostawić moduł rozgłaszający ciao w stanie bez ogłoszenia. OpenClaw ponawia próbę kilka razy, a następnie wyłącza Bonjour dla bieżącego procesu Gateway, zamiast bez końca ponownie uruchamiać moduł rozgłaszający.
- Sieć mostkowa Dockera: Bonjour jest automatycznie wyłączany w wykrytych kontenerach. Ustaw
OPENCLAW_DISABLE_BONJOUR=0tylko dla sieci hosta, macvlan lub innej sieci obsługującej mDNS. - Uśpienie/zmiany interfejsów: macOS może tymczasowo przestać zwracać wyniki mDNS; ponów próbę.
- Przeglądanie działa, ale rozpoznawanie nie: używaj prostych nazw komputerów (unikaj emoji i znaków interpunkcyjnych), a następnie uruchom ponownie Gateway. Nazwa instancji usługi pochodzi od nazwy hosta, dlatego zbyt złożone nazwy mogą sprawiać problemy niektórym mechanizmom rozpoznawania.
Nazwy instancji ze znakami ucieczki (\032)
Bonjour/DNS-SD często zapisuje bajty w nazwach instancji usług jako dziesiętne sekwencje \DDD (spacje stają się \032). Jest to normalne na poziomie protokołu; interfejsy użytkownika powinny je dekodować na potrzeby wyświetlania (iOS używa BonjourEscapes.decode).
Włączanie / wyłączanie / konfiguracja
| Ustawienie | Efekt |
|---|---|
openclaw plugins enable bonjour |
Włącza dołączony Plugin wykrywania w sieci LAN na hostach, na których nie jest domyślnie włączony. |
openclaw plugins disable bonjour |
Wyłącza rozgłaszanie multiemisji w sieci LAN przez wyłączenie dołączonego Pluginu. |
OPENCLAW_DISABLE_BONJOUR=1 (lub true/yes/on) |
Wyłącza rozgłaszanie multiemisji w sieci LAN bez zmiany konfiguracji Pluginu. |
OPENCLAW_DISABLE_BONJOUR=0 (lub false/no/off) |
Wymusza rozgłaszanie multiemisji w sieci LAN, również wewnątrz wykrytych kontenerów. |
discovery.mdns.mode |
off | minimal (domyślnie) | full — zobacz tryby powyżej. |
gateway.bind |
Określa tryb powiązania Gateway w ~/.openclaw/openclaw.json. |
OPENCLAW_SSH_PORT |
Zastępuje port SSH, gdy rozgłaszany jest sshPort (tryb pełny). |
OPENCLAW_TAILNET_DNS |
Publikuje wskazówkę MagicDNS w rekordzie TXT, gdy włączony jest pełny tryb mDNS. |
OPENCLAW_CLI_PATH |
Zastępuje rozgłaszaną ścieżkę CLI (tryb pełny). |
Hosty z systemem macOS domyślnie automatycznie uruchamiają dołączony Plugin wykrywania w sieci LAN. Gdy Plugin Bonjour jest włączony, a zmienna OPENCLAW_DISABLE_BONJOUR nie jest ustawiona, Bonjour rozgłasza usługi na zwykłych hostach i automatycznie wyłącza się wewnątrz wykrytych kontenerów (Docker, maszyny Fly.io i popularne środowiska uruchomieniowe kontenerów).
Powiązana dokumentacja
- Zasady wykrywania i wybór transportu: Wykrywanie
- Parowanie Node + zatwierdzenia: Parowanie Gateway