摘要: DNS 是互联网的”电话簿”,将域名翻译成 IP 地址。在使用代理时,DNS 解析的正确性直接决定了你能不能打开网站、会不会泄漏隐私、国内网站会不会变慢。本文从基础讲起,解释 DNS 在代理场景中的特殊性和常见问题。
DNS 是什么
DNS(Domain Name System,域名系统)是互联网最基础的服务之一。它的作用只有一个:把人类能记住的域名翻译成计算机能理解的 IP 地址。
没有 DNS,你上网时需要记住的不是 google.com,而是 142.250.80.14;不是 baidu.com,而是 39.156.66.10。全球有数十亿个网站,靠记 IP 地址访问显然不现实。DNS 就是那个帮你查号码的电话簿。
DNS 的核心概念很简单:
- 域名:人类可读的网站地址,如
google.com、github.com。 - IP 地址:服务器的真实网络地址,如
142.250.80.14。 - DNS 服务器:负责翻译域名和 IP 的服务器。你的电脑每次访问网站,都要先问 DNS 服务器”这个域名对应哪个 IP”。
- 默认 DNS:你连上网络后,运营商(ISP)会自动给你分配一个 DNS 服务器地址。大多数人从未手动配置过 DNS,用的就是运营商默认提供的。
DNS 服务器分两种角色:
- 递归 DNS 服务器:你的设备直接询问的对象。它收到你的查询后,如果自己不知道答案,会代替你去逐级查询,最终返回结果。运营商的 DNS、阿里 DNS(223.5.5.5)、Google DNS(8.8.8.8)都属于这种。
- 权威 DNS 服务器:某个域名的”官方”记录持有者。比如
google.com的权威 DNS 由 Google 运营,只有它才能给出google.com的最终 IP 地址。
普通用户不需要关心权威 DNS,只需要知道:你的设备会把域名发给一个递归 DNS 服务器,它负责帮你找到答案。
DNS 解析过程(简化版)
以你在浏览器中输入 google.com 为例,整个 DNS 解析过程如下:
第一步:浏览器发起请求。 你在地址栏输入 google.com 并回车,浏览器需要知道这个域名对应的 IP 地址。
第二步:浏览器询问操作系统。 浏览器不会自己去查 DNS,而是调用操作系统的网络接口,问”google.com 的 IP 是多少?”
第三步:操作系统检查本地缓存。 如果你最近刚访问过 google.com,操作系统可能已经缓存了结果,直接返回 IP,不需要再查一次。
第四步:缓存未命中,询问 DNS 服务器。 本地没有缓存,操作系统就把查询请求发送到配置的 DNS 服务器地址。默认情况下,这个地址是运营商自动分配的。
第五步:DNS 服务器逐级查询。 递归 DNS 服务器收到请求后,先检查自己的缓存。如果没有,它会按照层级依次查询:先问根域名服务器(root)”.com 在哪”,再问 .com 的服务器”google.com 的权威 DNS 在哪”,最后问 google.com 的权威 DNS”IP 是多少”。
第六步:返回 IP 地址。 DNS 服务器拿到答案后,把 IP 地址返回给你的操作系统。操作系统再把结果交给浏览器,同时缓存这个结果以备下次使用。
第七步:浏览器连接目标服务器。 拿到 IP 地址后,浏览器直接向这个 IP 发起 HTTP/HTTPS 连接,网页内容开始加载。
整个过程通常在几十毫秒内完成。看起来简单直接,但在代理场景下,几乎每一步都可能出问题。

图片来源:Indusface
1 | graph LR |
为什么代理场景下 DNS 特别复杂
在不使用代理的正常网络环境中,DNS 解析很少出问题——你的设备问运营商的 DNS 服务器,得到正确的 IP,连接成功。但一旦涉及代理,DNS 就变成了最容易出问题的环节。原因有四个。
问题一:DNS 污染
DNS 污染(DNS Poisoning / DNS Spoofing)是中国大陆网络环境中最核心的 DNS 问题。
原理很简单:当你向 DNS 服务器查询被封锁域名(如 google.com)的 IP 时,GFW 会抢在真正的 DNS 服务器返回结果之前,注入一个伪造的响应。这个伪造响应里的 IP 地址是错误的——可能是 127.0.0.1(本机)、一些随机的无关 IP,或者干脆不返回任何结果。
关键在于:DNS 污染发生在代理介入之前。
传统的 DNS 查询使用 UDP 协议的 53 端口,内容完全明文,没有任何加密或验证机制。GFW 对这个端口的监控和劫持是全面的。即使你的代理服务器完全正常、线路通畅,只要 DNS 解析这一步拿到了错误的 IP,后面的连接就不可能成功。
具体表现:
google.com被解析到127.0.0.1或无效 IP → 浏览器显示”无法连接”google.com被解析到某个国内 IP → 连接超时或显示错误页面- DNS 查询直接超时无响应
这就是为什么仅仅开了代理,有时候还是打不开网站——DNS 污染在更早的阶段就把路堵死了。
问题二:DNS 泄漏
DNS 泄漏(DNS Leak)指的是:你以为自己在使用代理上网,实际上 DNS 查询仍然走的是本地网络,直接发送到运营商的 DNS 服务器。
这意味着什么?即使你的网页数据通过代理传输、运营商看不到你访问的内容,但 DNS 查询暴露了你访问的目标域名。运营商的日志里会清楚地记录:这个用户在某时某刻查询了 google.com、twitter.com、youtube.com 的 IP。
DNS 泄漏的常见原因:
- 系统代理模式:大多数系统代理只接管 HTTP/HTTPS 流量,DNS 查询走的是操作系统的网络栈,不经过代理。
- TUN 模式未正确配置:TUN 模式理论上接管所有网络流量,但如果 DNS 设置不当,查询可能仍然走漏。
- 应用绕过代理:某些应用程序(特别是系统级服务)可能不遵守系统代理设置,直接发起 DNS 查询。
- IPv6 泄漏:代理只配置了 IPv4,IPv6 的 DNS 查询从旁路走掉了。
DNS 泄漏不影响功能(网站能打开),但对隐私构成威胁。如果你在意隐私,必须确保 DNS 查询也经过代理通道。
问题三:CDN 定位错误
这是很多人忽略的问题,但它直接影响网速。
大型网站(B站、淘宝、Netflix 等)使用 CDN(内容分发网络)在全球部署了大量服务器节点。当你查询这些域名的 IP 时,CDN 的 DNS 会根据你的 DNS 服务器位置来判断你在哪,然后返回离你最近的节点 IP。
问题来了:
- 国内域名用了海外 DNS 解析:你用
8.8.8.8(Google DNS)查询bilibili.com,CDN 认为你在美国,返回美国节点 IP。结果你一个在北京的用户,访问 B 站的流量绕了一圈太平洋,速度断崖式下降。 - 国外域名用了国内 DNS 解析:你用运营商 DNS 查询
google.com,得到的是被污染的结果,根本连不上。
这就引出了代理场景下 DNS 的核心原则:国内域名用国内 DNS 解析,国外域名通过代理在远端解析。
分流做不好,要么国内网站变慢,要么国外网站打不开。两头不讨好。
问题四:先有鸡还是先有蛋
还有一个容易被忽视的循环依赖问题:
代理客户端需要连接代理服务器。要连接代理服务器,首先要知道代理服务器的 IP。如果你的代理配置用的是域名(比如 hk.example.com),客户端就需要先做一次 DNS 解析。
但 DNS 查询本身就可能被污染。
如果你的代理服务器域名被 GFW 污染了,代理客户端连代理服务器都连不上——DNS 解析失败 → 拿不到正确的服务器 IP → 代理建立不了 → 所有流量都不通。
解决方法:
- 代理服务器配置直接使用 IP 地址而非域名
- 使用 DoH(DNS over HTTPS)来解析代理服务器的域名,绕过 UDP 53 端口的劫持
- 在 hosts 文件中手动写入代理服务器域名的正确 IP
代理客户端如何处理 DNS
理解了上面的四个问题,就能理解为什么代理客户端需要自己接管 DNS 处理,而不是交给操作系统。主流代理客户端(Clash、sing-box 等)采用以下几种方式处理 DNS。
Fake-IP 模式(主流方案)
Fake-IP 是目前最主流、推荐度最高的 DNS 处理方式。
核心思路:不做真正的 DNS 解析,而是直接返回一个假 IP,先把连接拦截下来。
工作流程:
- 浏览器要访问
google.com,向系统发起 DNS 查询。 - 代理客户端拦截这个查询,不去问任何真实 DNS 服务器。
- 代理客户端从自己维护的一个假 IP 池(通常是
198.18.0.0/16)中分配一个 IP,比如198.18.0.1,并记录下”198.18.0.1 = google.com”的映射。 - 浏览器拿到
198.18.0.1,向这个 IP 发起连接。 - 代理客户端拦截这个连接,通过映射表查到目标是
google.com,然后根据分流规则决定:走代理还是直连? - 如果走代理:把域名
google.com发给远端代理服务器,由远端进行真正的 DNS 解析和连接。 - 如果直连:使用国内 DNS(如阿里 DNS)进行真正的解析,拿到正确的国内 CDN IP,直接连接。
Fake-IP 的优势:
- 彻底避免 DNS 污染:外网域名的真实 DNS 解析在远端完成,本地根本不查询,也就不存在被污染的可能。
- CDN 定位准确:国内域名由国内 DNS 解析,CDN 定位正确;国外域名由代理节点所在地的 DNS 解析,CDN 定位也正确。
- 速度快:省去了本地 DNS 查询的等待时间,首次连接速度更快。
Fake-IP 的详细原理和配置参见 Fake-IP 与 Redir-Host 的区别。
Redir-Host 模式
Redir-Host 是更传统的 DNS 处理方式。它的逻辑是先进行真正的 DNS 解析,拿到真实 IP,然后根据 IP 或域名决定路由。
流程:
- 浏览器查询
google.com,代理客户端拦截。 - 代理客户端同时向国内 DNS 和国外 DNS 发起查询。
- 根据返回结果判断域名归属,选择合适的 IP 返回给浏览器。
- 浏览器连接该 IP,代理客户端再根据连接目标决定是否走代理。
Redir-Host 的问题:
- DNS 查询仍然在本地发生,外网域名可能被污染。
- 需要同时配置国内和国外 DNS,逻辑更复杂。
- 如果 DNS 结果不准确,分流判断就会出错。
目前 Redir-Host 已不是推荐方案。如果你的客户端支持 Fake-IP,优先使用 Fake-IP。
远端解析
远端解析指的是 DNS 查询完全在代理服务器端完成,本地不做任何解析。
这种方式隐私性最好——本地网络上完全看不到任何 DNS 查询。但缺点是所有域名(包括国内域名)都通过代理解析,国内网站的 CDN 定位可能不准确,导致速度下降。
实际使用中,远端解析通常和 Fake-IP 结合:外网域名远端解析,国内域名本地解析。这是目前最合理的组合方案。
常用 DNS 服务器
选择合适的 DNS 服务器是配置代理 DNS 的第一步。以下是国内外常用的 DNS 服务。
国内 DNS
| DNS 服务 | IP 地址 | DoH 地址 | 特点 |
|---|---|---|---|
| 阿里 DNS | 223.5.5.5 |
https://dns.alidns.com/dns-query |
速度快,覆盖广,支持 DoH/DoT |
| 腾讯 DNS | 119.29.29.29 |
https://doh.pub/dns-query |
稳定可靠,支持 DoH |
| 114 DNS | 114.114.114.114 |
无 | 老牌 DNS,不支持 DoH |
国内 DNS 用于解析国内域名。推荐阿里 DNS 或腾讯 DNS,因为它们支持 DoH,可以防止查询被篡改。114 DNS 不支持加密查询,不推荐作为首选。
国际 DNS
| DNS 服务 | IP 地址 | DoH 地址 | 特点 |
|---|---|---|---|
| Cloudflare | 1.1.1.1 |
https://cloudflare-dns.com/dns-query |
全球响应速度最快 |
8.8.8.8 |
https://dns.google/dns-query |
最知名,稳定性高 | |
| Quad9 | 9.9.9.9 |
https://dns.quad9.net/dns-query |
注重安全,自动拦截恶意域名 |
重要提示:国际 DNS 在中国大陆通常无法直接使用。UDP 53 端口发往 8.8.8.8 或 1.1.1.1 的查询会被劫持或丢弃。但通过代理访问时,这些 DNS 可以正常使用。在代理客户端配置中,国际 DNS 通常不需要手动配置——外网域名通过代理远端解析时,代理节点所在地可以正常访问这些 DNS。
什么是 DNS over HTTPS (DoH)
传统 DNS 查询使用 UDP 协议、53 端口,内容完全明文。这意味着:
- 任何中间设备都能看到你查了什么域名
- 任何中间设备都能篡改 DNS 响应(DNS 污染的技术基础)
- 运营商可以完整记录你的 DNS 查询日志
DoH(DNS over HTTPS)把 DNS 查询封装在 HTTPS 协议里传输。HTTPS 是加密的,这带来两个好处:
- 防窃听:中间设备无法看到你查询的域名。
- 防篡改:中间设备无法伪造 DNS 响应,因为 HTTPS 有完整的证书验证机制。
在代理场景中,DoH 的作用主要体现在国内 DNS 查询上。对于国内域名(如 baidu.com、bilibili.com),你需要使用国内 DNS 服务器来获得正确的 CDN IP。如果这些查询使用明文 DNS,理论上仍然存在被篡改的可能。使用 DoH(如 https://dns.alidns.com/dns-query),可以确保即使是国内域名的 DNS 查询也不被篡改。
关于加密 DNS 的各类方案对比,参见 加密 DNS 全解。DoH 不是万能的。如果 DoH 服务器本身返回了错误结果(比如国内 DNS 对被墙域名返回的就是错误 IP),DoH 只能保证传输过程不被篡改,不能修正服务器本身的回答。所以,被墙的域名仍然需要通过代理远端解析。
推荐配置原则
根据以上分析,代理场景下的 DNS 配置应遵循以下原则:
第一,使用国内 DNS 作为代理客户端的主要 DNS 服务器。 推荐阿里 DNS(223.5.5.5)或腾讯 DNS(119.29.29.29)。这个 DNS 服务器负责解析国内域名,确保 CDN 定位正确、访问速度正常。
第二,外网域名交给代理远端解析。 不要试图在本地解析 google.com、youtube.com 等被墙域名。让代理客户端把域名传给代理节点,由节点在海外完成 DNS 解析。
第三,优先使用 Fake-IP 模式。 如果你的代理客户端支持 Fake-IP(Clash、Clash Verge、sing-box 等都支持),启用它。Fake-IP 从根本上解决了 DNS 污染和泄漏问题,是目前最省心的方案。
第四,国内 DNS 尽量使用 DoH。 把国内 DNS 地址配置为 DoH 格式(如 https://dns.alidns.com/dns-query),而不是裸 IP(223.5.5.5)。这样可以防止国内 DNS 查询被中间环节篡改。
第五,不要在本地直接使用国际 DNS。 不要把系统 DNS 设置为 8.8.8.8 或 1.1.1.1。在中国大陆网络环境下,直接使用这些 DNS 的 UDP 53 端口查询会被劫持。即使使用 DoH 访问这些国际 DNS,国内域名也会因为 CDN 定位错误而变慢。
常见问题
Q:我需要手动配置 DNS 吗?
取决于你的使用方式。如果你使用 Clash Verge、mihomo 等客户端并开启了 TUN 模式或系统代理,客户端会接管 DNS 处理。但你仍然需要确认客户端的 DNS 配置是正确的——错误的 DNS 配置是代理场景中最常见的问题来源。很多”代理开了但打不开网站”的情况,根本原因是 DNS 配置不当。
Q:为什么不能全部用 8.8.8.8?
两个原因。第一,在中国大陆直接访问 8.8.8.8 的 UDP 53 端口,你的 DNS 查询会被 GFW 劫持,返回的结果不可信。第二,即使你通过 DoH 成功访问了 8.8.8.8,当你查询国内域名(如 taobao.com)时,Google DNS 会认为你在美国,返回美国 CDN 节点的 IP。你的淘宝流量会绕到美国再回来,速度大幅下降。所以必须国内域名用国内 DNS、国外域名远端解析。
Q:DNS 和代理协议有关系吗?
DNS 是独立于代理协议的。无论你用的是 VLESS、VMess、Trojan 还是 Hysteria,DNS 配置的原则完全相同。代理协议决定的是”数据怎么传输”,DNS 决定的是”目标服务器在哪里”。它们是两个独立的问题。
Q:什么是 DNS over HTTPS (DoH)?
DoH 把 DNS 查询封装在 HTTPS 请求中进行传输。传统的 DNS 查询使用 UDP 明文传输,中间人可以轻松窃听和篡改。DoH 利用 HTTPS 的加密和证书验证,使得 DNS 查询内容既无法被窥探,也无法被篡改。在代理场景中,DoH 是防止国内 DNS 查询被劫持的重要手段。
Q:Fake-IP 模式会影响国内网站的速度吗?
不会。Fake-IP 模式下,代理客户端对国内域名(匹配直连规则的域名)仍然使用国内 DNS 进行真实解析。只有匹配代理规则的域名才会走远端解析。所以国内网站的 CDN 定位不受影响,速度和不使用代理时相同。
Q:我用了代理但 DNS 测试显示泄漏(可通过 dnsleaktest.com 检测),怎么办?
检查以下几点:一、确认代理客户端是否开启了 TUN 模式(系统代理模式下 DNS 泄漏几乎不可避免,详见 DNS 泄漏检测与修复);二、确认代理客户端的 DNS 设置中启用了 Fake-IP;三、检查是否存在 IPv6 泄漏——如果你的网络有 IPv6,但代理客户端只处理了 IPv4,DNS 查询可能通过 IPv6 走漏。可以在代理客户端中禁用 IPv6,或确保 TUN 模式同时接管 IPv4 和 IPv6。