从域名查询到建立连接
应用连接一个域名时,通常先向解析器查询记录。解析器可能直接用缓存回答,也可能继续查询相关服务器;拿到地址后,应用才开始连接。
| 类型 | 回答什么 |
|---|---|
| A | 域名对应的 IPv4 地址。 |
| AAAA | 域名对应的 IPv6 地址。 |
| CNAME | 这个名称对应的另一个名称,常用于别名链。 |
| MX | 负责接收邮件的服务器信息。 |
有 A 记录但没有 AAAA,不等于域名无效。AAAA 是查询内容类型,也不要求查询解析器本身一定走 IPv6。DNS 得到了答案,只完成了连接前的一步,不能据此判断网站、证书或代理已经正常。
DoH、DoT 与 DoQ 的传输方式
DoH 通过 HTTPS 传送 DNS,DoT 使用 TLS,DoQ 使用 QUIC。选择哪种方式,要看解析器公布的端点和当前网络支持,不能只替换地址前缀。
| 名称 | 工作方式 | 配置注意点 |
|---|---|---|
| DoH | DNS over HTTPS,通过 HTTPS 请求传送 DNS 信息。 | 通常需要完整查询端点,服务首页不等于 DoH 地址。 |
| DoT | DNS over TLS,在 TLS 连接中传送 DNS 查询。 | 通常使用 TCP 853,需正确验证解析器证书。 |
| DoQ | DNS over QUIC,利用 QUIC 的安全传输及独立流。 | 标准默认使用 UDP 853,解析器和网络都需支持。 |
DoH 的 HTTPS 通常使用 443,但实际端点与服务配置应以提供的地址为准。仅在工具里选择了加密协议,不说明握手已完成;证书校验失败、网络不支持或端点错误仍会使查询失败。
修改设置后,旧答案可能仍在缓存
改了 DNS 后仍得到旧地址,先记录回答和 TTL。浏览器、系统、客户端与递归解析器都可能缓存结果,刷新网页不一定触发新的 DNS 查询。
除了成功答案,域名不存在等否定结果也可能被缓存。因此修正记录后,有些设备先恢复、有些设备暂时仍得到旧错误,并不必然意味着它们访问了同一解析器。
- 记录当前回答、TTL、解析器和时间,先确认正在对比同一个名称与记录类型。
- 查看目标应用是否有独立解析设置,再检查系统与客户端的 DNS 配置。
- 需要排除本机缓存时,只对相关缓存做一次针对性处理,再重新查询;不要一开始同时重置所有网络设置。
网页缓存与 DNS 缓存不同。刷新网页可能只改变内容获取方式,不一定产生新的域名查询。换节点也不保证浏览器或解析器中的旧答案同时失效。
不同解析器返回不同地址
CDN 调度、解析器位置和缓存更新时间,都会影响返回的地址。比较前先固定完整域名、记录类型和时间,再用实际连接判断这些地址是否可用。
比较时应固定完整域名、A 或 AAAA 类型、查询时间和使用网络。若一边查 A、一边查 AAAA,地址当然不同;若一个解析器缓存了旧结果,直接比较也可能得出错误结论。
可把两组答案与一次实际连接的结果对应起来,再看是否存在过期记录、明确错误或无法使用的地址。不要把所有差异统称为“污染”,也不要认为某个公共解析器返回的任何答案都必然符合你所在网络的访问条件。解析器有答复与目标地址可到达,是两个需要分别检查的事实。
加密 DNS 的保护范围
加密 DNS 保护查询发往解析器的传输,解析器仍要读取域名才能回答。后续网站连接的加密与登录身份,需要另外看 HTTPS 和应用行为。
网站连接还会涉及目标地址、流量时序、账号会话及其他元数据。DNS 加密不会自动加密一个普通 HTTP 网页,也不会为浏览器建立远端代理。即使查询内容受到保护,也不能仅凭这个开关保证所有域名信息在其他阶段都不可见。
查询结果是否正确与传输是否加密也需要分别判断。加密通道不会让过期记录自动更新,也不会保证解析器按照你的访问需求返回地址。遇到加密 DNS 错误,保留证书验证并检查时间、端点及服务支持;关闭验证得到答案,不能视为安全连接成功。
系统、浏览器与客户端的解析设置
先确认是谁在查这个域名。浏览器可能设置独立 DoH,代理客户端也可能有自己的 DNS 规则;系统 DNS 只是其中一种来源。
例如命令行读取系统配置得到一组地址,浏览器却在自己的 DoH 服务中查询;客户端转发远端请求时,也可能让远端处理域名。两次请求的路径不同,不能用前者成功来证明后者必定正常。
TUN 或 DNS 接管可以改变部分流量的去向,但覆盖范围还要看路由、地址族与排除项。各应用对失败回退的处理也不相同,应以当前设置及文档为准。进一步理解解析与出站的关系,可读 分流规则说明;了解接入方式,则看 代理与 VPN 的区别。
固定域名,逐项做查询对照
固定一个域名和记录类型,用 doggo 查看当前解析器的回答。再改变解析器或传输协议中的一项,记录状态、耗时和实际页面访问结果。
- 保存域名、记录类型、解析器、协议、时间和完整状态,区分 NXDOMAIN、SERVFAIL、空答案与超时。
- 修改解析器时保持域名和记录类型不变;修改传输协议时尽量保持同一个服务,避免把服务差异当协议差异。
- 查询成功后,从原来有问题的应用发起实际 HTTPS 请求,检查路由、TLS 和目标响应。
- 若应用仍异常,查看它自己的 DNS 与代理设置,不要无限循环清缓存。
单次响应较快只说明该次查询耗时较短,不证明解析器长期更可靠。保存脱敏记录有助于复核;含内部域名的日志不应直接公开。
常见问题
DoH 地址可以只填一个 HTTPS 网站首页吗?
通常不能。必须填写解析器实际提供的 DNS 查询端点,确认服务支持 DoH,并保留证书校验。
为什么没查到 AAAA,却能用浏览器打开网站?
域名可能只提供 A 记录,浏览器通过 IPv4 访问。没有某种记录与整个名称不存在是不同情况。
清理浏览器缓存能保证清掉所有 DNS 缓存吗?
不能保证。网页内容、浏览器 DNS、系统 DNS 和解析器缓存属于不同层次,应先确认问题发生在哪一层。
参考资料
原理和协议定义可查以下标准与官方文档。文中的流程图由 AFQKit 绘制。