yaml 配置文件中的 nameservers/addresses 字段有什么作用?
我尝试过的任何应用程序都使用 /etc/resolv.conf 名称服务器。即使 resolvconf 停止,也会发生这种情况。
这是使用 systemd 作为解析器。生成或应用时没有错误。
解决
感谢所有回复的人。我执行此操作后,netplan config yaml 将配置名称服务器:
- 清除 resolvconf;
- 将我的 LAN DNS 作为转发器放入 /etc/bind/named.conf.options 中;
将 /etc/resolv.conf 链接替换为静态文件
搜索名称服务器 127.0.0.53
确实有效。我发现我必须在 resolv.conf 中包含搜索,即使我的 netplan 配置 yaml 中有一个搜索字段。改天再来解答吧。
答案1
注意:这可能重复了来自的信息
chili555
,但是在与他们的讨论中,上述个人建议发布“权威”答案,因为我之前处理过这个确切的问题。
您的环境中出现的行为与18.04 之前的systemd-resolved
行为相同。更新会影响用于查找的名称服务器。答案的最后一部分对此进行了详细说明。dnsmasq
netplan
systemd-resolved
但首先,对于好奇的人来说,关于这种行为的一些历史,以及它与使用网络管理器和的“旧”Ubuntu 版本有何不同dnsmasq
。(如果您只想要与 18.04 相关的内容,请随意跳过本答案的下一部分)
18.04 之前:dnsmasq
作为本地缓存解析器
在 18.04 之前,每当您使用 GUI Ubuntu 时,它都会dnsmasq
与网络管理器一起安装。网络管理器集成dnsmasq
将更新dnsmasq
“下一跳”服务器(上游 DNS 服务器)列表,以确定要将查询发送到何处。
因此,DNS查询将从google.com
请求解析的任何应用程序传递到dnsmasq
,如果dnsmasq
不知道IP地址或缓存条目已过期,则会将DNS请求传递到任何上游DNS服务器(在此示例中为8.8.8.8
或8.8.4.4
)。然后您必须检查网络管理器或dnsmasq
配置以查看“上游”DNS服务器的位置。
这是从桌面 ISO 安装的图形化 Ubuntu 的典型行为。
相反,从服务器 ISO 进行的默认安装遵循/etc/resolv.conf
通过包进行的传统“更新”方法resolvconf
,并直接利用/etc/resolv.conf
而不是通过进行通信dnsmasq
。
18.04:,netplan
和systemd-resolved
在 18.04 中,默认 DNS 系统是systemd-resolved
。它的运行方式与dnsmasq
旧版本类似,但目前它对桌面和服务器 ISO 安装都适用。它还可以与网络管理器(用于管理 wifi 等的 GUI 环境中)和 Netplan(更好地处理以太网)集成
systemd-resolved
netplan
从(服务器或自定义桌面)或网络管理器(默认桌面映像)传递要向其发送查询的 DNS 服务器列表(无论是静态配置还是通过 DHCP 配置)。因此,使用上述相同示例,对 的 DNS 查询google.com
将通过systemd-resolved
的存根解析器,该解析器将返回缓存的查找值或将其传递给上游 DNS 服务器。
这模拟了的默认行为dnsmasq
,但也为如何查询“localhost”和其他本地相关地址添加了一些额外的查找处理。
systemd-resolved
使用 NetPlan 或网络管理器,您可以通过以下命令获取上游 DNS 服务器列表:
systemd-resolve --status
这将为您提供一堆输出。相关部分如下所示(取自 的chili555
答案,以方便参考):
DNS Servers: 8.8.8.8
8.8.4.4
2600:1700:5aa0:830::1
答案2
免责声明:这是一个有根据的猜测,而不是规范的、有据可查的答案。
我尝试过的任何应用程序都使用 /etc/resolv.conf 名称服务器。
在我的 18.04 系统上,/etc/resolv.conf 中未注释的部分(即实际可操作的部分)显示:
nameserver 127.0.0.53
我认为这是使用 dnsmasq(缓存 DNS 信息的系统)的症状。我认为这意味着在询问外部名称服务器之前,先查看本地缓存。
但是本地缓存不会包含任何有关从未访问过的网站的名称服务器信息。在这种情况下,系统将使用已声明的外部 DNS 名称服务器。这些名称服务器可能在旧系统中的 /etc/network/interfaces 中声明;在新系统中的 /etc/netplan/*.yaml 中声明;或者在几乎所有桌面安装中,在网络管理器中声明。
事实上,/etc/resolv.conf 告诉我们如何找到外部名称服务器。
运行“systemd-resolve --status”查看当前正在使用的上行 DNS 服务器的详细信息。
在我的系统上,该报告部分内容如下:
DNS Servers: 8.8.8.8
8.8.4.4
2600:1700:5aa0:830::1
简而言之,我相信 DNS 名称服务器在 netplan 中声明,以告诉系统如果在本地缓存中找不到 DNS 信息,则在哪里查找。