Skip to content
广告 · 本站推荐广告

Bonjour 发现

Bonjour(也称 mDNS / DNS-SD,即多播域名系统 / DNS 服务发现)是一种零配置网络协议,允许局域网内的设备自动发现 Gateway 实例。

工作原理

text
┌─────────────────────────────────────────────┐
│              局域网 (LAN)                     │
│                                             │
│  ┌──────────┐    mDNS 广播                   │
│  │  Gateway  │ ──────────────────────────▶  │
│  │  :18789   │    _openclaw._tcp.local      │
│  └──────────┘    TXT: version=1.0           │
│                                             │
│  ┌──────────┐    mDNS 查询                   │
│  │  Client   │ ◀──────────────────────────  │
│  │           │    发现 Gateway               │
│  │           │    192.168.1.10:18789        │
│  └──────────┘                               │
│                                             │
│  ┌──────────┐    自动连接                    │
│  │  Client 2 │ ◀──────────────────────────  │
│  └──────────┘                               │
└─────────────────────────────────────────────┘

mDNS 协议流程

  1. 广播:Gateway 启动时通过 mDNS 广播服务信息
  2. 查询:客户端发送 mDNS 查询(Query),搜索 _openclaw._tcp.local
  3. 响应:Gateway 回复自身的 IP 地址、端口和元数据
  4. 连接:客户端使用发现的信息自动连接

默认行为

Bonjour 发现默认启用。Gateway 启动时会自动注册以下 mDNS 服务:

text
服务类型: _openclaw._tcp.local
端口:     18789
TXT 记录:
  version=1.0
  name=<gateway-name>
  channels=<channel-count>

开箱即用

大多数情况下,Bonjour 发现无需任何配置。同一局域网内的客户端会自动发现 Gateway。

配置

查看当前配置

bash
openclaw config get gateway.discovery.bonjour

完整配置项

json5
{
  "gateway": {
    "discovery": {
      "bonjour": {
        "enabled": true,                    // 启用/禁用 Bonjour
        "serviceName": "OpenClaw Gateway",  // 广播的服务名称
        "serviceType": "_openclaw._tcp",    // mDNS 服务类型
        "txtRecords": {                     // 自定义 TXT 记录
          "description": "My Gateway"
        }
      }
    }
  }
}

自定义服务名称

当局域网内有多个 Gateway 时,自定义名称可帮助客户端区分:

bash
openclaw config set gateway.discovery.bonjour.serviceName "Office Gateway"

禁用 Bonjour

在安全敏感环境中,可能需要禁用自动发现:

bash
openclaw config set gateway.discovery.bonjour.enabled false

何时禁用

如果你的 Gateway 不应被局域网内其他设备发现(例如公共网络环境),请禁用 Bonjour。

平台兼容性

平台mDNS 支持备注
macOS✅ 原生支持Bonjour 由 Apple 创建,macOS 内置支持
Windows✅ 需安装安装 iTunes 或 Bonjour Print Services
Linux✅ 需安装安装 avahi-daemon
iOS✅ 原生支持
Android⚠️ 部分支持NSD (Network Service Discovery)
bash
# Ubuntu/Debian
sudo apt install avahi-daemon avahi-utils

# 启动服务
sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon
bash
# 方式 1:安装 Bonjour Print Services
# 下载:https://support.apple.com/kb/DL999

# 方式 2:使用 chocolatey
choco install bonjour

诊断与调试

查看 mDNS 广播

bash
dns-sd -B _openclaw._tcp local
bash
avahi-browse -r _openclaw._tcp

输出示例:

text
+ eth0 IPv4 OpenClaw Gateway    _openclaw._tcp   local
= eth0 IPv4 OpenClaw Gateway    _openclaw._tcp   local
   hostname = [my-server.local]
   address = [192.168.1.10]
   port = [18789]
   txt = ["version=1.0" "channels=3"]

常见问题

问题原因解决方案
发现不到 GatewaymDNS 流量被防火墙过滤允许 UDP 5353 端口
发现不到 Gateway设备不在同一子网确保在同一局域网段
多个 Gateway 同名未自定义服务名称设置不同的 serviceName
Windows 无法发现未安装 Bonjour 服务安装 Bonjour Print Services
bash
# 检查防火墙是否允许 mDNS
sudo ufw allow 5353/udp

相关文档

基于MIT协议开源 | 内容翻译自 官方文档,同步更新