DNS 手册域名系统参考

隐私:最小化、ECS 与填充

讨论 DNS 隐私,先要问“对谁保密”。网络运营者、解析器运营者、权威服务器、旁路观察者,看到的东西各不相同,能用的手段也不同。

最后修订 · 约 4 分钟读完

谁能看到什么#

观察者明文 DNS 时看到用加密 DNS 后
同一局域网、运营商、途经网络你的 IP 和查询的每个名字只看到你在和某个解析器通信,以及密文长度和时序
递归解析器运营者你的 IP 和全部查询不变:解析器必须知道问题才能回答
权威服务器解析器的 IP 和查询名字;带 ECS 时还有你所在的网段不变(加密只保护你到解析器这一段)
解析器与权威之间的网络查询名字(不知道来自哪个用户)不变,除非这一段也加密

RFC 9076(取代了 RFC 7626)系统地整理了这些风险。一个常被忽略的事实是:缓存会模糊用户行为,却不会消除它——少有人访问的名字,一次查询就可能足以说明问题。

QNAME 最小化#

传统解析器向每一层服务器都发送完整的问题:问根“mail.secret-project.example.com 的 A 记录是什么”。根其实只需要知道你要找 com。RFC 9156(取代实验性的 RFC 7816)的做法是:每一步只发送那一层需要的标签,类型也换成 NS 或 A 这类中性的值。

效果是根和顶级域服务器看不到完整名字。代价和注意点:

  • 查询次数可能增加,尤其是标签很多的名字。实现会限制逐级拆分的次数。
  • 有些写错的权威服务器对中间名字(空非终端)回答 NXDOMAIN,会让最小化后的解析中断。解析器通常提供“宽松模式”,遇到这类错误时退回完整查询。
  • 结合 RFC 8020(NXDOMAIN 之下皆不存在),解析器在中间一级拿到 NXDOMAIN 时可以直接停下,反而省了查询。

EDNS Client Subnet#

CDN 的权威服务器常常按“解析器在哪里”决定返回哪个机房的地址。用户和解析器不在一处时(比如用远方的公共解析器),这个判断就不准了。EDNS Client Subnet(ECS,RFC 7871)让解析器把用户所在的网段附在查询里转给权威服务器。

  • 只发网段,不发完整地址。RFC 7871 建议 IPv4 最多 /24,IPv6 最多 /56。
  • 它是一项隐私让步。权威服务器(以及解析器与权威之间的网络)因此知道了用户的大致位置。RFC 7871 本身是“信息类”文档,并明确讨论了这一代价。
  • 可以拒绝。客户端在查询里放一个源前缀长度为 0 的 ECS 选项,表示“不要替我透露网段”,遵守规范的解析器会照办。
  • 会稀释缓存。同一个名字要按网段分别缓存,命中率下降,内存占用上升。

是否启用 ECS,各家公共解析器的选择不同。这是速度(更近的 CDN 节点)和隐私之间的明确取舍,不存在两全的设置。

填充#

加密后,报文长度仍可见,而不同名字的长度差别足以帮助推测内容。RFC 7830 定义了 EDNS 的 Padding 选项,RFC 8467 给出了推荐策略:查询填充到 128 字节的整数倍,应答填充到 468 字节的整数倍。这只有在加密通道上才有意义。填充遮不住时序:先查网站域名、再查一串第三方资源域名,这种节奏本身就带有特征。

Oblivious DoH#

即使加密,解析器也同时知道“你是谁”和“你在查什么”。Oblivious DoH(RFC 9230,实验性)把这两件事拆开:

  1. 客户端用目标解析器的公钥(HPKE)加密查询,发给一个代理;
  2. 代理只看到客户端 IP 和一段密文,把密文转给目标;
  3. 目标解开查询、作答,用同一会话加密应答,原路返回。

它的保证完全建立在代理和目标不串通的前提上。两者属于同一家公司,或者都向同一方交出日志,这个设计就退化成普通的 DoH。另外多了一跳,延迟也会增加。

日志与数据保留#

技术手段之外,解析器怎样处理日志是最实际的隐私因素。值得看的几点:是否记录客户端 IP、保留多久、是否出售或共享给第三方、是否在某些司法辖区接受强制要求、有没有第三方审计。公开承诺不等于事实,但没有承诺的服务更难追责。

加密 DNS 不等于匿名#

拿到地址后的连接仍然暴露目标 IP;没有 ECH 时,TLS 握手里的 SNI 也以明文写着网站名字。只加密 DNS 而不处理这两点,路上的观察者损失的信息其实有限。ECH(RFC 9849)补上了 SNI 这一环,但它依赖服务器支持,配置又经由 DNS 分发——所以它的效果和 DNS 本身是否受保护绑在一起。需要真正隐藏通信对象时,要考虑的就不只是 DNS 了。

DNS 手册 · 内容依据 IETF RFC 与各运营方公开资料整理,出现分歧时以原文为准。回到顶部