如何正确的在 Linux 上配置 mDNS
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/IPv4
和 mDNS/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 就配置好了!