Ubuntu 20.04环境下网络接口关联的DNS解析器相关疑问
Ubuntu 20.04环境下网络接口关联的DNS解析器相关疑问
嗨,我来帮你理清楚Ubuntu 20.04里这两个DNS地址的区别和关联~
1. 先搞懂/etc/resolv.conf里的127.0.0.53是什么
Ubuntu 20.04默认采用systemd-resolved作为系统的DNS管理服务,127.0.0.53是它提供的本地DNS缓存解析器。实际上/etc/resolv.conf是一个软链接,指向了systemd-resolved生成的配置文件(比如/run/systemd/resolve/stub-resolv.conf)。这个本地缓存的作用是:让系统先查询本地缓存过的域名记录,提升解析速度,同时减少对上游DNS服务器的请求次数。
2. resolvectl status里的172.31.0.2是什么
这个地址是你的eth0网卡通过DHCP协议动态获取到的上游DNS服务器。systemd-resolved会把这个地址作为实际对外查询的目标——当本地缓存里没有你要查询的域名记录时,它就会向这个上游DNS服务器发起请求,获取真实的IP地址。
3. 为什么两个输出不同?二者有什么关联?
这是典型的DNS分层代理模式:
- 系统里的应用程序会优先读取
/etc/resolv.conf,向127.0.0.53发起DNS查询; systemd-resolved作为中间代理,先检查自己的本地缓存,如果有记录直接返回;- 如果缓存里没有,就会使用
resolvectl status里显示的172.31.0.2这个上游DNS去实际查询外网域名。
简单说,二者是协作关系,不是冲突——127.0.0.53是本地缓存入口,172.31.0.2是实际对外查询的服务器。
4. 关于DHCP分配DNS的确认
你猜的没错,172.31.0.2就是DHCP动态分配给eth0的DNS服务器。如果想要直接查看DHCP下发的DNS信息,你可以试试这些方法:
- 执行
sudo dhclient -v eth0,在输出里查找包含DNS Servers的字段,就能看到DHCP服务器下发的地址; - 查看DHCP租约文件:
cat /var/lib/dhcp/dhclient.leases,文件里会记录每次DHCP获取到的完整配置,包括DNS服务器地址; - 再次执行
resolvectl status eth0,其中的DNS Servers字段就是DHCP给eth0分配的DNS地址,和你之前看到的结果一致。
备注:内容来源于stack exchange,提问作者Alakananda S
相关产品推荐
相关产品推荐

