关于DNS生效优先级
Linux系统中,域名解析相关的配置存在多个地方,经常使用的包括
1.本地hosts文件,/etc/hosts,指定将域名解析到特定IP
#配置格式
ip 域名1 域名2 ...
2.dns配置文件,/etc/resolv.conf,指定dns服务器,系统会连接dns服务器查询域名解析
#配置格式
nameserver ip1
nameserver ip2
...
3.网卡配置,/etc/sysconfig/network-scripts/ifcfg-xxx
#配置格式 DNS1=ip1 DNS2=ip2 ...
默认情况下,域名解析时的生效优先级为 本地hosts > dns配置,该优先级可以通过 /etc/nsswitch.conf 中 hosts配置项修改,但建议不要修改,可能会影响系统其他功能。
#nsswitch关于dns默认配置
hosts: files dns myhostname
关于DNS文件配置与网卡DNS配置的关系
背景说明
网卡配置dns后,需要重启网络服务(service network restart 或 systemctl restart network 或 reboot重启系统),此操作将在一定条件下更新dns配置文件,最后操作系统始终从dns配置文件中获取dns服务器地址。
网卡配置中,与dns有关的配置项主要包括
- BOOTPROTO(dhcp自动,static静态)
- DNS1/2(具体dns服务器地址,不配置则为空)
- PEERDNS(yes/no,默认为yes,是否自动获取dns服务器地址)
配置验证
为了验证多项配置的相互关系,以下为CentOS7.9系统的验证结果
结果说明
- 静态模式下,PEERDNS无作用,网络服务第一次重启时,网卡配置中的DNS必定会覆盖resolv配置,即使无配置(即DNS为空)
- 静态模式下,第一次重启网络服务后,再次配置resolv文件,再次重启服务时,系统优先使用网卡配置的DNS,但如果网卡配置中DNS为空,则使用resolv配置,不再覆盖
- dhcp模式下,PEERDNS为no时,与静态模式下情况相同
- dhcp模式下,PEERDNS为yes或不配置时,系统将自动获取dhcp服务器中的dns配置,与网卡配置的dns信息一起,作为网卡的dns配置,后续情况与静态模式下相同
结论
- PEERDNS只在dhcp模式下生效,如果配置yes,将自动从dhcp服务器中获取dns信息,与网卡配置的dns信息合并
- 更改网卡配置后,第一次重启网络服务后必定使用合并的网卡dns信息覆盖resolv配置(即使为空)
- 多次配置resolv后重启网络服务,将从合并后的网卡dns信息与resolv配置中选择不为空的,其中网卡配置优先
生产环境建议
因为resolv配置的生效条件比较复杂,失效风险较高,在实际环境中,请优先使用网卡配置来指定DNS服务器,包括dhcp自动获取以及手动设置DNS1/2/.../n