什么是 DNS 客户端子网(ECS)?

权威服务器按来访 IP 决定给哪个机房的地址,可来访问的往往不是用户,而是几百公里外的公共解析器。ECS 让解析器把用户所在的网段一并捎上,代价是这段信息会一路被看见。

第 35 期讲过智能解析:同一个域名对不同的访问者返回不同的地址,让用户连到最近的机房。判断"谁离得近"的办法是看查询从哪里来,按来源 IP 所在地返回对应的结果。

这个办法在解析器普及之后开始失准。用户的查询不总是直接发给权威服务器,通常先交给本地运营商或公共解析器,由解析器代为往返。集中式公共解析器的出口很少,用户可能隔着几百公里,权威服务器看到的来源地址是解析器的,于是把所有人都指到同一个机房。名字解析对了,路却绕远了。

ECS 是给这个断层打的一个补丁,全称是域名系统扩展机制的客户端子网选项。它挂在那个扩展机制上,由递归解析器在转发查询时附上用户所在网段的前缀。权威服务器读到这段前缀,就能按用户真实的位置给出应答,而不用管解析器在哪里。

补丁的代价在文本里写得很直白。RFC 7871 说明,加上这个选项之后,发起解析的客户端的网络地址会对解析链路上所有相关服务器可见,并且对报文经过的任何网络都可见。为保护隐私,标准强烈建议解析器只带上截断后的前缀,IPv4 截到前 24 位、IPv6 建议前 56 位;客户端也可以主动把前缀长度标为 0,那意味着解析器不得把它的地址信息放进查询。

标准对自己也不客气。RFC 7871 的摘要里就写着它存在已知的运营与隐私缺陷,后续要通过 IETF 修订改进;正文则建议各类名称服务器软件把这项功能默认关掉。愿意支持的一方做法也不一样:有的公共解析器先探测权威服务器是否会正确回应,确认之后才持续附带前缀,也有解析器要求权威服务器先显式登记。