什么是 DNS?
DNS 将域名转换为 IP 地址。本文详解解析流程、常见记录类型、递归与权威 DNS 区别、DNS 污染检测及加密 DNS 防护方法。
Dig Trace 团队· 网络工程团队4 分钟阅读
DNS(Domain Name System)是互联网的地址簿。它把域名翻译成机器可读的 IP 地址。没有 DNS,访问任何网站都得先记住一串数字。它的设计可以追溯到 1983 年,今天依然跑在 UDP 53 端口上,大部分查询仍是明文。
DNS 是什么?
DNS 是一套分布式全球数据库,存储域名与 IP 的映射。系统内有两类核心角色:递归 DNS 替用户完成全部查询,通常由 ISP 或公共 DNS 提供;权威 DNS 由域名所有者管理,保存最真实的记录。递归负责追问,权威给出最终答案。更多细节可参考 阿里云 DNS 官方文档。
域名下面藏着多种记录类型,每种用途不同:
A 记录把域名指向 IPv4 地址,比如 digtrace.net → 104.21.41.168。AAAA 记录做同样的事但对应 IPv6。CNAME 是别名,把 www 指向根域名的 A 记录,改一次 IP 不用改两处。
MX 记录指定邮件服务器及其优先级,数字越小越优先。TXT 记录是一段自由文本,最常见的用途是 SPF 和 DKIM 邮件验证,也会放域名所有权验证码。NS 记录声明该域名的权威 DNS 服务器,修改 NS 等于换了域名解析的控制权。
DNS 解析是如何工作的?
以访问 digtrace.net 为例。浏览器先查自身缓存,然后是操作系统缓存(Windows 上 ipconfig /displaydns 可看),最后才是向递归 DNS 发请求。这条请求通过 UDP 53 明文传输。
递归服务器收到后,如果自身缓存也没有,就开始逐级追问。第一步是根服务器,全球 13 组根服务器返回 .net 的 TLD 服务器地址。第二步问 TLD 服务器,它返回 digtrace.net 的权威 DNS 地址。第三步问权威服务器,拿到 A 记录后返回给客户端。
每一步的响应都带 TTL(Time to Live,单位秒),告诉接收方这条记录可以缓存多久。TTL 设得短(比如 300 秒),DNS 变更生效快,但查询量大;TTL 设得长(比如 86400 秒),省流量但迁移时可能让用户在旧 IP 上卡几个小时。CDN 厂商通常用短 TTL 配合动态调度。
在国内,这段明文链路可能遭遇中间设备伪造响应,即 DNS 污染。污染发生在递归服务器与权威服务器之间的路径上,而不是在用户到递归这一段。
DNS 污染与加密 DNS
DNS 劫持和污染不是一回事。劫持是递归服务器本身被篡改,主动返回错误 IP;污染则是链路中间设备抢在权威应答到达之前发回伪造包,利用 UDP 无认证特性让客户端先收到假答案。
如何判断遭遇的是污染而非其他故障?用不同的公共 DNS 查询同一个域名。如果阿里 DNS 返回真实 IP,但通过 ISP 默认 DNS 查询得到不同结果,基本可确认污染。更直接的方法是用 dig +trace 从根开始逐级追查,每一步返回的结果都能看到:
dig +trace digtrace.net A这条命令模拟递归服务器的工作过程,输出每级 NS 的应答,哪一步出现了假 IP 一目了然。
加密 DNS 是有效应对手段。DoH(DNS over HTTPS)把查询封装在 HTTPS 请求里,DoT(DNS over TLS)则跑在专用的 853 端口 TLS 隧道中。两者都能防止中间人读取或注入。阿里 223.5.5.5、DNSPod 119.29.29.29 均支持 DoH 和 DoT。一份 国内可用 DoH 端点清单 列出了具体配置地址。
不过加密 DNS 并非万能。如果递归服务器本身已被篡改,加密只保护了传输层,源头依旧不可信。选择可信的递归 DNS 服务和加密传输同样重要。
实战:使用 dig 排查问题
在 Linux 或 macOS 中,dig 是最常用的排查工具。基本语法:
# 使用阿里云公共 DNS 查询 A 记录
dig @223.5.5.5 digtrace.net A
# 典型输出
; ANSWER SECTION:
digtrace.net. 300 IN A 172.67.150.29
digtrace.net. 300 IN A 104.21.41.168换一个 DNS 对比结果,是检测污染最简单的方式:
# 对比 DNSPod
dig @119.29.29.29 digtrace.net A
# 对比 114DNS
dig @114.114.114.114 digtrace.net A查其他记录类型同样简单:
dig @223.5.5.5 digtrace.net MX # 邮件服务器
dig @223.5.5.5 digtrace.net TXT # SPF/DKIM 等文本记录
dig @223.5.5.5 digtrace.net NS # 权威 DNS 服务器
dig @223.5.5.5 digtrace.net AAAA # IPv6 地址Windows 用户没有 dig 时可用 nslookup,功能类似但输出不如 dig 详细:
nslookup digtrace.net 223.5.5.5若不同 DNS 返回的 IP 不一致,基本可判定存在劫持或污染。想结合网络路径进一步分析,可参考 Traceroute 与 MTR 的工作原理。
国内 DNS 服务怎么选?
国内主流公共 DNS 的选择取决于你更看重速度、加密支持还是纯净度。
阿里 DNS(223.5.5.5 / 223.6.6.6)节点覆盖全国,延迟通常在 5ms 以内,支持 DoH 和 DoT,解析结果根据用户 IP 返回最近的 CDN 节点。DNSPod(119.29.29.29)同样是低延迟选择,腾讯系服务走它会有天然优势。
114DNS(114.114.114.114)曾是国内最早的公共 DNS,但目前不原生支持加密,且部分域名会返回拦截页面,适合做兼容性对比测试而非主力使用。百度 DNS(180.76.76.76)可用,但在非百度 CDN 场景下延迟无明显优势。
国际服务方面,Cloudflare(1.1.1.1)和 Google DNS(8.8.8.8)在内地延迟偏高且不稳定,但结果最接近全球视角。排查跨境访问问题时,挂一个境外的 VPS 用 dig 从外部查回来是标准操作。
还有一个容易被忽略的细节:EDNS Client Subnet(ECS)。递归 DNS 把用户的部分 IP 地址附在查询中传给权威 DNS,CDN 据此返回最近的节点。不是所有公共 DNS 都支持 ECS,关掉它后 CDN 调度退化为基于递归 DNS 自身 IP,可能把电信用户导到联通节点。
DNS 安全与日常建议
普通用户把系统 DNS 从 ISP 默认改成阿里或 DNSPod,是提升解析速度和准确性最简单的一步。两者的国内延迟在个位数毫秒,且支持加密。
开发者应启用 DNSSEC。它是 DNS 的签名扩展,权威服务器对每条记录签名,递归服务器逐级验证,确保答案未被篡改。国内部分域名注册商的后台已提供一键开启选项。DoH 和 DoT 加密传输过程,DNSSEC 签名保证记录内容,组合使用才能覆盖两种攻击面。
排查时可用 Dig Trace 的 DNS 传播检测工具 对比全球节点结果。DNS 是互联网流量的入口,理解它的解析流程、缓存策略和加密手段,也是掌握 CDN 调度与负载均衡的基础。