当前位置:首页>Linux>一篇文章搞懂Linux设备DNS解析问题

一篇文章搞懂Linux设备DNS解析问题

  • 2026-09-05 01:57:51
一篇文章搞懂Linux设备DNS解析问题
摘要:改了 /etc/hosts 不生效?resolv.conf 重启被覆盖?dnsmasq 配置了却没走?本文彻底理清 Linux DNS 解析链路.
我们知道在Linux设备DNS解析有三个文件控制:1、etc/host;2、etc/resolv.conf;3、dnsmasq。这三个文件之间有一定的关联性并不是简单的“谁先谁后”,而是一条复杂的调用链。尤其linux中引入了systemd-resolved、NetworkManager 和 dnsmasq 之后,很多默认行为都变了。
我也常常搞不清楚这三个的关系,通过几天的摸索和学习,终于理清了Linux DNS解析流程.

01 核心误区:优先级到底谁说了算?

很多人认为优先级是写死的,如:/etc/hosts > /etc/resolv.conf > dnsmasq,后面发现优先级是由/etc/nsswitch.conf决定,它决定了系统是先去查本地文件,还是先去问 DNS 服务器。nsswitch.conf 文件中到底有啥信息呢?主要有如下内容(不同Linux版本可能有差异):

配置项 (Database)
含义
常见来源 (Sources)
作用说明
passwd
用户账户信息
files systemd
决定 whoami、id 等命令从哪里获取用户信息。通常先查 /etc/passwd (files)。
group
用户组信息
files systemd
决定用户所属组的信息来源。
shadow
密码哈希信息
files systemd
涉及登录验证,优先级极高,通常只允许 files。
hosts主机名解析 (关键)files dns决定域名解析优先级
。files 指 /etc/hosts,dns 指 /etc/resolv.conf。
networks
网络名称解析
files
将网络地址(如 192.168.1.0)映射为名称。
protocols
协议名称解析
files
如将 tcp 映射为协议号 6。来源通常是 /etc/protocols。
services
服务端口解析
files
如将 http 映射为端口 80。来源通常是 /etc/services。
ethers
MAC 地址映射
files
较少使用,用于以太网地址到主机名的映射。
netgroup
网络组
nis
主要用于 NIS 环境,现代系统较少见。
automount
自动挂载信息
files
控制自动挂载点的信息源。
aliases
邮件别名
files
用于 sendmail/postfix 等邮件系统。
01.DNS解析首先需要查看的文件是nsswitch.conf
查看命令:cat /etc/nsswitch.conf |grep hosts
典型配置:hosts: files dnsfiles
(1).files dns:代表/etc/hosts文件;
(2).dns file:代表/etc/resolv.conf指向的 DNS 服务器。
顺序很重要
(1).files dns:先查 hosts,没有再查 DNS(默认推荐);
(2).dns files 先查 DNS,超时或失败才查 hosts(内网环境慎用)。
备注:如果你发现/etc/hosts不生效,90% 是因为这里被改成了dns files,或者被某些安全软件锁定了。
02.其次需要看出的是/etc/resolv.conf 与 本地服务
当nsswitch.conf决定走dns通道后,系统会读取/etc/resolv.conf,但这个里面也有需要注意的地方,它的使用通常有两种模式:
情况 A:传统模式
nameserver直接指向8.8.8.8或自己配置的DNS
情况 B:systemd-resolved模式 
nameserver指向127.0.0.1(环回地址)且运行了dnsmasq,dns请求会优先到dnsmasq,dnsmasq会默认读etc/hosts,这个里面可配置的信息比较多。
备注:如果dnsmasq.conf里配置了address=/example.com/1.2.3.4,它的优先级高于/etc/hosts。
通过上面大致知道了Linux 设备DNS解析的优先级,下面是结合网上信息总结的DNS优先级排序表。如下:
优先级
配置位置
说明
备注
NO.1应用程序内置
代码里硬编码的 IP
最难排查,需检查代码
NO.2/etc/nsswitch.conf
决定 files 还是 dns 优先
总开关
NO.3/etc/hosts
本地静态映射
受 nsswitch 控制
NO.4dnsmasq.conf
本地 DNS 服务配置
如果运行了 dnsmasq
NO.5/etc/resolv.conf
上游 DNS 服务器
指向外部或内部 DNS
NO.6DHCP 下发
网卡获取的 DNS
重启网络可能被覆盖

最新文章

随机文章