DNS 解析原理和排查:网站打不开时一步步定位问题
广告位(预留,AdSense 审核通过后启用)
“网站打不开”“改了解析没生效”“公司能访问、家里不行”——这些问题很多都和 DNS 有关。DNS 的作用是把 example.com 这样的域名翻译成 IP 地址。理解它的工作过程,排查时就知道该在哪一步找原因。
一、一次查询经历了什么
当你在浏览器输入 www.example.com:
- 浏览器和操作系统先查自己的缓存,有就直接用。
- 没有缓存时,向递归解析器发问。递归解析器通常由运营商、公司网络或公共 DNS 服务提供,在电脑的网络设置里可以看到它的地址。
- 递归解析器如果也没有缓存,就从根服务器开始问:根服务器告诉它 .com 由哪些服务器负责;
- 再去问 .com 的服务器,得知 example.com 的权威 DNS 服务器是谁;
- 最后向权威服务器查询,拿到 www.example.com 的记录,返回给你,并按 TTL 缓存起来。
记住两个角色:权威服务器保存“真正的答案”(就是你在域名服务商后台配置的那些记录);递归解析器负责帮用户去问,并缓存答案。
二、常见记录类型
- A:域名指向 IPv4 地址。
- AAAA:域名指向 IPv6 地址。
- CNAME:别名,指向另一个域名,常用于接入 CDN。同一个名字上有 CNAME 时,不能再有其他记录。
- MX:邮件服务器,决定发给这个域名的邮件送到哪里。
- TXT:任意文本,常用于验证域名所有权(如搜索引擎站长平台)和 SPF 邮件策略。
- NS:指定这个域名由哪些权威服务器负责。
三、TTL:为什么“改了解析没生效”
每条记录都有一个 TTL(生存时间,单位秒)。递归解析器拿到答案后,在 TTL 时间内会直接用缓存,不再去问权威服务器。如果原记录 TTL 是 3600,你改了 IP 之后,最长可能要一小时左右,各地用户才会陆续拿到新地址。
实用技巧:计划迁移服务器前一两天,先把 TTL 调小(例如 300 秒),等旧 TTL 过期后再改 IP,切换就会快很多;迁移完成后再把 TTL 调回去。
四、排查工具
nslookup(Windows、macOS、Linux 都有):
nslookup www.example.com # 用系统默认的解析器
nslookup www.example.com 223.5.5.5 # 指定某个公共 DNS 查询
dig(macOS、Linux 常见,信息更全):
dig www.example.com # 查 A 记录,ANSWER 部分有结果和剩余 TTL
dig example.com MX # 查邮件记录
dig example.com NS # 查权威服务器
dig @权威服务器地址 www.example.com # 直接问权威服务器,绕过缓存
dig +trace www.example.com # 从根开始逐级跟踪
Windows 上清除本机 DNS 缓存:ipconfig /flushdns。
五、按步骤定位
- 先确认是不是 DNS 问题:
ping 域名如果提示“找不到主机”,是解析问题;如果解析出了 IP 但不通,问题在网络或服务器,不在 DNS。 - 换一个解析器查:分别用默认解析器和一个公共 DNS 查询。结果不同,说明某个解析器的缓存还没更新,或者被劫持、污染。
- 直接问权威服务器:用
dig NS找到权威服务器,再用dig @权威查询。如果权威服务器的答案就是错的,问题在你的域名配置;如果权威是对的、递归是旧的,等 TTL 过期或清缓存即可。 - 检查 NS 是否正确:刚换了 DNS 服务商时,要确认注册商处的 NS 已改成新服务商提供的地址,否则新后台里怎么改都不生效。
六、几个典型故障
- 网站换服务器后部分用户访问到旧站:TTL 缓存导致,等待或提前降低 TTL。
- 根域名无法设置 CNAME:标准 DNS 中根域名(example.com)有 NS、SOA 等记录,不能再设 CNAME。部分服务商提供“CNAME 拉平”等功能解决,以服务商文档为准。
- 邮件收不到:检查 MX 记录是否指向正确的邮件服务商,以及是否有多余的旧 MX。
- 公司内网能访问,外网不行:公司可能有内部 DNS 返回内网地址,外网用户拿到的是公网解析,两边配置不一致。
- 域名过期:域名到期未续费,解析会失效。给域名开自动续费,并留意注册商的提醒邮件。
七、小结
排查 DNS 问题的核心思路是“分层对比”:本机缓存 → 递归解析器 → 权威服务器,逐层比较答案,就能找到出问题的那一层。查询时记录下各次结果中的 TTL,也能帮你判断缓存还要多久过期。如果需要换算日志里的时间戳,可以用本站的 时间戳转换工具;本站首页的“网络”分类也收录了在线 DNS 查询和 Whois 查询工具。