科学上网如何防止 DNS 泄露?保障真实 IP 隐私安全
许多用户在使用代理软件上网时,常常会忽略一个严重的安全漏洞——DNS 泄露 (DNS Leak)。DNS 泄露是指:即使你的实际网页浏览流量已经通过加密代理节点发送,但你对网站域名的解析请求却依然通过本地宽带网络发往了国内运营商的默认 DNS 服务器。
这不仅会导致运营商能完全监视你访问了哪些网站,更会导致你面临 DNS 污染、甚至隐私泄露的风险。本文将从底层原理解析 DNS 泄露,并教您如何在 Clash、Sing-box 以及浏览器端彻底封堵这一漏洞。
一、 什么是 DNS 泄露及其危害
DNS (域名系统) 负责将类似 google.com 的英文网址转换为计算机能看懂的 IP 地址。在正常的代理流程中,你的代理客户端应该接管这个解析过程,通过远端安全的代理节点去获取正确的 IP。
然而,如果代理客户端配置不当,浏览器在发起加密代理连接之前,会先使用系统的网络设置向运营商(如中国电信、中国联通)的 DNS 发送查询请求。危害包括:
- 上网历史被完全追踪: 运营商可以留存你在特定时间查询
telegram.org或wikipedia.org的记录,即便他们打不开里面的内容。 - 目标网站识别你的真实 IP: 某些敏感网站通过 WebRTC 技术或反向 DNS 追踪,发现你的 DNS 请求来自中国本地运营商的 IP,而你的访问流量来自境外代理 IP,两相对比直接判定你使用了翻墙代理,从而实施拦截(例如 ChatGPT 的 Access Denied 和 Google 的频繁验证码,通常就与 DNS 泄露有关。具体可以参考 避开谷歌验证码指南 与 ChatGPT被拦截解决方法)。
二、 如何检测自己的网络是否存在 DNS 泄露?
检测 DNS 泄露的方法非常简单:
- 开启你的科学上网代理客户端。
- 在浏览器中打开专业的 DNS 泄露测试网站:dnsleaktest.com。
- 点击“Standard test”(标准测试)或“Extended test”(扩展测试)。
- 观察测试结果: 如果列表中显示的 DNS 服务器全部是 Google、Cloudflare 或者你代理节点所在的境外国家(如香港、日本、新加坡、美国),说明防泄露成功;如果列表中出现了中国大陆(China)或你本地宽带运营商(如 China Net / Unicom)的 DNS 节点,说明你正处于 DNS 泄露状态。
三、 导致泄露的根本技术原因
大部分 DNS 泄露是由代理软件在 “系统代理”模式 下的局限性造成的:
在系统代理(System Proxy)模式下,代理软件只接管支持代理协议的软件(如浏览器)的 HTTP/HTTPS/SOCKS 流量。而对于底层的 UDP 53 端口(DNS 默认端口)请求,系统代理是无法拦截的。
要彻底封堵此漏洞,必须使用虚拟网卡拦截(TUN 模式),或者在代理软件的内置 DNS 模块中建立严格的解析分流分流规则(Fake-IP 模式或安全 DoH)。
四、 Clash / Mihomo 内核防泄露黄金配置
如果你使用的是 Clash Verge Rev 等软件,可以通过修改或扩展配置文件中的 dns: 模块来防泄露:
dns:
enable: true
enhanced-mode: fake-ip # 强烈推荐 Fake-IP 模式,浏览器只拿到虚拟 IP,绝不向本地发送真实查询
listen: 127.0.0.1:1053
nameserver:
- 223.5.5.5 # 国内域名使用阿里 DNS 解析
- 119.29.29.29
fallback:
- https://dns.cloudflare.com/dns-query # 国外域名强制使用加密 DoH 且通过代理节点解析
- https://dns.google/dns-query
fallback-filter:
geoip: true
geoip-code: CN # 如果解析出来的 IP 不属于中国,则强制使用 fallback 中的安全加密 IP
并在客户端设置中,开启 TUN 模式 (虚拟网卡),确保所有无法通过系统代理拦截的独立软件 UDP 53 请求都会被路由至 Clash 的虚拟网卡内进行安全解析。
五、 Sing-box 内核防泄露分流配置
Sing-box 的设计理念更加底层,其防泄露通过配置独立的 dns 字段和 route 规则来配合实现:
- 在
dns.servers中配置两个组:一个是国内直连组(如阿里 DoH),另一个是境外代理安全组(如 Cloudflare DoH)。 - 在
dns.rules中配置:如果是国内域名(匹配 geosite:cn),使用国内直连组解析;其他域名(特别是匹配代理规则的域名)一律路由至代理组,并强制设定client_subnet阻止地理位置泄露。 - 启用 Sing-box 的
tun拦截模块,开启stack: mixed或gvisor,将 DNS 请求自动捕获并分流。
六、 浏览器与系统层级辅助设置
除了配置代理软件外,在浏览器端做两个小调整能起到双重保险作用:
- 禁用浏览器的 WebRTC: WebRTC 允许网页通过 JavaScript 脚本直接获取本地真实网卡的局域网和外网 IP。在 Chrome 中,可安装插件“WebRTC Control”一键禁用;在 Firefox 中,可在
about:config中将media.peerconnection.enabled设置为false。 - 禁用浏览器的安全 DNS(DoH): 很多人喜欢在 Chrome 设置中开启“使用安全 DNS”。然而在代理环境下,浏览器自带的 DoH 常常会绕过客户端的分流规则,强行去连接国外的 DNS,反而会导致国内网站访问变慢或引发莫名其妙的 DNS 泄露。请将浏览器的安全 DNS 设置为关闭,完全交给 Clash/Sing-box 去接管解析。
确保上述配置生效后,您的网络冲浪环境将变得坚不可摧,彻底远离因 DNS 泄露带来的隐身隐患。