利用mDNS协议使用局域网local域名服务
作者:matrix 发布时间:2024-06-05 分类:Linux
Multicast DNS(mDNS)协议是一种用于网络设备自动发现的技术。通过mDNS协议,设备可以在局域网内声明自己的主机名,使其他设备不用配置域名DNS即可直接访问,非常方便~ 在Windows、Linux和Mac系统上,mDNS其实早就普及可用。
局域网中存在一台hostname为aaa的计算机,不管它是Windows还是Linux,用aaa.local可以找到它,这就是mDNS的功能
以 Debian 系统为例,为其创建局域网任何设备都可以访问的local
域名。域名前缀就是机器名 hostname
。我这里的名称是debianhs
Linux
Debian下需要安装avahi才能实现 mDNS 功能。avahi-daemon 可以支持 mDNS 的服务,允许设备在局域网内通过主机名相互发现和通信。
安装
sudo apt update
sudo apt install avahi-daemon
查看状态
sudo systemctl start avahi-daemon # 运行服务
sudo systemctl enable avahi-daemon
sudo systemctl status avahi-daemon # 查看服务状态
root@debianhs:~# systemctl status avahi-daemon
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; preset: enabled)
Active: active (running) since Sat 2024-06-01 19:27:36 HKT; 1h 51min ago
TriggeredBy: ● avahi-daemon.socket
Main PID: 720 (avahi-daemon)
Status: "avahi-daemon 0.8 starting up."
Tasks: 2 (limit: 4644)
Memory: 888.0K
CPU: 149ms
CGroup: /system.slice/avahi-daemon.service
├─720 "avahi-daemon: running [debianhs.local]"
└─721 "avahi-daemon: chroot helper"
其他系统
Mac系统自带 mDNS 功能,Windows10及最新系统也都包含。
如果 Windows版本较低可以通过安装 Bonjour Print Services (Windows)来满足。
或者你觉得 mDNS 支持依然不能覆盖到局域网的所有设备,当然你可以通过软路由形式 DNS 服务器来解决。so~ 我就是这样双重覆盖😂
TIPS
mDNS使用的是 5353 端口
如果局域网下存在重复机器名debianhs
,后续加入的设备域名会自动添加后缀 比如 debianhs-2.local
,机器名不会自动更改
参考:
https://en.wikipedia.org/wiki/.local
https://en.wikipedia.org/wiki/Multicast_DNS
https://datatracker.ietf.org/doc/html/rfc6762
https://blog.beanbang.cn/2019/08/07/locate-hosts-using-mdns/
https://wiki.noodlefighter.com/%E8%AE%A1%E7%AE%97%E6%9C%BA/linux/linux%E7%9A%84local%E5%9F%9F%E5%90%8D/