Linux DNS解析失败应先确认是否为DNS问题:ping IP通而域名返回“unknown host”即锁定DNS故障;再检查/etc/resolv.conf内容及软链接指向,判断是否被systemd-resolved等动态管理;接着用dig @DNS_IP直连测试解析能力;最后排查本地缓存、/etc/hosts干扰及UDP 53端口连通性。

遇到“无法访问网站”“Unknown host”或接口超时,别急着查路由或重启服务——先确认是不是 DNS 解析卡住了。Linux 下绝大多数看似网络不通的问题,实际是域名根本没转成 IP,连接连发起的机会都没有。
第一步:用 IP 直连验证是否真是 DNS 问题
这是最关键的判断动作,能立刻排除干扰:
- 执行 ping -c 3 8.8.8.8:通 → 说明网络层通畅;不通 → 先查网卡、网关、物理链路
- 执行 ping -c 3 baidu.com:返回 “unknown host” → 基本锁定 DNS 解析失败;返回 “connect: Network is unreachable” 或超时 → 属于底层连通性问题
- 再试 curl -I http://180.101.49.12(百度某IP):能返回 HTTP 头 → 进一步确认是 DNS 环节出错,而非防火墙或服务本身
第二步:检查 /etc/resolv.conf 是否可信
这个文件是 Linux DNS 解析的起点,但现代系统中它常被 NetworkManager 或 systemd-resolved 动态覆盖,不能只看内容,还要看来源:
- 运行 cat /etc/resolv.conf,确认至少有一行 nameserver,且地址合理(如 10.1.1.10 内网 DNS 或 114.114.114.114);避免出现 8.8.8.8 被硬编码却不可达的情况
- 运行 ls -l /etc/resolv.conf:若显示为软链接(如指向 /run/systemd/resolve/stub-resolv.conf),说明真实配置由 systemd-resolved 管理,需改用 resolvectl status 查看生效 DNS
- 警惕多 nameserver 串联风险:glibc 默认串行查询,第一个超时(默认 5 秒 × 2 次尝试 = 10 秒)会拖慢整个请求 —— 建议生产环境只配一个稳定内网 DNS,或确保备用 DNS 响应极快
第三步:绕过缓存与配置,直连 DNS 服务器验证
用 dig 或 nslookup 强制指定服务器查询,跳过本地 resolver 缓存和配置干扰:
- dig @10.1.1.10 example.local +short:直接向内网 DNS 发起查询,看是否返回 IP;无响应 → DNS 服务宕或网络不通
- dig @8.8.8.8 example.com +stats:对比公共 DNS 结果,若它能解析而内网 DNS 不能 → 定位为内网 DNS 故障或域名未同步
- nslookup example.local 10.1.1.10:更轻量,适合快速验证;若超时,再用 telnet 10.1.1.10 53 测试 UDP/TCP 53 端口是否可达(注意部分 DNS 只响应 UDP)
第四步:排查缓存、hosts 和干扰项
本地干扰常被忽略,但高频导致“别人能通,就我不能”:
- 清除本地缓存:sudo systemd-resolve --flush-caches(systemd 系统)或 sudo systemctl restart nscd(若启用 nscd)
- 检查 /etc/hosts:运行 grep example /etc/hosts,确认没有错误的静态映射覆盖了真实解析
- 临时禁用安全软件:某些终端防护软件会拦截 DNS 请求,尤其在企业环境中;可短期关闭测试
- 容器或 Pod 场景:检查是否显式设置了 --dns 或 dnsConfig,避免继承宿主机失效配置


















