DNS 泄漏:代理开了,运营商却全都知道
整理自"无人知晓的 Luke"的 YouTube 视频文字稿:DNS 泄漏原理 + macOS / iOS / Windows / Android / 软路由五大平台修复。
开篇:代驾类比——你还没上车就暴露了
你以为开了代理软件翻墙就安全了?原作者 Luke 说:运营商其实一直都知道你在翻墙,也知道你访问了哪些境外网站——不是猜的,是可以非常确切地知道。
原理很简单:你访问每个网站前,系统要先把网址翻译成 IP 地址,这个翻译过程靠 DNS(域名系统) 完成。如果 DNS 请求没走代理、而是直接发给了运营商,就会造成泄漏。
想象你叫了代驾想悄悄去某个地方,正常只有司机知道你去哪。但 DNS 泄漏就像你还没上车,就站在路边大声问别人"Google 怎么走、YouTube 在哪里"——别人看不到车里做了什么,但已经知道你下一步要去哪。(来自 Luke 原话)
更麻烦的是泄漏原因非常多:系统层面、浏览器层面、IPv6,以及有些代理软件本身。这期视频覆盖 macOS、iPhone、Windows、Android、软路由(OpenWrt / PassWall)五大平台,适合 Shadowrocket 小火箭、V2RayN、V2RayNG、PassWall 用户。
合规说明:以下内容整理自原作者的视频文字稿经验分享,仅作信息学习参考;文中作者推荐的代理、指纹浏览器等服务链接为推广内容(AFF),本课仅中性转述,不构成推荐。
动手前:先检测,用多个网站交叉验证
以下来自 Luke。修复前先打开下面检测网站看现状,修复完再刷新验证:
- https://ipleak.net/
- https://browserleaks.com/dns
- https://dnsleaktest.com/
- https://ippure.com/
判断标准:代理保持开启,等检测完成——如果结果里出现了中国的图标/中国本土 DNS 服务商,就说明发生了 DNS 泄漏。
很多教程没提的关键细节:不同的检测网站在你的代理规则里可能命中不同的分流策略(有的走直连、有的走代理),检测方法也不完全相同。只依赖某一个网站不全面,最稳妥是用多个网站交叉验证。
只用一个网站检测,就像只量一次体温就下结论;多测几个、交叉对比,结论才靠谱。
macOS 修复:小火箭 + Chrome 两处
以下来自 Luke,以小火箭(Shadowrocket)为例。
代理软件层(小火箭配置):
- 打开小火箭 → 配置 → 选中当前配置文件(如 default.conf)→ 右侧圆圈进入配置设置 → 通用
- 如果启用了 IPv6,请关掉(减少 IPv6 解析导致的泄漏)
- 找到「DNS 复写」:把默认的 system 删掉(system = 用手机系统默认 DNS = 运营商分配的,会泄漏)
- 填入两条 Cloudflare 加密 DNS(DoH,DNS over HTTPS):
https://cloudflare-dns.com/dns-query#proxy
https://security.cloudflare-dns.com/dns-query#proxy
- 把「备用 DNS」里的内容全部删掉,只留上面两条(防止主 DNS 不可用时退回系统 DNS)
- 拉到底部找到「劫持 DNS」,填入 8.8.8.8:53——相当于在网络出口装一道检查站,拦截那些不走系统设置、用传统 53 端口偷发 DNS 请求的应用,统一接管
- 点右上角确认,等小火箭自动更新应用新 DNS 设置
浏览器层(如果你还用 Chrome):
- Chrome 设置 → 搜索 DNS → 安全 → 关掉"使用安全 DNS"(它本质是 DoH,但会让谷歌绕过系统 DNS 配置、独立发起 DNS 请求,不走代理隧道)
- 地址栏输入 chrome://flags,搜索 QUIC,把 Experimental QUIC Protocol 设为 disabled,重启(QUIC 基于 UDP,很多代理软件对 UDP 处理不完善,代理规则可能覆盖不到)
传统 DNS 像寄明信片,路上的人都能看内容;DoH 像把查询装进加密信封再寄,路上的人看不到里面写了什么。(来自 Luke 原话)
iOS 修复:和小火箭 macOS 思路一样
以下来自 Luke,思路和 macOS 基本一样:
- 先打开检测网站测当前环境(出现中国 DNS 服务商 = 已泄漏)
- 打开小火箭 → 底部「配置」→ 当前配置文件 → 右侧按钮 → 第一行「通用」
- 「DNS 复写」填入两条 Cloudflare 加密 DNS(同 macOS),有备用 DNS 就删掉
- 拉到底部「劫持 DNS」填入 8.8.8.8:53(强制拦截所有绕过代理的 DNS 请求)
- 右上角确认,等配置生效,回浏览器刷新验证——中国 DNS 服务商消失、全变成 Cloudflare 即达标
Windows 修复:三层,最麻烦
以下来自 Luke。Windows 是步骤最多的平台,因为它有个 macOS 没有的系统级问题,要从系统层、代理软件层、浏览器层依次处理。
① 系统层:关掉"智能多宿主名称解析"
Windows 解析域名时会同时向所有网卡广播 DNS 请求,谁先回来用谁的结果——本地运营商离你最近、响应最快,几乎每次都是它先"抢答",DNS 请求根本没走代理。关闭方法:按 Win+R,输入 gpedit.msc 回车 → 计算机配置 → 管理模板 → 网络 → DNS 客户端 → 找到「关闭智能多宿主名称解析」→ 双击选「已启用」→ 确认。
② 代理软件层:开 TUN / 虚拟网卡模式
- V2RayN(作者用 7.0 版,建议去 GitHub 2dust/v2rayN 下最新版):左下角开启 TUN 模式——在系统里虚拟出一张网卡,把所有流量(含 DNS)都路由进来统一接管;用 sing-box 内核的话也可以把 Fake IP 打开
- Clash:在首页或设置 → 系统设置里开启虚拟网卡模式(类似 TUN),注意别和系统代理模式同时开
③ 浏览器层:Chrome 关"使用安全 DNS"、关 QUIC(chrome://flags → disabled → 重启),原理同 macOS。
智能多宿主像全班同学同时抢答,离老师最近的本地运营商永远先举手;关掉它,等于规定"只许代理这一个同学回答"。
Android 修复:V2RayNG / Clash
以下来自 Luke,以 V2RayNG 为例:
- 打开软件 → 设置 → 第一行「启用流量探测」确认已开启(默认应该是开的)——开启后能正确识别 DNS 请求
- 下拉找到 VPN DNS,确认填了 8.8.8.8 或 1.1.1.1(分别是谷歌和 Cloudflare 的 DNS),没有就手动填上
- 回浏览器打开检测页刷新:没有国内 DNS 服务商、全是境外(含 Cloudflare)即完成
用 Clash 的话,在设置里同样开启 TUN 模式。
软路由修复:PassWall,一次配好全家受益
以下来自 Luke,以 PassWall 为例。软路由是整个局域网的出口,配好之后手机电脑都不用单独配。
- 先打开检测网站确认泄漏(出现国内 DNS 服务商)
- 打开 PassWall 控制面板 → DNS 选项 → 把「默认 DNS」改为远程 DNS——所有 DNS 请求走远程解析、发到境外服务器,不经本地服务商;Fake DNS 和重定向也建议一并开启
- 如果点进 DNS 没看到「远程 DNS」选项:先把模式里的「中国列表」设为直连,保存应用后才会出现
- 保存并应用,回检测页刷新:国内 DNS 服务商全部消失、变为境外即完成
本课讲透的是 DNS 泄漏;另一条常见旁路是 WebRTC 泄漏(浏览器绕过代理直接暴露真实 IP 和位置),详见《05 课 · WebRTC 泄露》。评论区有人总结得很到位:"网络隐私不是一个开关,而是一整套配置。"
术语翻卡:点卡片看解释
自测一下:点问题展开参考答案
DNS 负责把网址翻译成 IP;如果这一步没走代理而是直发运营商,对方就知道你访问了哪些网站。泄漏原因很多:系统层、浏览器层、IPv6、代理软件自身。
代理保持开启,打开 ipleak.net / browserleaks.com/dns / dnsleaktest.com / ippure.com 等检测站;若结果出现中国图标或中国本土 DNS 服务商即泄漏。作者强调多站交叉验证。
DNS 复写填两条 Cloudflare DoH(cloudflare-dns.com/dns-query#proxy 等);劫持 DNS 填 8.8.8.8:53 拦截绕过代理的传统请求。删备用 DNS 是防止主 DNS 不可用时退回系统 DNS。
Windows 会向所有网卡同时广播 DNS 请求、谁先回来用谁;本地运营商离得近几乎每次抢答,DNS 根本没走代理。需在组策略里关闭它,再开 V2RayN/Clash 的 TUN(虚拟网卡)模式。
Chrome 的安全 DNS 会绕过系统 DNS 配置独立发起请求,不走代理隧道;QUIC 基于 UDP,代理软件对 UDP 处理不完善、规则可能覆盖不到,都会造成泄漏。