大多数 Linux 用户通常在没有复杂 DNS 服务的路由器上拥有多个 Linux 系统。本文将介绍一种方法,让你不必修改 /etc/hosts 之类文件的情况下实现按名称与多个系统通信。
mDNS 是一种零配置网络服务,它允许系统在本地网络上按名称广播查询其他资源。大多数 Linux 都提供一个包含 mDNS 的零配置的软件包 Avahi。mDNS 同样也支持 macOS,是 Bonjour 软件包中的一部分。
本文假设你有两个支持 Avahi 软件包的 Linux 系统,这里以 Ubuntu 20.04 为例,它们的主机名分别是 Mike-Ubuntu-01 和 Mike-Ubuntu-02。
安装 Avahi
| 1 | # Ubuntu / Debian | 
avahi-tools 软件包包括许多方便的实用程序,可用于检查系统上的 mDNS 服务的工作情况。比如:
| 1 | # 查看局域网内所有已注册的 mDNS 服务 | 
安装完成后,你可以检查下 /etc/nsswitch.conf 文件,它控制你的系统使用哪些服务来进行名称解析以及服务优先级。 你应该在该文件中看到如下一行:
| 1 | $ cat /etc/nsswitch.conf | 
注意:命令
mdns4_minimal [NOTFOUND=return],它告诉你的系统使用多播 DNS 解析器将主机名解析为 IP 地址。当名称无法解析时,也会尝试剩余的服务。通常nss-mdns包会为你处理此问题,如果你没有看到与此类似的配置,可以编辑这个文件加上它。
以上所有操作在两台机器上,都需要进行。
设置主机名和测试
现在你已经完成了常见的配置工作,请通过以下方式为每个主机设置名称:
| 1 | # Mike-Ubuntu-01 | 
注:你也可以编辑
/etc/avahi/avahi-daemon.conf文件,通过host-name来设置主机名称。 但默认情况下,Avahi 优先使用系统提供的主机名。
接下来,重新启动 Avahi 服务,以便它接受变更:
| 1 | $ sudo systemctl restart avahi-daemon.service | 
如果你需要开机自启 Avahi 服务,可以使用以下命令来实现:
| 1 | $ sudo systemctl enable --now avahi-daemon.service | 
最后,我们能够登录到 Mike-Ubuntu-01 并 ping 另一台机器的主机名 Mike-Ubuntu-02。
| 1 | # 你应该使用默认的 .local 域名,以便解析正常工作。 | 
同样的,你在 Mike-Ubuntu-02 上也能 ping 通 Mike-Ubuntu-01:
| 1 | $ ping Mike-Ubuntu-01.local | 
这样通过网络名称访问你的系统服务,是不是更加方便呢?
