国内外可用 DNS DoH 及速度实测

国内外 DNS DoH 速度实测

最近发现上网速度变慢,发现是 101 被运营商阻断了…

之前用的 Cloudflare 也被阻断过…

所以能用的越来越少了,测一下速度,看看哪家能用。

DNS(域名解析系统)设置的合适与否,对上网体验影响很大。

而国内域名服务商会劫持 DNS 查询结果,

所以一般要在某工具上设置分流查询 DNS 达到最佳速度和准确性,

将国内服务分流到国内服务商,国外服务分流到国外服务商。

DNS 有三种协议:

协议 描述
UDP 明文传输,被劫持,仅在特殊情况使用 :x:
DoT(DNS over TLS) TLS 加密,相对安全,但固定使用 853 端口很容易被识别和拦截。此地无银三百两,虽然能用但不推荐使用 :x:
DoH(DNS over HTTPS) 普通网页协议加密,相对安全,推荐使用 :white_check_mark:

测试环境

使用开源 DNS 测速工具 dnspyre 测速

模拟日常真实情况:

  • 使用 Wi-Fi 网络连接
  • 关闭所有代理工具直连运营商网关
  • 1000 个 Alexa 热门域名随机选择
  • 包含 IPv4 和 IPv6 类型
  • 限时 30 秒

注:

  • 坐标中部地区,运营商是电信,光猫拨号,测试时间 2024-10-18 18:00-22:00
  • 中部电信非常严格,有强中强,许多其他省份能使用的服务商,这里都无法稳定使用,下面列出 IP 均被阻断的服务商,不能使用不参与测试:
    • Google
    • TW Quad 101
    • CleanBrowsing
    • DNS.SB
    • PowerDNS
    • 等等(所以测试能用的服务商挺稀少的,而且能用的过段时间可能就又不能用了)
  • 部分服务商的域名默认解析到 IPv6 地址会导致测试失败,如:IBM Quad9dns.quad9.net,使用 dig @1.0.0.1 到的 IPv4 地址测试,如有多个 IPv4 地址,仅列出测试平均延迟值最小的一个

测试命令示例:

dnspyre --duration 30s -c 10 -t A -t AAAA https://mirror.ghproxy.com/https://raw.githubusercontent.com/Tantalor93/dnspyre/master/data/1000-domains --probability 0.33 --server https://doh.pub/dns-query

结果数据

原始数据太长不在此处列出

国内服务商

参赛选手

服务商 DoH 备注
基准测试 192.168.1.1 运营商的 DNS 非 DoH
阿里 https://223.5.5.5/dns-query
腾讯 https://doh.pub/dns-query

测试结果(由好到差)

服务商 总响应数 成功响应数 QPS 平均响应时间 标准差 p50 p90
基准测试 2343 1946 68.8 71.79ms 269.33ms 16.78ms 46.14ms
阿里 2175 1795 63.8 135.2ms 294.87ms 37.75ms 301.99ms
腾讯 1545 1335 47.0 193.04ms 307.75ms 83.89ms 469.76ms

国外服务商

参赛选手

服务商 DoH 备注
IBM Quad9 https://9.9.9.9/dns-query 域名无法使用
EasyMosdns https://doh.apad.pro/dns-query 是智能分流服务,详见 apad.pro
OpenDNS https://208.67.222.222/dns-query 域名无法使用
CIRA Canadian Shield https://private.canadianshield.cira.ca/dns-query
0ms https://0ms.dev/dns-query
Comss.one https://dns.controld.com/comss
DeCloudUs https://dns.decloudus.com/dns-query
Cloudflare https://1.0.0.1/dns-query 域名无法使用
dnswarden https://dns.dnswarden.com/uncensored

测试结果(综合性能由好到差)

服务商 总响应数 成功响应数 QPS 平均响应时间 标准差 p50 p90
IBM Quad9 1027 872 31.3 279.2ms 240.41ms 201.33ms 452.98ms
EasyMosdns 1188 496 39.5 210.56ms 285.89ms 96.47ms 419.43ms
OpenDNS 897 754 29.9 332.06ms 254.68ms 226.49ms 637.53ms
CIRA Canadian Shield 858 733 28.5 326.49ms 312.04ms 234.88ms 452.98ms
0ms 851 733 28.3 334.34ms 228.12ms 260.05ms 671.09ms
Comss.one 552 461 17.4 383.25ms 410.57ms 167.77ms 872.42ms
DeCloudUs 427 353 14.2 469.83ms 310.31ms 369.1ms 838.86ms
Cloudflare 387 334 12.9 738.93ms 353.97ms 704.64ms 1.14s
dnswarden 167 70 5.6 1.25s 856.12ms 1.21s 2.68s

注:所有时间数据均已四舍五入到小数点后两位。

  • QPS 代表每秒查询数(Questions per second)。
  • 标准差(Standard Deviation)表示响应时间的波动情况,值越大表示响应时间越不稳定。
  • p50 表示响应时间的中位数,即有一半的请求响应时间小于或等于该值。
  • p90 表示 90% 的请求响应时间小于或等于该值。

结论

最后我选择了 阿里腾讯 作为国内服务商,IBM Quad9EasyMosdns 作为国外服务商。

当然如果你的位置和我不同,每个服务的优劣也可能不同,有兴趣的可以自己测试。

神秘代码

# Mihomo
dns:
  enable: true
  listen: 0.0.0.0:1053
  prefer-h3: true
  ipv6: true
  default-nameserver:
    - https://223.5.5.5/dns-query
  nameserver-policy:
    "geosite:tld-cn,private,cn":
      - https://223.5.5.5/dns-query
      - https://doh.pub/dns-query
    "geosite:tld-!cn,gfw,geolocation-!cn":
      - https://9.9.9.9/dns-query
      - https://doh.apad.pro/dns-query
  nameserver:
    - https://223.5.5.5/dns-query
    - https://doh.pub/dns-query
  fallback:
    - https://9.9.9.9/dns-query
    - https://doh.apad.pro/dns-query

先别开香槟

我很疑惑为什么之前被阻断的 Cloudflare 现在测试居然又能用了,
是 DoH 现在也能被 GFW 精准识别了吗?

随后 Google 到了这篇 2024-03-01 的文章:中国互联网络防火墙已经可以精确识别与境外 DNS over HTTPS(DoH) 服务器的连接

前几天我位于中国大陆的监控服务器突然报异常状态,显示与五台位于中国大陆境外的 DoH 服务器丢失连接,状态为 ERROR_CONNECTION_RESET(连接已重置),通过技术手段排查,发现连接在中国大陆的网络出口处被重置,这无疑是域名被封锁的现象。

继续进行后续排查,发现有且仅有这五个 DoH 所在的域名被封锁,甚至于其中一个位于中国香港的服务器绑定的域名也未能幸免于难,但其余所有子域名,包括位于中国大陆的 DoH 域名都没有受到任何影响。

为了验证该判断,我选择了一个用作蜜罐域名,并在其上搭建了完整的 DoH 服务,并使用位于中国大陆的一台服务器持续不断地向其发送 DoH 请求。大概 4 个小时后,我的监控服务器又报出了异常状态,正是该蜜罐域名丢失连接,这证实了我的假设:“中国互联网络防火墙已经可以精确识别与境外 DNS over HTTPS(DoH) 服务器的连接并加以封锁”。

鉴于以上情况,结合之前 Google(8.8.8.8)、Cloudflare(1.1.1.1) 等大型公开 DNS 服务器被 DNS 抢答的现状分析,说明如今中国互联网络防火墙不仅不允许在大陆内架设 DNS 服务器,也不允许位于大陆的网民访问外部的 DNS 服务器,更别提在境外架设公开 DNS 服务器用于国内访问了。

我已经关闭位于中国大陆境外的五台 DoH 服务器的公共访问,在研究出更为合规的直接 DNS 请求方式、或该封锁被证实不再存在之前,不再提供位于境外的任何直接 DNS 解析服务。

看来想要使用国外 DoH 可能需要将 DNS 查询也通过代理工具转发,缺点是会增加延迟、降低速度…

当然这和我需求的速度快、准确性高也就是本文的主题关系不大,只能有时间再写一写 Tunnel、Cache 了。

参考文档

下列文档内列出的所有国外服务商均已测试,本文内没写说明是无法使用的…

更新日志

欢迎继续补充服务商以测试

401 个赞

感谢分享。。

13 个赞

不错,我在下面贴一个有关ECH的帖子

15 个赞

这个不错,学习了

35 个赞

真的很不错,学习学习!

13 个赞

大佬强,有些深奥,待我补充下基础知识再来回顾

9 个赞

所以,结合ECH,能被识别吗,期待测试!感谢

80 个赞

根本就不知道你访问的是什么网站,只知道你连到了CF的IP,看的到底是合规的还是不合规的都不清楚,甚至是你看了V2EX,它都不知道,其他的事情就啥都不知道了

13 个赞

精准识别 上tor

8 个赞

佬讲得很详细,学习了 :tieba_013:

1 个赞

感谢大佬教程

6 个赞

所以结论是这几个目前还能用对吧
阿里 腾讯 IBM Quad9 EasyMosdns

13 个赞

就是说:使用ECH的话,墙或运营商只知道我们访问的IP,不知道访问的域名,对吧

66 个赞

以备后患可藏

如果你的代理节点延迟很低,那么可以添加通过代理解析的国外DNS

# Mihomo
dns:
  enable: true
  listen: 0.0.0.0:1053
  prefer-h3: true
  ipv6: true
  ipv6-timeout: 50
  use-system-hosts: true
  use-hosts: true
  default-nameserver:
    - https://223.5.5.5/dns-query#DIRECT
  proxy-server-nameserver:
    - https://doh.apad.pro/dns-query#DIRECT
  nameserver-policy:
    "geosite:tld-cn,private,cn":
      - https://dns.alidns.com/dns-query#DIRECT
      - https://doh.pub/dns-query#DIRECT
    "geosite:tld-!cn,gfw,geolocation-!cn":
      - https://9.9.9.9/dns-query#DIRECT
      - https://doh.apad.pro/dns-query#DIRECT
      - http://dns.google/dns-query#节点选择
      - https://cloudflare-dns.com/dns-query#节点选择
  nameserver:
    - https://dns.alidns.com/dns-query#DIRECT
    - https://doh.pub/dns-query#DIRECT
  fallback:
    - https://9.9.9.9/dns-query#DIRECT
    - https://doh.apad.pro/dns-query#DIRECT
    - http://dns.google/dns-query#节点选择
    - https://cloudflare-dns.com/dns-query#节点选择

其中的节点选择是策略组,是将通过指定的代理服务器解析 DNS 请求,改成你的配置里写的 proxy-groups 里的项目就行。

注意DNS 服务器不是越多越好,参考这里的设置酌情删改,一般配置两个国外的就足够了!

我这里是展示不同的配置写法。

3 个赞

感谢楼主分享

国内根本不建议用DOH,原因如下
大家是如何应对阿里和腾讯 DNS 限速的问题?
继腾讯之后阿里云也要对公共 DNS 限速了
现在动辄开个视频网站的请求次数就能超频,除非自己设置了缓存,否则正常使用都够呛(本人亲测,当然你也可以开这两家的免费服务,但要实名),何况
阿里云、腾讯云的 DNS 服务也有污染吗?
折腾半天,硬要说好处就是可以避免一些运营商污染,但这种情况又很少见
至于境外网站,直接分流走代理了,做好DNS防泄漏,运营商也不会知道你访问了这些网站,用不用DOH区别不大吧,除非你非常非常重视隐私,再者
使用运营商默认的 dns 好流畅啊
第三方DNS多少存在解析不精确的问题

5 个赞

部分省份部分地区把1.1.1.1作为内网ip​:grin::grin::grin:,这些地方压根是用不了,1.0.0.1倒是还可以用。

3 个赞

感谢分享,mark

1 个赞

数据来说话 :yum: