35.4 零配置网络(mDNS/DNS-SD)
零配置网络(Zero-configuration networking,也称 Zeroconf)是一组简化网络配置的技术,使网络设备无需管理员干预即可自动完成地址分配、域名解析与服务发现。
该功能在嵌入式设备上较为实用。在某些场景下,用户无法通过屏幕或串口获取树莓派的 IP 地址,但需通过 SSH 连接。树莓派 OS 默认启用 Avahi 服务且支持多播 DNS,在此情况下用户可直接使用 ping raspberrypi.local 获取 IP 地址,或直接通过 SSH 连接 raspberrypi.local。
零配置网络的主要部分包括:
链路本地寻址
Link-Local Addressing
提供数值型网络地址的自动分配
多播 DNS
mDNS
提供主机名的自动分发与解析
基于 DNS 的服务发现
DNS-SD
提供服务实例的自动发现
Zeroconf 的常用实现是 Avahi。nss-mdns 可在所有使用 nsswitch(名称服务切换,The Name Service Switch,NSS)的工具中,通过 mDNS 协议查找 *.local 后缀的主机名。
应用程序(ping、ssh 等)
│
│ 查询 ykla.local
▼
nsswitch(名称服务切换)
│
│ 按顺序查找:files → dns → mdns
▼
nss-mdns(NSS 模块)
│
│ 发送 mDNS 多播查询(UDP 5353)
▼
Avahi 守护进程(avahi-daemon)
│
│ 响应主机名对应的 IP 地址
▼
应用程序获得 IP 地址安装 Avahi 和 nss-mdns
使用 pkg 安装:
使用 Ports 安装:
配置名称服务切换
dns/nss_mdns 安装以下 NSS 模块:
关于上述模块的说明,参见 avahi/nss-mdns。
/etc/nsswitch.conf 文件是 nsswitch 的配置文件,源代码位于 lib/libc/net/nsswitch.conf,默认文件内容如下:
为了启用 mDNS,需在 hosts: files dns 行后追加 mdns 和 mdns6。
启用服务
D-Bus 作为 Avahi 的依赖自动安装,将其设为开机自启:
启动 D-Bus 服务:
将 Avahi 守护进程设置为开机自启:
启动 Avahi 服务:
测试服务
执行 ping 命令测试 FreeBSD 的主机名,即可显示 IP 地址。
技巧
上述示例中的
ykla、ykla.local为占位符,需要替换为实际的值。
也可查看 IPv6 地址:
与 FreeBSD 主机的实际 IP 地址一致,验证通过。
使用 SSH 连接到该设备:
技巧
本节示例中出现的用户名
ykla及主机名ykla均为示例,请根据自身环境替换为实际用户名和主机名。
最后更新于