利用mDNS协议使用局域网local域名服务

作者:matrix 发布时间:2024-06-05 分类:Linux

Multicast DNSmDNS)协议是一种用于网络设备自动发现的技术。通过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/

Windows 10如何ping计算机名之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/