如何正确的在 Linux 上配置 mDNS

4 min read

mDNS,即 Multicast DNS,允许系统在局域网中广播查询其他资源的名称。这样即使在没有传统 DNS 服务器的局域网内,主机间也可以通过 *.local 的域名相互发现和通信。

对于“普通人”来说,由于对局域网的感知不强,这可能没多大意义。但对于 NAS 用户,就不一样了。mDNS 通过 主机名.local 作为域名,假如我有一台名为「nas」并开启了 mDNS 的主机,那么我用同样开启了 mDNS 的另一台主机就可以直接通过 http//nas.local:xxxx 访问「nas」上部署的服务,也可以用 SSH 通过 username@nas.local 远程登录「nas」。不用设置静态 IP,更不用记静态 IP。

开启了 mDNS 的 NAS 玩家看没有开启 mDNS 的 NAS 玩家,就像 90 年代的人看 80 年代的人上网一样1 —— 愚蠢的原始人竟然还在用四个数字上网!

mDNS 与过时的资料

如果你在别的文章中看到它让你安装 Avahi,你就可以直接退出来了。

不是说 Avahi 不好,相反,它是一个非常棒的软件!但事实上你计算机中的 systemd-resolved 已经提供了一个 mDNS 的完整实现了! 非 systemd 用户当我放屁就好 你根本不需要再额外安装一个“多余”的软件来实现一个已经被实现好了的功能!

只是大多数 Linux 发行版都没有像 Apple 一样,默认开启 mDNS。下面我就来教教大家如何正确的在 Linux 上配置 mDNS。

激活 mDNS

首先,检查一下你手里的计算机是否激活了 mDNS 的解析器和响应器。

systemd-resolve --status

如果你在「Current Scopes」中看到了 mDNS/IPv4mDNS/IPv6,那你就可以直接跳过这一步了。

否则,

你需要在 /etc/systemd/resolved.conf.d/ 目录下新建一个文件 enable-mdns.conf

# /etc/systemd/resolved.conf.d/enable-mdns.conf
[Resolve]
MulticastDNS=yes

连接到网络

接着我们需要将 mDNS 解析器和响应器连接到网络。

如果你使用 NetworkManager

如果你使用的是 NetworkManager,你需要在 /etc/NetworkManager/conf.d/ 目录下新建文件 connect-mdns.conf

# /etc/NetworkManager/conf.d/connect-mdns.conf
[connection]
connection.mdns=2

如果你使用 systemd-networkd

如果你使用的是 systemd-networkd,你需要在 /etc/systemd/network/ 目录下新建文件 connect-mdns.conf:

# /etc/systemd/network/connect-mdns.conf
[Link]
Multicast=yes

然后重启。不出意外的话,mDNS 就配置好了!

Footnotes

  1. DNS 最早于 1983 年由保罗·莫卡派乔斯 (Paul Mockapetris) 发明 (来自 Wikipedia)