Bonjour/mDNS 探索
OpenClaw 使用 Bonjour(mDNS/DNS‑SD)作為僅限 LAN 的便利方式,用來探索 一個啟用中的 Gateway(WebSocket 端點)。此機制屬於盡力而為,不會取代 SSH 或 以 Tailnet 為基礎的連線能力。 It is best‑effort and does not replace SSH or Tailnet-based connectivity. It is best‑effort and does not replace SSH or Tailnet-based connectivity.透過 Tailscale 的廣域 Bonjour(單播 DNS‑SD)
如果節點與閘道位於不同的網路上,多播 mDNS 將無法跨越 boundary. You can keep the same discovery UX by switching to unicast DNS‑SD (“Wide‑Area Bonjour”) over Tailscale. 高層級步驟:- 在閘道器主機上執行一個 DNS 伺服器(可透過 Tailnet 存取)。
- 在專用網域下發布
_openclaw-gw._tcp的 DNS‑SD 記錄 (範例:openclaw.internal.)。 - 設定 Tailscale 的分割 DNS,讓你選擇的網域透過該 DNS 伺服器解析給用戶端(包含 iOS)。
openclaw.internal. 僅為範例。
iOS/Android 節點會同時瀏覽 local. 與你設定的廣域網域。
iOS/Android nodes browse both local. and your configured wide‑area domain.
iOS/Android nodes browse both local. and your configured wide‑area domain.
Gateway 設定(建議)
一次性的 DNS 伺服器設定(閘道器主機)
- 僅在 Gateway 的 Tailscale 介面上於連接埠 53 監聽
- 從
~/.openclaw/dns/<domain>.db服務你選擇的網域(範例:openclaw.internal.)
Tailscale DNS 設定
在 Tailscale 管理主控台中:- 新增一個指向 Gateway tailnet IP 的名稱伺服器(UDP/TCP 53)。
- 新增分割 DNS,讓你的探索網域使用該名稱伺服器。
_openclaw-gw._tcp,而不需要多播。
Gateway 監聽器安全性(建議)
Gateway 的 WS 連接埠(預設為18789)預設只綁定在 loopback。若需 LAN/tailnet
存取,請明確綁定並保持啟用驗證。 For LAN/tailnet
access, bind explicitly and keep auth enabled. For LAN/tailnet
access, bind explicitly and keep auth enabled.
僅限 tailnet 的設定:
- 在
~/.openclaw/openclaw.json中設定gateway.bind: "tailnet"。 - 重新啟動 Gateway(或重新啟動 macOS 選單列應用程式)。
What advertises
只有 Gateway 會廣播_openclaw-gw._tcp。
服務類型
_openclaw-gw._tcp— Gateway 傳輸信標(供 macOS/iOS/Android 節點使用)。
TXT 金鑰(非機密提示)
Gateway 會廣播小型、非機密的提示,以便利 UI 流程:role=gatewaydisplayName=<friendly name>lanHost=<hostname>.localgatewayPort=<port>(Gateway WS+HTTP)gatewayTls=1(僅在啟用 TLS 時)gatewayTlsSha256=<sha256>(僅在啟用 TLS 且指紋可用時)canvasPort=<port>(僅在啟用畫布主機時;預設18793)sshPort=<port>(未覆寫時預設為 22)transport=gatewaycliPath=<path>(選用;可執行的openclaw進入點之絕對路徑)tailnetDns=<magicdns>(當 Tailnet 可用時的選用提示)
- Bonjour/mDNS TXT 記錄是未經驗證的。 用戶端不得將 TXT 視為具權威性的路由資訊。
- 用戶端應使用解析後的服務端點(SRV + A/AAAA)進行路由。
lanHost、tailnetDns、gatewayPort與gatewayTlsSha256僅應視為提示資訊。 - TLS pinning 絕不可允許已公告的
gatewayTlsSha256覆蓋先前儲存的 pin。 - iOS/Android 節點應將基於探索的直接連線視為僅限 TLS,並在信任首次出現的指紋前要求使用者明確確認。
在 macOS 上除錯
實用的內建工具:-
瀏覽實例:
-
解析單一實例(取代
<instance>):
在 Gateway 記錄中除錯
Gateway 會寫入輪替的記錄檔(在啟動時列印為gateway log file: ...)。請留意 bonjour: 行,特別是: Look for bonjour: lines, especially: Look for bonjour: lines, especially:
bonjour: advertise failed ...bonjour: ... name conflict resolved/hostname conflict resolvedbonjour: watchdog detected non-announced service ...
Debugging on iOS node
iOS 節點使用NWBrowser 來探索 _openclaw-gw._tcp。
To capture logs:
- 設定 → Gateway → 進階 → 探索除錯記錄
- 設定 → Gateway → 進階 → 探索記錄 → 重現 → 複製
常見失敗模式
- Bonjour 無法跨網路:請使用 Tailnet 或 SSH。
- 多播被封鎖:某些 Wi‑Fi 網路會停用 mDNS。
- 睡眠/介面變動:macOS 可能暫時遺失 mDNS 結果;請重試。
- 瀏覽可行但解析失敗:請保持機器名稱簡單(避免表情符號或 標點符號),然後重新啟動 Gateway。服務實例名稱源自主機名稱, 過於複雜的名稱可能會讓某些解析器混淆。 瀏覽可行但解析失敗:請保持機器名稱簡單(避免表情符號或 標點符號),然後重新啟動 Gateway。服務實例名稱源自主機名稱, 過於複雜的名稱可能會讓某些解析器混淆。 The service instance name derives from the host name, so overly complex names can confuse some resolvers.
Escaped instance names (\032)
Bonjour/DNS‑SD 常會在服務實例名稱中,以十進位 \DDD
序列來轉義位元組(例如空白會變成 \032)。
- This is normal at the protocol level.
- UI 應該在顯示時解碼(iOS 使用
BonjourEscapes.decode)。
停用/設定
OPENCLAW_DISABLE_BONJOUR=1會停用廣播(舊版:OPENCLAW_DISABLE_BONJOUR)。gateway.bind於~/.openclaw/openclaw.json中控制 Gateway 的綁定模式。OPENCLAW_SSH_PORT會覆寫 TXT 中廣播的 SSH 連接埠(舊版:OPENCLAW_SSH_PORT)。OPENCLAW_TAILNET_DNS會在 TXT 中發布 MagicDNS 提示(舊版:OPENCLAW_TAILNET_DNS)。OPENCLAW_CLI_PATHoverrides the advertised CLI path (legacy:OPENCLAW_CLI_PATH).
Related docs
- 探索政策與傳輸選擇:Discovery
- 節點配對與核准:Gateway pairing