DNS服务器怎么选择和测试?一套可复现的判断方法
简答:DNS测速第一名不一定让网页最快。先保留当前DNS作为基线,再按家庭宽带、服务器、跨区域办公或内网场景选择候选;随后用同一设备、同一网络和同一组域名进行多轮查询,最后复测真实网页或业务。
定义:DNS服务器通常指为客户端递归查询域名并返回A、AAAA、CNAME等记录的解析服务;选择时要同时看解析速度、超时率、结果一致性、隐私与过滤需求,以及后续业务连接表现。
先看场景:DNS选择速查表
本文是独立第三方使用指南,不代表任何客户端、网络服务或DNS服务商的官方页面。选择DNS前,先记录当前配置,不要直接删除原有地址。运营商DNS、公共递归DNS、企业或内网DNS、路由器转发器和本地缓存并不是同一种角色:路由器可能只是把局域网设备的查询转发给上游;本地缓存可能直接返回已有结果,不能代表上游服务器的首次解析性能。
| 场景 | 候选顺序 | 重点测试 | 不宜直接下的结论 |
|---|---|---|---|
| 家庭宽带 | 当前运营商DNS、公共DNS并测 | 常用域名、A/AAAA、超时率、网页加载 | 一次查询最快就一定最好 |
| 国内或海外服务器 | 服务商内置DNS、同区域公共DNS | 连续查询、递归稳定性、IPv4和IPv6 | Ping低就代表解析和业务都快 |
| 跨区域办公 | 实际出口附近的DNS或企业DNS | 办公域名、CDN返回结果、冷缓存表现 | 公共DNS在所有地区都相同 |
| 企业内网 | 企业DNS、条件转发或分流DNS | 内网域名、搜索域、外部域名递归 | 直接替换为公共DNS |
| 家庭路由器 | 路由器上游DNS与单设备DNS对照 | 多设备继承、缓存刷新、回滚结果 | 路由器显示的地址就是最终上游 |
可将当前DNS、Google Public DNS、Cloudflare 1.1.1.1和Quad9作为测试候选,但不要把下表当成固定排名。Google公开的IPv4地址为8.8.8.8和8.8.4.4;Cloudflare公开的标准解析地址为1.1.1.1和1.0.0.1;Quad9的安全拦截服务地址为9.9.9.9和149.112.112.112。这些服务的过滤、加密和解析策略不同,应以各自当前文档为准。Google Public DNS配置说明、Cloudflare解析服务地址、Quad9服务地址与功能
最快速的最小测试闭环
- 备份:记录系统、路由器或客户端当前DNS、IPv4/IPv6状态和测试日期。
- 建候选:保留原DNS,再加入不超过两个公共DNS;企业网络先保留企业DNS。
- 统一测试:固定设备、网络、出口和域名,分别查询A与AAAA记录。
- 重复测试:每个域名每个DNS至少查询10轮,记录中位数、P95、最大值和超时次数。
- 实际复测:先确认域名解析,再访问真实网页或办公系统,区分DNS成功和页面加载成功。
- 回滚:出现内网域名失败、全部网站异常或结果明显不一致时,恢复原DNS并清理本地缓存。
DNS解析时间只代表查询阶段。网页还要经过路由、TCP或QUIC连接、TLS握手、代理、MTU和目标服务器响应,因此“DNS更快”不能直接等同于“网页更快”。
Windows:指定DNS并进行多轮查询
在命令提示符中先执行ipconfig /all,记录当前网卡、默认网关和DNS Servers。Microsoft文档说明,ipconfig /all可显示各适配器的完整TCP/IP配置。
指定DNS进行单次查询:
nslookup example.com 8.8.8.8nslookup example.com 1.1.1.1nslookup -type=AAAA example.com 9.9.9.9
第二个参数就是要使用的DNS服务器。重点记录状态、返回的A或AAAA记录、是否超时和返回结果数量。Microsoft nslookup文档
PowerShell可使用Resolve-DnsName -Name example.com -Server 1.1.1.1 -DnsOnly。其中-Server指定DNS服务器,-DnsOnly避免把LLMNR或NetBIOS等机制混入测试。要重复测试,可在PowerShell执行:1..10 | ForEach-Object { Resolve-DnsName -Name example.com -Server 1.1.1.1 -DnsOnly -ErrorAction SilentlyContinue | Select-Object Name,Type,IPAddress,QueryType }。该命令便于收集结果,但不同系统版本输出字段可能不同,耗时统计建议使用PowerShell计时或手工记录。Microsoft Resolve-DnsName文档
修改DNS后,可执行ipconfig /flushdns清空本机DNS客户端缓存,再重新查询。该命令只清理本机缓存,不代表路由器或上游递归服务器的缓存已经清空。Microsoft ipconfig文档
macOS和Linux:用dig区分查询结果与本地缓存
安装或已有BIND工具时,可使用以下命令指定DNS:
dig @8.8.8.8 example.com Adig @1.1.1.1 example.com Adig @9.9.9.9 example.com AAAA
重点查看status、Answer部分、返回记录和Query time。同一域名连续查询可能受到本机、路由器或递归服务器缓存影响,所以应同时测试多个域名,并在记录中注明“缓存状态未知”。Cloudflare官方排障文档也使用dig对多个解析器进行对照查询。Cloudflare DNS排障文档
使用systemd-resolved的Linux系统可先执行resolvectl status查看当前生效的DNS和网卡,再执行resolvectl query example.com确认解析。需要清理本地缓存时可执行resolvectl flush-caches,但是否影响系统配置取决于当前解析服务和发行版设置。freedesktop.org resolvectl文档
不要把dig +trace的结果当成普通公共DNS测速。它会逐级查询根、顶级域和权威服务器,测试的是另一条解析路径,更适合定位委派或权威响应问题。
路由器怎么测试:先查看继承关系,再决定是否修改
路由器界面因厂商和固件不同,不能安全地给出统一菜单名称。通用流程是:登录路由器管理页,记录当前WAN或Internet页面中的DNS地址;查看LAN或DHCP页面,确认是否向局域网设备下发路由器地址;再选择一个测试DNS保存。Google官方说明也提醒,不同路由器界面不同,部分运营商提供的设备可能无法修改DNS。Google Public DNS路由器配置说明
- 先拍照或抄录WAN、LAN和DHCP中的原配置。
- 只改一个位置,保存后等待路由器重新下发配置。
- 在一台电脑上断开并重新连接网络,确认它是否继承了新DNS。
- 使用
nslookup example.com或resolvectl status查看实际使用的DNS。 - 再用另一台设备测试,排除单设备缓存或手动DNS覆盖。
- 如果内网域名、打印机发现或办公系统异常,立即恢复原配置。
路由器上的DNS可能只是转发器地址,设备看到的也可能是路由器局域网地址,而不是公共DNS的真实地址。因此必须在终端设备上查看实际生效配置,并把路由器测试与单设备指定DNS测试分开记录。
如何评分:给出参考规则,不制造“永久最快”结论
可以使用一个简化的100分模板:解析稳定性40分、P95查询耗时25分、解析结果一致性20分、实际业务连接15分。稳定性可按40 × (1 - 超时次数 ÷ 总次数)计算;P95越低得分越高;解析结果一致性不能简单要求所有DNS返回同一个IP,应检查是否存在NXDOMAIN、SERVFAIL、REFUSED、明显异常地址或与业务预期不符的记录;实际业务则记录页面能否打开、TLS是否成功和办公应用是否可用。
参考淘汰规则如下:超时率持续较高的候选先淘汰;内网域名无法解析的公共DNS不能用于企业内网;只在单个域名上领先、但P95或实际网页表现不稳定的候选不作为默认DNS;两个候选差距很小时,优先选择不会破坏内网解析、具备所需IPv6或DoH/DoT能力且回滚简单的方案。以上是测试模板,不是所有网络都适用的硬阈值。
| 项目 | 记录内容 |
|---|---|
| 环境 | 设备、系统、网络类型、出口、测试日期 |
| 候选 | DNS地址、IPv4或IPv6、是否加密、是否过滤 |
| 查询 | 域名、记录类型、轮次、Query time、中位数、P95、最大值 |
| 异常 | 超时、NXDOMAIN、SERVFAIL、REFUSED、返回结果异常 |
| 业务 | 域名解析、TCP或TLS连接、网页加载、办公应用结果 |
| 结论 | 保留、继续观察或恢复原DNS,并写明理由 |
在线DNS测试工具什么时候有用
在线多节点测试适合观察不同地区、运营商或网络出口看到的解析结果,尤其可用于检查CDN分线路解析、域名是否在某些地区返回异常记录。但在线工具的测试节点不等于你的电脑、路由器或办公出口,网页显示的延迟也不能直接替代本地多轮查询。
使用在线工具时,应记录测试节点地区、运营商、时间、查询记录类型和返回IP;不要只根据某个节点的“最快”标签更换全网DNS。更稳妥的做法是先用在线结果发现差异,再回到实际设备上用nslookup或dig复测,最后检查真实网页或业务连接。Google官方测试方法也强调,域名访问成功后应进一步用固定IP和回滚步骤区分DNS问题与网络问题。Google Public DNS测试说明
常见问题
DNS服务器怎么选最稳妥?
先保留当前DNS作为基线,再按使用场景加入公共DNS或企业DNS候选。用同一设备、同一网络和多个域名重复测试,综合比较中位数、P95、超时率、解析结果和实际业务,而不是只看一次查询。
主DNS和备用DNS必须来自不同服务商吗?
不必须。Google官方建议至少配置两个DNS地址且不要填成同一个地址;同一服务商的不同地址配置简单,但可能共享任播体系或同一策略。不同服务商可以降低单一路径故障风险,却可能造成过滤策略、CDN返回或内网解析不一致,应先测试再决定。Google Public DNS配置建议
为什么不同DNS返回的IP不一样?
可能与CDN、任播节点、地域解析、IPv4或IPv6路径、缓存状态和服务商策略有关。不同IP不一定错误,应继续检查连接建立和网页加载;只有持续失败、返回明显异常地址或与业务预期不符时,才进一步排查。
出现NXDOMAIN、SERVFAIL、REFUSED分别怎么办?
NXDOMAIN通常表示该名称不存在;SERVFAIL表示解析器未能完成查询;REFUSED表示查询被拒绝。先用另一个已知存在的公共域名复测,再对照企业内网域名和当前DNS。如果只有内网域名失败,不要继续盲目更换公共DNS,应检查企业DNS或分流配置。
改DNS后所有网页都打不开怎么办?
恢复记录中的原DNS,重新连接网络并清理本地缓存,再分别测试普通外部域名、内网域名和固定IP访问。若固定IP也无法访问,问题可能不在DNS;若只有域名访问失败,再继续检查DNS配置和路由器转发。
常见问题
DNS服务器怎么选择最稳妥?
先保留当前DNS作为基线,再按家庭、服务器、跨区域办公或内网场景加入候选。用同一设备、同一网络和多个域名多轮测试,综合比较中位数、P95、超时率、解析结果和实际业务。
Windows怎么测试指定DNS?
在命令提示符执行“nslookup example.com 1.1.1.1”,或在PowerShell执行“Resolve-DnsName -Name example.com -Server 1.1.1.1 -DnsOnly”。
路由器改DNS后为什么设备仍使用旧地址?
设备可能保留了旧DHCP租约、本地缓存或手动DNS。重新连接网络后,在终端执行nslookup、ipconfig /all或resolvectl status确认实际生效配置。
DNS测速第一名是否就一定最好?
不一定。DNS只负责解析,网页还要经过路由、连接、TLS、代理和服务器响应。应把解析耗时与实际页面或办公应用结果分开记录。
相关阅读
参考资料
- Google Public DNS:开始使用、路由器配置与测试
- Cloudflare 1.1.1.1:解析服务地址与协议
- Cloudflare 1.1.1.1:DNS排障与对照查询
- Quad9:服务地址与功能(quad9.net)
- Microsoft Learn:nslookup命令
- Microsoft Learn:Resolve-DnsName
- Microsoft Learn:ipconfig命令
- freedesktop.org:resolvectl官方手册(freedesktop.org)
- developers.google.com