有很多(恕我直言,太多)地方可以配置所使用的 DNS 服务器,我不确定它们之间的关系。几个问题是:哪些配置只是有条件地查询(比如我理解正确,如果相应的服务没有运行,则不查询systemd配置)?哪些配置会覆盖哪些配置?配置 DNS 的推荐方法是什么?
举几个配置DNS服务器的地方(以及我知道的一些其他信息,如果有任何误解,请更正),
- 写入
/etc/resolv.conf
并使用chattr
强制它在重新启动后保持持久性(我认为这是不鼓励的) resolvconf
. 在/etc/resolvconf/resolv.conf.d
. 用于resolvconf -a
添加 DNS 并resolvconf -u
对其进行更新systemd-resolve(d)
, 的一个单位systemd
。配置在/etc/systemd/resolvd.conf
. 它使用该地址127.0.0.53
作为/etc/resolv.conf
. 真实resolv.conf
存在于/var/run/systemd/resolve/resolv.conf
. 在较新的版本中(从哪个版本开始?),systemd-resolve --status
可用于查询当前 DNS 状态。/etc/network/interfaces
. 这一项与/etc/systemd/system/network-online.target.wants/networking.service
Network-Manager
,一个在 GUI 中驱动网络配置上下文菜单的组件。如果在 中配置了接口/etc/network/interfaces
,它将拒绝再次对其进行管理(如not managed
GUI 上下文菜单中所示)。
我正在Ubuntu 18.04 LTS
使用 Unity 桌面环境运行。
在可能的情况下,建议您使用这个:
例如,这是官方 Ubuntu 桌面指南所说的。我还没有验证这是最新的,但我没有理由怀疑它。
https://help.ubuntu.com/lts/ubuntu-help/net-manual.html.en
在大多数系统上,系统会查看的唯一位置是
/etc/resolv.conf
. (但可能有各种不同的系统来编辑这个文件的内容)。正如 Patrick 所指出的,在某些系统上会有一个更高优先级的插件
grep '^hosts:' /etc/nsswitch.conf
。dns
是标准的 glibc 插件,它读取/etc/resolv.conf
.特别是,如果您
resolve
之前有dns
,则 this 指的是systemd-resolved
。systemd-resolved
它会在使用 DNS 服务器之前尝试访问/etc/resolv.conf
.正如您所指出的,可以
systemd-resolved
通过运行来查看可能查询的 DNS 服务器(如果有)systemd-resolve --status
。正如您所指出的, NetworkManager 方法预计与手动编辑不兼容
/etc/resolv.conf
(因为 NetworkManager 将自行编辑此文件)。当然,如果您阻止 NetworkManager 进行编辑/etc/resolv.conf
,则 NetworkManager 方法将不起作用。