mDNS 为什么不跨网段
mDNS 用组播(224.0.0.251 的 5353 端口)在本地广播域内做名称解析,路由器默认不转发组播。因此 iPhone 投屏、AirPrint 打印这类靠 mDNS 发现的服务,一跨 VLAN 就失效。表现很典型:同一个 SSID 下能发现设备,换到别的网段就发现不了。
原理与方案
| 原理 | mDNS 使用组播 224.0.0.251:5353,默认限于本广播域 |
|---|---|
| 症状 | 同 SSID 可发现、跨网段不可发现,iOS 与 macOS 最明显 |
| 方案一 | 部署 mDNS 网关或中继(如 Avahi reflector),指定需要互通的 VLAN |
| 方案二 | 把需要互相发现的设备收敛到同一 VLAN 或同一 SSID |
| 注意 | 访客隔离会连带阻断 mDNS,投屏类需求要定向规划 |
四种处理方式的取舍
| 方式 | 做法 | 取舍 |
|---|---|---|
| 同 VLAN 收敛 | 客户端与目标设备放同一网段 | 简单可靠,但网段规划受限 |
| mDNS 中继 | 在指定 VLAN 之间转发 mDNS | 灵活,但必须控制转发范围 |
| 定向放通 | 只允许特定设备与端口互通 | 安全,但配置复杂度高 |
| 关闭客户端隔离 | 整体放开隔离 | 风险大,不建议作为常规方案 |
验证方法
验证方法
# 从客户端测试 mDNS 解析
avahi-resolve -n device.local # Linux
# Windows:ping device.local(解析失败即说明不通)
# 抓包确认组播是否被转发
# Wireshark 过滤表达式
mdns典型受影响的业务
- AirPlay 与屏幕投送:发现不到接收端,或者只能单向投送
- AirPrint 与网络打印:打印机列表里长期看不到设备
- 智能家居 App 的本地发现:跨 VLAN 时设备显示离线
- 会议终端与摄像头的自动配对:必须在同一发现域内
- 局域网 .local 主机名解析:Linux 与 macOS 之间互相找不到
访客网络默认隔离会连带阻断 mDNS。投屏类需求应该单独规划,而不是把整个隔离关掉,否则安全面会明显扩大。
在多个 VLAN 之间无差别开启 mDNS 中继,会让发现域流量膨胀,干扰排查难度上升。应按需指定需要互通的 VLAN 组合。