DNS 解析与排查:从 resolv.conf 到 systemd-resolved 的实战排障指南

概述 凌晨两点,告警炸了。服务连不上数据库,curl 超时,但 ping IP 通。你说这到底是网络问题还是应用问题?十有八九是 DNS 解析出了岔子。 DNS 解析是 Linux 系统最基础也是最容易被忽视的基础设施。平时没人关注它,一旦出问题,整个系统像突然失忆了一样——所有域名都认不出来。更恶心的是,DNS 问题表现千奇百怪:有的直接报 Temporary failure in name resolution,有的莫名其妙卡 5 秒,有的间歇性失败。如果不清楚解析链路,排查起来就是一通乱试。 这篇文章把 Linux DNS 解析的完整链路拆开讲:从 /etc/hosts 到 nsswitch,从 resolv.conf 到 systemd-resolved,从 dig 到 tcpdump。每个环节配实战案例,看完能在生产环境独立排查 DNS 问题。 Linux DNS 解析的完整链路 先搞清楚一个问题:当你在终端敲下 curl http://example.com 的时候,系统到底干了什么? DNS 解析不是一步完成的,它经过多个层级。理解这条链路是排查问题的前提。打个比方:DNS 解析就像寄快递。你写的收件地址是"北京市朝阳区",快递员不会直接知道具体在哪——先查邮编分区,再查街道,最后查门牌号。DNS 也一样,一层一层往下找。 解析优先级 Linux 系统解析一个域名时,默认按以下顺序查找: 本地 hosts 文件(/etc/hosts)——优先级最高,匹配到就直接返回 DNS 缓存——如果系统装了 nscd 或 systemd-resolved,会先查缓存 配置的 DNS 服务器(/etc/resolv.conf 中的 nameserver)——最后才走网络查询 但这个顺序不是写死的。真正控制解析顺序的是 /etc/nsswitch.conf 文件中的 hosts 行: # 查看 nsswitch 配置 cat /etc/nsswitch....

July 18, 2026 · 9 分钟 · 1851 字 · 徐保金