關于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
浙公網安備 33010602011771號