把本地DNS服务器改成8.8.8.8、1.1.1.1等海外公共DNS,是很多用户尝试改善上网体验的第一步。但真正使用后,实际感受往往比较割裂:有时解析看起来成功了,网页打开却明显变慢;有时直接出现超时,甚至某些域名返回的结果完全不可用。海外公共DNS在国内的表现并不是简单的可用或不可用,而是受到跨境链路、UDP干扰、CDN调度等多种因素共同影响。本文结合原理与实测,梳理常见海外公共DNS在国内的真实体验,并给出更合理的替代与分流方案。

一、海外公共DNS为什么在国内不稳定
要理解海外公共DNS在国内的表现,首先需要了解递归DNS的工作流程。当终端向公共DNS服务器发起查询时,公共DNS会代替终端完成对根域名服务器、顶级域名服务器以及权威域名服务器的递归查询,最终返回一个IP地址。如果这台公共DNS服务器部署在境外,那么终端与DNS服务器之间的每一次查询都需要穿越国际出口链路。这部分链路本身带宽有限、延迟较高,并且在高峰期容易出现拥塞,因此DNS查询的响应时间会从国内常见的几毫秒上升到几十甚至几百毫秒。
除了物理链路延迟,UDP 53端口在国内网络环境中也较为特殊。传统DNS查询默认使用UDP协议,而该协议的请求与响应容易被中间设备干扰。部分海外公共DNS的未加密UDP请求在跨境传输时会出现被抢答、截断或返回伪造响应的情况。这类现象通常被称为DNS污染,表现为同一个域名在不同网络环境下解析出不同结果,或者解析出的IP无法访问。因此,即便8.8.8.8本身服务稳定,其UDP查询在国内也可能返回不可靠的结果。
另一个经常被忽略的因素是ECS扩展。ECS全称EDNS Client Subnet,它允许递归DNS向权威DNS传递客户端的子网信息,从而让CDN返回距离用户更近的节点。很多海外公共DNS并不向权威DNS传递国内用户的真实ECS信息,或者仅传递一个粗略的出口地址。这样即使域名解析成功,CDN也可能把用户调度到新加坡、美国甚至欧洲的节点,访问国内站点时反而绕了远路,导致网页加载变慢。这个机制解释了为什么有时DNS响应并不慢,但实际体验依然不佳。
二、常用海外公共DNS国内实测体验
为了更直观地比较不同海外公共DNS的国内表现,可以在无代理环境下使用系统自带的命令进行测试。常用的测试方式包括用ping观察网络延迟和丢包率,用nslookup或dig指定DNS服务器进行域名解析,以及使用curl观察DNS解析时间与实际建连时间的差异。下面的命令分别测试了Google DNS和Cloudflare DNS的连通性。
ping -n 20 8.8.8.8 ping -n 20 1.1.1.1 nslookup www.ipipp.com 8.8.8.8 nslookup www.ipipp.com 1.1.1.1
从实际测试来看,Google Public DNS的地址8.8.8.8和8.8.4.4在国内大部分地区可以连通,但延迟通常较高,不同运营商和不同省份之间差异很大。以电信网络为例,平均延迟可能在60毫秒到150毫秒之间,联通和移动网络可能更高。UDP解析的可用性也不稳定,部分域名会返回被污染的结果。相较之下,Cloudflare的1.1.1.1在国内的连通性更差,很多地区的UDP 53端口完全不可用,甚至ICMP ping请求也会出现明显丢包。Quad9的9.9.9.9主要面向安全过滤场景,国内访问同样受跨境链路影响,解析延迟较高。OpenDNS的208.67.222.222表现则与Google DNS类似,但国内用户较少使用。
下面的表格汇总了几款常见海外公共DNS在国内无代理环境下的基本表现。需要注意的是,实际体验会因地区、运营商和网络时段不同而有较大波动,表格数据只反映一般趋势。
| DNS服务 | 主要IP | 国内延迟表现 | UDP解析可用性 | 加密协议可用性 |
|---|---|---|---|---|
| Google Public DNS | 8.8.8.8 / 8.8.4.4 | 较高,60-150ms | 部分区域污染 | DoH/DoT可用但较慢 |
| Cloudflare DNS | 1.1.1.1 / 1.0.0.1 | 高,丢包明显 | 大量区域不可用 | DoH/DoT常被阻断 |
| Quad9 | 9.9.9.9 / 149.112.112.112 | 高 | 一般 | DoT可用性一般 |
| OpenDNS | 208.67.222.222 | 较高 | 一般 | DoH可用性一般 |
从表格可以看出,这些海外公共DNS在国内的共同特点是延迟偏高,UDP解析容易受到干扰。即便某些DNS支持基于HTTPS的DoH或基于TLS的DoT,这些加密协议虽然可以避免解析结果被篡改,但建立加密连接本身也需要经过跨境链路,握手成功率并不高。因此,在无代理环境下,海外公共DNS很难获得稳定的体验。
三、DNS解析快不等于网页打开快
不少用户会把DNS解析速度等同于网页打开速度,实际上这两者有本质区别。DNS解析只负责把域名转换成IP地址,这个过程通常发生在浏览器发起HTTP或HTTPS请求之前。解析完成之后,浏览器才会向目标IP发起TCP连接和TLS握手。如果DNS服务返回的IP距离用户很远,或者对应的服务器带宽不足,那么即使DNS解析本身只花了20毫秒,后续连接和传输仍然可能消耗数百毫秒甚至数秒。
用curl命令可以比较清楚地观察这个过程。下面的命令会输出DNS解析时间、TCP建连时间以及总耗时。在Linux或macOS环境中运行,可以分别用国内DNS和海外DNS访问同一个网站,对比结果会非常直观。
curl -o /dev/null -s -w 'dns:%{time_namelookup}s connect:%{time_connect}s total:%{time_total}s\n' https://www.ipipp.com
例如,使用国内公共DNS解析一个国内CDN加速的网站,DNS解析可能只需要5毫秒,返回的是本省或邻近省份的CDN节点,后续建连和传输都很顺畅。如果换成海外公共DNS,即使DNS解析在50毫秒内完成,返回的却可能是境外CDN节点,TCP建连和TLS握手时间大幅增加,总耗时反而更久。这也是很多用户把DNS改成8.8.8.8后感觉网页变慢的直接原因。
CDN调度依赖DNS请求的来源IP。海外公共DNS的出口地址通常位于境外,权威DNS会认为这是境外用户,从而返回面向境外用户的节点。某些支持ECS的海外DNS会尝试携带用户真实子网,但国内运营商的地址段部署情况复杂,ECS并不总能准确传递。因此,对国内以CDN为主的网站来说,使用海外公共DNS往往会劣化CDN调度结果。
四、国内环境下的替代方案与分流配置
对于大多数国内用户而言,更合理的做法是优先使用国内公共DNS。阿里公共DNS的地址为223.5.5.5和223.6.6.6,腾讯公共DNS为119.29.29.29,百度公共DNS为180.76.76.76。这些服务的国内解析延迟通常低于10毫秒,并且与国内CDN服务商配合较好,能够返回距离用户较近的节点。对访问国内网站、移动应用和视频内容来说,国内公共DNS的体验明显优于海外公共DNS。
如果需要解析海外域名,或者希望获得更干净的解析结果,可以考虑使用分流工具。常见的做法是使用AdGuard Home、SmartDNS或MosDNS等软件,在本地搭建一个DNS递归解析器,并为不同的域名规则配置不同的上游DNS。例如对国内域名走223.5.5.5,对海外域名走8.8.8.8或通过加密DNS转发。AdGuard Home的配置片段如下。
upstream: - 223.5.5.5 - 119.29.29.29 - 8.8.8.8 fallback: - 8.8.8.8 - 1.1.1.1
使用分流方案后,本地DNS既能保证国内域名的解析速度,又能让海外域名走海外公共DNS或加密通道。部分分流工具还支持DoH和DoT,可以配置上游为https://dns.alidns.com/dns-query或tls://8.8.8.8。不过需要注意,加密DNS在国内无代理环境下的连接稳定性同样受跨境链路影响,实际效果需要根据网络环境测试调整。
对于有技术条件的用户,还可以在路由器或NAS上部署递归解析服务,配合IP规则和域名规则实现自动化分流。对于普通用户,最简单的方式是系统默认使用国内公共DNS,仅在浏览器或特定应用中使用支持加密DNS的海外服务。这样既避免了全局使用海外DNS带来的CDN错判,又能在需要时获得更真实的解析结果。
五、总结与选择建议
海外公共DNS在国内并不是完全不可用,但绝大多数场景下并不是最优选择。8.8.8.8、1.1.1.1等服务在国内存在跨境延迟高、UDP解析污染以及CDN调度偏差等问题。如果只是替换系统DNS而不做任何分流,访问国内网站时体验往往会变差。海外公共DNS更适合有代理环境、需要解析特定海外域名,或者通过加密DNS统一转发的场景。
对普通用户的建议是:系统或路由器DNS保持国内公共DNS,例如223.5.5.5或119.29.29.29;如果需要使用海外DNS,优先考虑通过分流工具让海外域名走海外上游,国内域名走国内上游;同时不要把所有网络问题都归因于DNS,网页打开慢还可能与链路、CDN、服务器负载等因素有关。根据实际测试和业务需求选择DNS方案,才能获得稳定且快速的域名解析体验。