跳到內容

如何透過 Bonjour 與 mDNS 自動發現 OpenClaw Gateway

在開發分散式系統或設定行動裝置連線時,最煩人的莫過於手動輸入 IP 地址。每次更換網路環境,都要重新確認設備 IP,一旦遇到動態分配的情況,連線就直接斷掉,真的非常浪費時間。

OpenClaw 使用 Bonjour (mDNS / DNS-SD) 提供 LAN 專用的便利功能,讓你自動發現啟動中的 Gateway (WebSocket 端點)。這是一種「盡力而為」的連線方式,雖然它不能完全取代 SSH 或 Tailnet,但在區域網路內真的非常好用。

  • OpenClaw Gateway 執行環境
  • macOS、iOS 或 Android 裝置節點
  • Tailscale 帳號(如果你需要跨網域連線)
  • 基礎的 CLI 操作能力

如果你只想在 5 分鐘內搞定跨網域的自動發現,請按照以下步驟操作。

編輯你的 ~/.openclaw/openclaw.json,建議將 Gateway 綁定在 Tailnet 並開啟廣播:

{
gateway: { bind: "tailnet" }, // 建議僅綁定至 tailnet
discovery: { wideArea: { enabled: true } }, // 啟用廣播
}

在 Gateway 主機上執行以下指令,這會安裝 CoreDNS 並自動設定,讓它只在 Tailscale 介面上監聽 port 53:

Terminal window
openclaw dns setup --apply

登入 Tailscale 管理控制台進行以下操作:

  • 新增一個 Nameserver,指向 Gateway 的 Tailscale IP(使用 UDP/TCP 53)。
  • 設定 Split DNS,讓你自定義的網域(例如 openclaw.internal.)指向該 Nameserver。

從另一台連線到 Tailnet 的機器執行以下指令,確認 DNS 是否正常工作:

Terminal window
dns-sd -B _openclaw-gw._tcp openclaw.internal.
dig @<TAILNET_IPV4> -p 53 _openclaw-gw._tcp.openclaw.internal PTR +short

Gateway 會廣播一些不含敏感資訊的提示 (Hints),讓 UI 操作更方便。這些資訊包括:

  • role=gateway
  • displayName=<friendly name>
  • lanHost=<hostname>.local
  • gatewayPort=<port> (Gateway WS + HTTP)
  • gatewayTls=1 (僅在啟用 TLS 時)
  • canvasPort=<port> (預設為 18793)
  • sshPort=<port> (預設為 22)
  • transport=gateway

如果你在 macOS 上遇到問題,可以使用內建工具檢查:

Terminal window
# 瀏覽所有實例
dns-sd -B _openclaw-gw._tcp local.
# 解析特定實例 (請替換 \<instance\>)
dns-sd -L "\<instance\>" _openclaw-gw._tcp local.

如果可以瀏覽但無法解析,通常是 LAN 政策或 mDNS 解析器的問題。

  • Bonjour 無法跨網路:請改用 Tailnet 或 SSH,因為 multicast 預設無法跨越網路邊界。
  • Multicast 被阻擋:部分 Wi-Fi 網路(如公司或公共網路)會禁用 mDNS。
  • 休眠或網路切換:macOS 可能會暫時弄丟 mDNS 結果,請嘗試重新整理。
  • 解析失敗:保持機器名稱簡單,避開表情符號或特殊標點符號,然後重啟 Gateway。
  • 轉義字元 (\032):如果你在名稱中看到 \032,那是空格的轉義,屬於正常現象。

如果你在設定過程遇到任何困難,可以詢問 AI Setup Assistant。

OpenClaw

OpenClaw Expert

還是卡住了?

如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。