文章 ·
DNS 泄露:开了代理,DNS 为什么还在国内
打开网页之前,设备要先把域名换成 IP,这一步叫 DNS 解析,由「解析器」完成。代理接管的是连接,DNS 查询不一定跟着走。出口已经在海外,DNS 查询却还交给国内运营商或国内的解析器,就是 DNS 泄露。它暴露的主要是你所在的网络:解析器的运营者能看到你查了哪些域名,做检测的网站能看到解析器在哪里。ChatGPT、Claude 等平台会不会检查这一项,没有公开说明。
DNS 查询是怎么走的
一次解析通常分两段:设备把域名发给解析器(运营商下发的,或者你自己填的公共 DNS),解析器再去问这个域名的权威 DNS 服务器。按 RFC 7871 的说法,权威服务器收到的查询大多来自中间的递归解析器,它看到的是解析器的地址,不是你的地址。
传统 DNS 是明文的。Mozilla 的 DoH 说明写到,这种连接没有加密,第三方很容易看到你要访问哪个网站。
泄露以后,谁能看到什么
- 解析器的运营者:看到你查询的每一个域名。解析器属于国内运营商,这些记录就留在国内。
- 途经的网络:明文查询在路上能被看到,也可能被干扰。防止途经设备干扰 DNS,是 RFC 8484(DNS over HTTPS,简称 DoH)列出的两个设计目标之一。
- 网站自己的权威 DNS:看到解析器的 IP,从而知道它在哪个国家、属于哪家运营商。检测站就是这样看到的。
- 解析器附带 ECS 时:有的解析器会把你 IP 的一段(EDNS Client Subnet,简称 ECS)一并转给权威服务器。RFC 7871 第 11.1 节写明,这时你的网段对参与解析的所有服务器、以及 DNS 包经过的网络都可见;它建议 IPv4 截到 24 位、IPv6 截到 56 位,所以对方拿到的是你所在的一段地址,不是完整 IP。
平台这一侧:AI 平台没有公开风控细则,也没有说明会不会看访客的解析器。技术上,任何网站只要能看到自己域名的权威 DNS 查询,就能用同样的办法看到解析器。所以 DNS 泄露不必当成「一定会被封」,但出口在海外、解析器在国内,本身是一组对不上的信号。
IP 判官怎么检测
首页和 Claude、ChatGPT、Muse 专项检测页都会跑这一项,结果在「浏览器与连接检查」的「DNS 解析器」一行:
- 页面随机生成一个 12 位字符串,访问 4 个从没人查过的子域名:
随机串-1.t.ipjudge.org到随机串-4.t.ipjudge.org。 - 名字是全新的,任何缓存里都没有,你的解析器只能去问
t.ipjudge.org的权威 DNS。这台权威 DNS 是我们自己的探针服务器,用独立 IP,不经过 CDN。它记下每一个来查询的服务器地址;查询里带着 ECS 的,也记下那段网段。 - 页面取回这份记录,用本地 IP 库查出每个解析器所在的国家和网络(ASN),再和打开本站的出口所在国家比较。最多列出 6 个解析器。
判定规则:
- 出口不在中国大陆,而有解析器在中国大陆:泄露到国内。
- 出口不在中国大陆,解析器附带的 ECS 网段在中国大陆:同样记为泄露到国内,因为你的真实网段被转告给了网站的 DNS。
- 解析器和出口在不同国家,但不属于上面两种:地区不一致,只作提示。
- 国家一致:未泄露。这一次没有记录到任何解析器:未知,刷新重测即可。
在 Claude 环境分里,「DNS 走国内」在 20 分的「泄露」项中扣 8 分;Muse 注册环境分扣 5 分。这是 IP 判官按常见风控信号定的权重,不是平台公布的规则,完整说明见 判定方法。探针只在内存里保存「随机串 → 解析器」的对应关系 10 分钟,不写入磁盘。
常见原因
1. 代理只接管了连接,没有接管 DNS。查询照旧按系统设置发给路由器或运营商下发的解析器。开了 TUN(虚拟网卡)模式也不一定够:以开源代理内核 mihomo 为例,它的 TUN 文档写明,在 macOS、Windows 上无法自动劫持发往局域网地址的 DNS 请求;Android 开着 Private DNS 时,也无法自动劫持。
2. 域名先在本机解析,再交给代理。SOCKS5 协议允许把域名原样交给代理(RFC 1928 里的 DOMAINNAME 地址类型),但程序不一定这样用。以 curl 为例,官方手册写明 --socks5(即 socks5://)在本地解析主机名,--socks5-hostname(即 socks5h://)才让代理解析。
3. 按 IP 分流的规则触发本机解析。规则要按目标 IP(例如某个国家的 IP 段)决定走向,软件就得先知道域名对应的 IP。mihomo 的 规则文档写明,匹配到这类规则时会触发 DNS 解析,加 no-resolve 参数可以跳过。解析用的是软件里配置的 DNS 服务器,如果那是国内的解析器,查询就留在国内。
4. fake-ip 一类模式的例外。fake-ip 模式下,本机程序查询域名得到的是 fake-ip-range 网段里的占位地址,不是真实地址(mihomo DNS 文档的示例配置用 198.18.0.1/16)。但列在 fake-ip-filter 里的域名不分配占位地址,要真正去解析;DNS 服务器本身的连接走不走代理,也要另外设置(同一文档里的 respect-rules 让 DNS 连接遵守分流规则,并要求同时配置 proxy-server-nameserver)。
5. 浏览器自己的安全 DNS。Chrome 帮助页面写明,安全 DNS 默认以自动模式开启,查找出问题时会改用未加密方式。Chrome 企业政策 DnsOverHttpsMode 说明,没有设置这项政策的非受管设备上,浏览器可能把加密查询发给与系统解析器相关联的服务商。系统解析器在国内,加密后可能还是同一家。Firefox 的 默认保护出问题时回退到默认解析器,VPN、家长控制或企业策略生效时会停用 DoH。另外,DoH 通常走 HTTPS 的 443 端口,只拦截 53 端口的 DNS 接管设置拦不到它。
6. IPv6 的 DNS。IPv6 网络里,路由器可以通过路由通告(RA)直接给设备下发 DNS 服务器地址(RFC 8106)。只改了 IPv4 的 DNS,或者代理只接管了 IPv4,查询就可能经 IPv6 发给运营商的解析器。
怎么改
目标是让 DNS 和出口在同一侧:要么把域名交给代理,由出口那一侧解析;要么让解析器的连接也经过代理。具体选项因软件而异,原则如下:
- 在代理软件里找「远程解析」「接管 DNS」一类的设置;用 TUN 模式时开启 DNS 劫持,并留意上面提到的系统限制。
- 检查有没有按 IP 分流的规则让域名在本机解析,以及软件里配置的 DNS 服务器是谁、连接走不走代理。
- 浏览器的安全 DNS 二选一:交给代理处理,或者选一个自定义提供商,并确认这条加密连接本身经过代理。Chrome 在 设置 → 隐私与安全 → 安全 → 高级 → 使用安全 DNS,帮助页面写明选了自定义提供商就不会退回未加密模式;Firefox 在设置里的 DNS over HTTPS 部分。
- 双栈网络上,确认代理同时接管了 IPv6,或者把 IPv6 的 DNS 设置一并改掉。
- 命令行里用 curl 等支持 SOCKS5 的工具时,写成
socks5h://这种让代理解析的形式。 - 改完回 首页 重测。每次检测都用新的随机子域名,不受上一次缓存影响。
DNS 之外,WebRTC 也可能让网页拿到另一个 IP,见 WebRTC 泄露。
常见问题
显示「地区不一致」算泄露吗?
IP 判官不把它算作泄露,也不扣分。解析器和出口不在同一个国家时,按查询来源位置返回结果的网站(例如 CDN)可能把你分到离出口较远的服务器,RFC 7871 的引言讲的就是这个问题。
开了浏览器的安全 DNS,就不会泄露了吗?
不一定。加密防的是途经网络偷看和干扰,解析器的运营者照样看得到查询,Mozilla 也写明它的 DoH 合作方能看到用户的查询。自动模式还可能沿用系统解析器的服务商,出问题时回退到未加密查询。以检测结果为准。
页面显示的解析器 IP,为什么和我设置的 DNS 地址不一样?
探针记录的是实际来查询的那台服务器的地址。你填的可能是路由器、代理软件或公共 DNS 的服务地址,它们会转给上游,或者从自己的其他服务器出去查询,所以看到的常常是另一个 IP。判断时看国家和运营商就够了。
出口本来就在国内,会判 DNS 泄露吗?
不会。「泄露到国内」只在出口不在中国大陆时判定;出口在国内、解析器在别处,只提示地区不一致。
ChatGPT、Claude 会因为 DNS 泄露封号吗?
没有公开资料能回答。平台看得最清楚的是你连接它时的出口 IP,见 ChatGPT、Claude 看到的是哪个 IP。DNS 泄露更直接的后果,是国内运营商能看到你访问的域名。修好它,是让各项网络信号保持一致、少暴露一些信息;其他信号见 Claude 验证的 6 个网络信号。
想知道你自己的 IP 属于哪一类?
免费检测我的 IP