resolvconf、systemd-resolve 和 avahi 有什么区别?

Tos*_*rek 5 dns avahi resolvconf resolv.conf systemd-resolved

我目前正在从事一个需要进行一些 DNS 故障排除的项目,但是我对美妙的网络世界还很陌生,并且对从哪里开始有点茫然。我的具体问题可能属于 RaspberryPi StackExchange,因此我将避免交叉发布。只是在这里寻找信息。

寻找信息,我被引导到resolv.conf(5)文件resolvconf(8)systemd-resolve(1), 和avahi似乎是的野兽。

我的带有 Raspbian Buster 的 Raspi 似乎avahi-daemon正在运行。我的 Ubuntu 18.04.4 LTS 有systemd-resolvedAND avahi-daemon。并resolvconf(8)协调两个(手册页仅在Ubuntu)?何时/etc/resolv.conf使用/忽略?

在 Ubuntu 上:

$ cat /etc/resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53
search telus
Run Code Online (Sandbox Code Playgroud)

在树莓派上:

$ cat /etc/resolv.conf

# Generated by resolvconf
nameserver 192.168.0.1
nameserver 8.8.8.8
nameserver fd51:42f8:caae:d92e::1
Run Code Online (Sandbox Code Playgroud)

哪些公用事业公司对此负责?我真的不明白足够的行话来筛选手册页并区分所有这些,我很想解释一下它们的角色是如何相关的。

Ste*_*ris 8

当你运行一个命令时,比如ping foobar系统需要计算出如何转换foobar为一个ip地址。

通常它看起来的第一个位置是/etc/nsswitch.conf.

这可能有一行,例如:

hosts:          files dns mdns4
Run Code Online (Sandbox Code Playgroud)

这告诉查找例程首先查找“文件”,即/etc/hosts. 如果没有找到匹配项,那么它将尝试进行 DNS 查找。如果我们仍然不知道答案,那么它会尝试进行 mDNS 查找。

DNS 查找是系统随后查看的位置/etc/resolv.conf。这告诉它要查看哪些 DNS 服务器。在我的机器上,我通过 DHCP 自动配置了这个。

% cat /etc/resolv.conf 
# Generated by NetworkManager
search mydomain
nameserver 10.0.0.1
nameserver 10.0.0.10
Run Code Online (Sandbox Code Playgroud)

如何 resolv.conf建立可以改变,根据不同的操作系统,你得到了什么可选组件,其他配置项,启动顺序上......在你的情况,在Ubuntu,你运行该文件配置为指向本地的systemd方案systemd-resolved会知道怎么去跟真正的DNS服务器。

在具有静态 IP 地址但没有 的主服务器上,systemd-resolved我手动编辑了此文件。

最后mdns4告诉例程尝试询问avahi-daemon它是否知道名称。

您可以更改规则。例如,如果/etc/nsswitch.conf只是说:

hosts: files
Run Code Online (Sandbox Code Playgroud)

那么使用本地/etc/hosts文件。

其他条目是可能的;例如,ldap将使它进行 LDAP 查找。

  • @StephenHarris 那 `resolvconf` 怎么样? (5认同)
  • `/etc/resolv.conf` 文件只是一个实现细节,它并不像这个答案暗示的那么重要。应用程序进行名称解析的权威机制是通过库函数。这些函数可以使用`resolv.conf`,也可以不使用。根据它的配置方式,systemd-resolved 可以使用由 resolvconf(8) 提供的现有 `resolv.conf`,或者它可以*可选地*通过指向 systemd 的符号链接提供 `/etc/resolv.conf` -已解决的文件维护版本。见 https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html (2认同)