mDNS 是什么(局域网 mDNS)
mDNS = Multicast DNS,多播域名系统,是在局域网内(同一个子网,不用路由器公网DNS)工作的轻量DNS协议,核心作用:在局域网里,不用记IP地址,直接用域名访问设备。
标准DNS是单播,要找DNS服务器;mDNS是多播,不需要单独DNS服务器,设备自己广播、互相发现。
mDNS域名固定后缀:.local,这是标志性特征。
简单例子
同一个WiFi/局域网里:
- 你的Mac电脑主机名
MacBook.local - 树莓派
raspberrypi.local - 打印机、NAS、HomeAssistant、苹果AirPlay、Chromecast都大量用mDNS
你直接在浏览器/ssh输入 raspberrypi.local,mDNS会自动解析成它的局域网IP,不用手动查192.168.x.x。
工作原理(一句话版)
- 局域网内设备开机,向224.0.0.251(IPv4多播地址)/ FF02::FB(IPv6)广播宣告:“我的名字xxx.local,IP是xxx”
- 同局域网所有支持mDNS的设备都会收到这条消息,存入本地缓存
- 当你访问
xxx.local,设备在局域网内多播查询,其他设备应答,拿到IP
和配套协议:DNS-SD
mDNS常和 DNS-SD(DNS Service Discovery,DNS服务发现)一起使用,很多人混叫mDNS。
- mDNS:解析名字→IP(域名解析)
- DNS-SD:发现有什么服务,比如局域网有哪些打印机、视频串流、网页服务
AirDrop、AirPlay、打印机自动发现、HomeKit、Avahi、Bonjour 底层就是 mDNS+DNS-SD
- Bonjour:苹果实现的mDNS+DNS-SD
- Avahi:Linux下开源实现(树莓派常用)
特点
✅ 优点
- 无中心服务器,路由器不需要特殊设置,设备之间互相通信
- 即插即用,设备接入局域网自动被发现
- IPv4、IPv6都支持
⚠️ 限制(重点,只在同一广播域)
- 默认不能跨网段/跨VLAN。路由器默认不转发多播包,所以A网段的mDNS广播到不了B网段;跨网段要用mDNS中继(Avahi reflector、mdns-repeater)
- 只适用于局域网,
.local域名公网不能解析 - 多播会产生少量局域网广播流量,大量设备环境下会增加网络负载
常见应用场景
- 苹果生态:AirDrop、AirPlay、隔空打印
- 智能家居:HomeKit设备发现
- 嵌入式设备:树莓派、ESP32、NAS
- 局域网打印机自动搜索
- 服务发现:在局域网自动列出所有可用web服务
Windows注意
Windows默认原生不带mDNS,Win10/11需要开启:
- 安装「Bonjour打印服务」或者开启
Function Discovery Resource Publication服务,才能解析.local
快速测试
ping raspberrypi.local
在支持mDNS的电脑上:
ping raspberrypi.local
能直接ping通对应的局域网IP,就是mDNS生效。
如果你需要,我可以补充:
- mDNS跨VLAN中继部署(mdns-repeater)
- 抓包看mDNS报文示例
- 或者 Avahi 配置实操
你想了解哪部分?