ubuntu中的DNS配置有时候是修改/etc/resolv.conf
,有时候是修改/etc/systemd/resolved.conf
还有时修改 /etc/resolvconf/resolv.conf.d/base
,本文介绍修改不同文件的目的和原因。
1. systemd-resolved
ubuntu中systemd-resolved服务为本地应用程序提供了网络名字解析服务, 系统通过它对外进行dns请求。
系统使用systemd-resolved进行dns请求的时候,除了一些localhost等特殊域名,它需要去外部dns服务器寻找答案,这个外部dns的地址可以手动配置或者自动配置。参照手册描述如下,
DNS服务器来自于 全局配置文件(/etc/systemd/resolved.conf
)、 针对单个连接的静态配置文件(/etc/systemd/network/*.network
)、 针对单个连接的动态配置(从DHCP或其他系统服务得到的DNS服务器)。参见 resolved.conf(5) 与 systemd.network(5) 以了解 systemd 自身的DNS服务器配置。为了提高兼容性, 仅在 /etc/resolv.conf
不是一个指向 /run/systemd/resolve/resolv.conf
的软连接的情况下, 才会从 /etc/resolv.conf
读取全局DNS服务器。
最后一句说明了配置dns地址基本都在/etc/resolv.conf
中配置,因为系统中/etc/resolv.conf
软连接不是指向/run/systemd/resolve/resolv.conf
,而是指向另一个地址/run/resolvconf/resolv.conf
,原因是ubuntu 一般会安装了resolvconf去管理dns地址。
顺便介绍下resolvconf
2. resolvconf
- resolvconf是一个ubuntu上管理配置本机dns地址的工具,可以使用它来配置修改dns,不同程序运行的时候有时需要不同dns,而resolvconf使用了一个通用的接口文件让我们去配置不同程序的dns
在/run/resolvconf/interface
下有不同程序的对应的dns配置文件,譬如systemd-resolved服务的
yishen@ubuntu:/$ ll /run/resolvconf/interface/
total 4
drwxr-xr-x 2 root root 60 10月 28 21:30 ./
drwxr-xr-x 3 root root 100 10月 29 02:20 ../
-rw-r--r-- 1 root root 41 10月 28 21:30 systemd-resolved
yishen@ubuntu:/$ cat /run/resolvconf/interface/systemd-resolved
nameserver 127.0.0.53
search localdomain
resolvconf提供使用接口,程序中大致采用如下方式 使用resolvconf修改主机的dns(只是一个示意)
将主机的dns配置文件`/etc/resolved.conf`与`/run/resolvconf/interface/systemd-resolved `绑定
yishen@ubuntu:/$ resolvconf -a /run/resolvconf/interface/systemd-resolved
更新/etc/resolv.conf文件的内容
yishen@ubuntu:/$ resolvconf -u