DNS 排障实战:从域名解析到缓存和记录类型

2026-10-9 / 0 评论 / 1 阅读

DNS 排障实战:从域名解析到缓存和记录类型 原创示意图

DNS(Domain Name System)把域名转换成 IP 地址,但“网站打不开”不一定就是 DNS 故障。排障时要先区分:域名没有解析、IP 无法连接、端口未开放,还是 TLS/HTTP 服务出错。

一、一次解析经过哪些角色

当浏览器查询 blog.example.com,系统先看本机缓存和 hosts 文件;没有答案时交给配置的递归 DNS。递归 DNS 可能已有缓存,否则会从根、顶级域,再到该域名的权威 DNS 逐级查询。最终答案会按照 TTL(Time To Live)缓存一段时间。

常见记录:

  • A:名称指向 IPv4 地址。
  • AAAA:名称指向 IPv6 地址。
  • CNAME:一个名称别名指向另一个名称。
  • MX:邮件接收服务器,并带优先级。
  • TXT:文本记录,常用于域名验证、SPF、DKIM 等。
  • NS:说明某个区域由哪些权威名称服务器负责。

端口不写在普通 A/AAAA 记录里。example.com:4430 中的 4430 由浏览器连接时使用,DNS 通常只负责给出地址。

二、先判断是不是 DNS

Windows:

Resolve-DnsName blog.example.com
nslookup blog.example.com
Test-NetConnection blog.example.com -Port 443

Linux 或 macOS:

dig blog.example.com A
dig blog.example.com AAAA
dig +trace example.com
curl -Iv https://blog.example.com/

如果域名解析出正确地址,但端口测试失败,就应检查防火墙、路由、端口映射和服务监听。若 curl 已连接却提示证书名称不匹配,则是 TLS 配置,不要继续反复改 DNS。

三、比较不同 DNS 的答案

dig @1.1.1.1 blog.example.com A
dig @8.8.8.8 blog.example.com A
dig @权威DNS地址 blog.example.com A

权威 DNS 已返回新地址,而公共 DNS 仍返回旧地址,通常是在等待旧记录 TTL 到期。不同地区的递归节点刷新时间可能略有差异。权威 DNS 自己就返回错误值,则应回到域名托管平台检查记录名、类型、线路和生效状态。

动态公网 IP 使用 DDNS 时,还要确认更新程序检测到的是真正 WAN 地址,并成功调用服务商 API。路由器 WAN 若是 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 或运营商共享地址,更新出一个地址也不代表公网能主动连入。

四、缓存如何处理

Windows 清理本机 DNS 缓存:

ipconfig /flushdns

macOS 的缓存由系统服务管理,不同版本命令可能变化,通常先重启受影响应用或切换网络测试。浏览器也可能维护自己的连接和 DNS 缓存。清理本机缓存不能强迫公共递归 DNS 忘掉仍在 TTL 内的旧答案。

改记录前可提前降低 TTL,等待旧 TTL 完整经过后再切换;稳定后再恢复合理 TTL。不要长期设置极低 TTL,它会增加查询量,也不能解决上游缓存不规范或客户端长期保持连接的问题。

五、容易忽略的两类故障

第一类是 IPv6:域名同时有 A 和 AAAA,但 IPv6 路由或服务没有配置好,部分客户端会优先尝试 AAAA。分别查询并测试两个协议,确认不使用 IPv6 时不要留下错误 AAAA。

第二类是分流 DNS:内网希望域名解析到私网地址,公网解析到公网地址。这需要路由器或内部 DNS 明确配置,不能假设公网 DNS 会自动知道用户在家里。排障记录中至少写下查询时间、使用的 DNS 服务器、记录类型、答案和 TTL。

本文为中文原创学习整理。DNS 的基本概念和查询模型参考 IETF RFC 1034:Domain Names—Concepts and Facilities。

评论一下?

OωO
取消