ubuntu20.04 DNS troubeshooting
前言
ubnutu20.04主流的网络配置方案为netplan,本文将从日常工作中使用netplan配置网口dns nameserver遇到的各种问题,以及知识的梳理
ubuntu域名解析流程
-
不请求DNS,遍历本机
/etc/hosts域名到ip的映射
,匹配到域名时,返回对应的ip,未匹配到时走2匹配DNS -
获取
/etc/resolv.conf
内的nameservers, 自上而下请求,返回解析到的ip,未解析到时报错unknown domain or service
细说/etc/resolv.conf
ubuntu20.04有多种工具配置DNS nameserver:
netplan
命令 +/etc/netplan/00-xxx.yml
配置文件systemd-resolved.service
+/etc/systemd/resolved.conf
配置文件中配置全局DNSresolvconf
命令 +/etc/resolvconf/resolv.conf.d/
配置目录
重点来了:
netplan apply
、systemd-resolved.service restart
后最新的dns nameserver会自动聚合在/run/systemd/resolve/resolv.conf
,其中/etc/systemd/resolved.conf
中的全局DNS配置会放在第一个,之后的nameserver以netplan配置文件中nameservers填写顺序排列。
resolvconf -u
执行后,/etc/resolvconf/resolv.conf.d
下的文件 head
base
tail
中填入的nameserver会拼接合并到/run/resolvconf/resolv.conf
内。
其实最终应用到的nameserver配置只会有一套。ubuntu系统最终信任的dns nameserver文件为/etc/resolv.conf,创建/etc/resolv.conf的软链接指向工具生成的某个resolv.conf文件表示应用了某套nameserver工具
应用示例:
$ sudo unlink /etc/resolv.conf
$ sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
troubeshooting
trouble 1: ping域名的ip不符合期望。
很可能/etc/hosts内写死了域名对应的ip。
trouble 2: nslookup等工具请求的nameserver未在netplan、resolvconf的配置文件中
查看/etc/resolv.conf,发现请求的nameserver在内,若文件头几行没有注释说明该文件为自动生成的,说明该文件未软链接到自动生成的resolv.conf中(ll 可查看具体文件路径),且该文件有独立inode,被人为修改并加入nameserver,导致无论怎么改其他地方的配置也不生效,无法变更请求的nameserver。