有很多(恕我直言,太多)地方可以配置所使用的 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
作为 中的虚拟 DNS 解算器/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 桌面环境运行。
答案1
配置 DNS 的推荐方法是什么?
...
我正在使用 Unity 桌面环境运行 Ubuntu 18.04 LTS。
在可能的情况,建议您使用这个:
5. Network-Manager,驱动 GUI 中网络配置上下文菜单的组件。
例如,官方 Ubuntu 桌面指南是这么说的。我尚未验证这是最新的,但我没有理由怀疑它。
https://help.ubuntu.com/lts/ubuntu-help/net-manual.html.en
如果您的网络不会自动将网络设置分配给您的计算机,您可能需要自己手动输入设置。本主题假设您已经知道要使用的正确设置。如果没有,您可能需要询问网络管理员或查看路由器或网络交换机的设置。
要手动设置网络设置:
...
7. 在 DNS 部分...
在大多数系统上,系统只会查看 的内容/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 方法将不起作用。