DNS为什么重要?
DNS是互联网的"电话簿",将域名翻译成IP地址。问题在于传统DNS查询是明文的,你的ISP、GFW都能看到你查询了哪些域名。更糟的是,GFW会主动篡改DNS结果——这就是DNS污染。
GFW的DNS污染原理
当你查询被封域名时,GFW抢先返回假IP地址。由于GFW部署在国际出口,假响应总是比真实响应更快到达。
例如查询google.com,真实IP应是142.250.x.x,但GFW抢答返回无效IP,你的浏览器连到假IP自然打不开。
关键:即使你使用8.8.8.8或1.1.1.1,只要DNS查询是明文走国际出口,照样被污染。
如何检测DNS污染?
- nslookup对比:分别用国内和国外DNS查询同一域名,如果返回的都不是真实IP,说明出口处污染生效
- 在线检测:翻墙后访问dnsleaktest.com,Extended test结果中如出现中国DNS服务器,说明存在DNS泄露
加密DNS协议
DoH(DNS over HTTPS)
将DNS查询封装在HTTPS请求中,通过443端口传输,与正常网页流量无法区分。
| 服务商 | DoH地址 | 特点 |
|---|---|---|
| Cloudflare | https://1.1.1.1/dns-query | 速度快,隐私好 |
| https://dns.google/dns-query | 稳定性高 | |
| AdGuard | https://dns.adguard.com/dns-query | 自带广告过滤 |
DoT(DNS over TLS)
通过TLS加密,使用853端口。Android系统原生支持("私人DNS"功能),但853端口容易被GFW识别封锁,可用性不如DoH。
DoQ(DNS over QUIC)
基于QUIC的最新标准,连接建立更快,但客户端支持还不广泛。
各平台配置方案
方案一:代理客户端内配置(推荐)
在Clash等客户端的DNS模块中:
- 国内域名用国内DNS(223.5.5.5),速度快
- 国外域名通过代理用DoH(1.1.1.1),防污染
- fake-ip模式最彻底——本地返回虚拟IP,真正解析在代理端完成
方案二:浏览器开启DoH
- Chrome:设置 → 隐私和安全 → 安全 → 使用安全DNS
- Firefox:设置 → 隐私与安全 → DNS over HTTPS → 最大保护
仅保护浏览器内DNS,其他应用仍走系统DNS。
方案三:Android私人DNS
设置 → 网络和互联网 → 私人DNS → 输入DoT域名(如1dot1dot1dot1.cloudflare-dns.com)。对所有应用生效。
方案四:本地DNS代理
- AdGuard Home:自建DNS服务器,支持DoH上游+广告屏蔽,可部署在路由器覆盖全家
- SmartDNS:多上游并发查询,自动选最快结果
- mosdns:灵活的DNS转发器,支持复杂分流
DNS分流最佳实践
| 域名类型 | DNS服务器 | 原因 |
|---|---|---|
| 国内域名 | 223.5.5.5 | 解析快,CDN分配准确 |
| 国外域名 | DoH 1.1.1.1(通过代理) | 加密防污染 |
| 广告域名 | 返回0.0.0.0 | 屏蔽广告 |
验证配置是否生效
- 翻墙后访问dnsleaktest.com,Extended test应只有代理服务器所在地的DNS
- 命令行nslookup google.com,确认返回Google真实IP
- 国内网站加载速度不应明显变慢,否则说明国内域名错走了国外DNS
总结
DNS是翻墙安全中最易被忽视也最易出问题的环节。推荐方案:代理客户端内置DNS模块+fake-ip模式+国内外分流。如果你的DNS还是默认的"自动获取",现在就该改了。


