把 DNS 泄露率从 39% 修正到 17.4%:一次统计口径的自我纠错
上周周报里那个异常跳涨的 39%,我们给了三种解释就发了出去。这周我们把检测逻辑改了:公共任播 DNS 单列、不计入泄露。结果确认泄露率回落到 17.4%,同时新增一个"公共 DNS 使用率 5.8%"。这篇文章讲清楚改了什么、为什么必须单列、以及新数字怎么读。
上周的情报周报 #3里有个扎眼的数字:DNS 不一致率从 17% 跳到 39%,一夜翻倍。当时我们没法确认原因,就把三种可能都写了出来——真实泄露变多、公共 DNS 误判、样本波动——并承诺在下个版本里把公共任播解析器从泄露统计中剥离。
这周做完了。新窗口的数据:确认泄露率 17.4%,公共 DNS 使用率 5.8%。
旧口径错在哪
原判定逻辑只有一句话:解析请求的发起 IP 归属国 ≠ 访客 HTTP 出口归属国 → 记为泄露。
问题在于,这个判据假设了"解析器 IP 的位置 = 解析实际发生的位置"。对本地运营商 DNS 成立,对公共任播 DNS 完全不成立。
所谓任播(anycast):8.8.8.8 这个地址在全球有几百个节点,你在上海时实际由 Google 的上海或北京节点应答——但 IP 数据库只知道这个地址注册在美国。于是"上海用户 + 美国解析器 IP"被记成了泄露,而真实的解析其实就在本地几公里外完成。
用公共加密 DNS 的人越多,这种误判就越多。39% 里有多少是误判、多少是真泄露,旧口径根本分不开。
一个反直觉的细节:8.8.8.8 从不直接来问你
改代码时先按最直觉的方案做:维护一份公共 DNS 的 IP 白名单(8.8.8.8、1.1.1.1 等),命中就跳过。
做完之后跑了一次端到端测试,结果打脸:我们检测到的解析器 IP 是 172.217.42.28,org 显示 "Google LLC"——不是 8.8.8.8 本身。
原因是公共 DNS 服务商回源查询权威服务器时,用的是自家基础设施的出口 IP,而不是那个对外承诺的解析地址。你访问 8.8.8.8,Google 用 172.217.x.x 去问我们的权威 DNS。纯 IP 白名单会漏掉全部主流公共解析器。
最终方案是双轨:IP 白名单 + 机构名关键词匹配(Google、Cloudflare、Quad9、阿里、腾讯、百度、Yandex 等)。机构名是更可靠的信号,因为它反映的是"这个解析器属于谁",而不是"它用了哪个地址"。
新口径怎么判
现在每次检测会落到三种结果之一:
| 判定 | 条件 | 是否计入泄露 |
|---|---|---|
| 一致 | 解析器归属国 = 出口归属国 | 否 |
| 确认泄露 | 不一致,且解析器不是公共 DNS | 是 |
| 无法判定 | 不一致,但解析器是公共任播 DNS | 否(单列为"公共 DNS 使用率") |
关键在于第三类:它既不是"泄露",也不是"安全",而是"这个信号本身失效了"。
为什么"无法判定"必须单列
这是整个改动里最值得说的方法论问题。
面对 39% 这个数字,有两种处理方式:
方式一(错的):把无法判定的样本踢出分母。 看起来"净化"了数据,实际会同时抬高泄露率——因为被踢掉的多半是配置良好的用户,剩下的人群里泄露占比反而更高。这是典型的幸存者偏差。
方式二(我们选的):分子分母都不动,单独开一个指标。 泄露率的分母仍是全部有效检测,只是分子里不再包含"公共 DNS 造成的假阳性";同时把这类样本的占比单独报出来(5.8%),让读者自己判断这个比例是否影响结论。
第二种方式的好处是:当公共 DNS 使用率达到 40% 时,你会立刻意识到"泄露率这个指标在当前人群里参考价值有限"——而不是被一个看似精确的数字误导。
这也是我们所有数据口径的处理原则:宁可多给一个数字,也不把一个含义混杂的数字包装成精确结论。
新数字怎么读
- 确认泄露率 17.4%:每 6 个检测用户里有 1 个的 DNS 出口和 HTTP 出口真的不在同一地。这个数字和两周前的 14%、17% 处在同一区间,比 39% 更符合常识。
- 公共 DNS 使用率 5.8%:约 17 个用户里有 1 个在用公共任播 DNS。这部分人的 DNS 出口无法用地理归属判断,但不代表他们有风险——很多是主动选择 DoH 的隐私意识用户。
- 一个必须说明的限制:本周窗口(11 月 9 日至 15 日)横跨口径切换点——剥离是 12 日下午上线的,前三天仍是旧计数。所以 17.4% 里还残留一部分历史误判,下周的窗口才会是第一批完全干净的数据。
你能怎么用
跑DNS 泄露检测时,现在会直接告诉你三类结果里的哪一类,以及是哪个解析器在应答:
- 如果显示"一致",说明你的 DNS 和 HTTP 出口同地,没问题
- 如果显示"泄露",说明是本地运营商 DNS 直连——这是真问题,去看DNS 泄露原理排查客户端配置
- 如果显示"公共任播 DNS,归属地不可比",说明你在用公共 DoH,这个维度对你的环境不构成风险信号,不用管它
检测结果的判定逻辑和后端一致,全部在服务端完成;统计只做匿名计数,不存储任何单个 IP 或指纹,口径见隐私政策。
接下来
下周的情报周报 #4会用第一批完全干净的数据重跑一遍趋势——那时候如果确认泄露率稳定在十几的区间,就可以把 39% 这件事正式归档成"一次被修正的统计偏差",而不是一个悬而未决的异常。
数据出错不丢人,出错之后把口径改清楚、把过程写出来,比一开始就给一个漂亮的数字更有用。
检测你的网络环境:回到首页做一次完整检测,或试试 指纹检测。