结论

国内可以在以下DNS选择:114DNS阿里DNS。(阿里请联系我,给我广告费^_^)

国外可以在以下DNS选择:谷歌DNS、1.1.1.1 DNS、Cisco Umbrella DNS

国内DNS对比

DNS服务 提供商 地址 优势 缺点 其他
114DNS 中国电信 114.114.114.114 节点:国内拥有1000+节点。在中国用户量第一。
阿里DNS 阿里 223.5.5.5
223.6.6.6(备用)
节点:
  • 国内每个省都有节点。
  • 海外26个国家拥有节点。
  • 官网:https://www.alidns.com/
    DNSpod 腾讯 119.29.29.29 节点:
  • 免费版>8
  • 智能解析:如同运营商访问
  • 官网:https://www.dnspod.cn/products/publicdns
    oneDNS 北京微步在线科技 117.50.11.11
    52.80.66.66
    节点:
  • 80+
  • 华北、华中、华南都有
    商业版:攻防演练、防止DNS污染。(来自客服)
  • 官网:https://www.onedns.net/
    百度DNS 百度 180.76.76.76 网站老旧 官网:https://dudns.baidu.com/
    联通DNS 联通 210.22.70.3(上海) 各省份的DNS地址不一样
    sDNS 中国互联网络信息中心 1.2.4.8
    210.2.4.8
    - 客服电话是空号、或无人接听 官网:https://www.sdns.cn/
    中科大DNS 中科大 202.141.162.123:5353
    202.141.178.13:5353
    可能会更改ip地址
    清华DNS 清华 101.6.6.6:5353 节点数:1
    DNS派 360 电信:101.226.4.6
    联通:123.125.81.6
    移动:101.226.4.6
    铁通:101.226.4.6
    就近解析 网站老旧 官网:http://www.dnspai.com/public.html

    国外DNS对比

    主要数据来源:https://www.dnsperf.com/#!dns-resolvers

    DNS服务 提供方 地址 优势 缺点 官网
    谷歌DNS 谷歌 8.8.8.8
    8.8.4.4
    解析速度一流。
    稳定性一流。
    https://developers.google.com/speed/public-dns?hl=zh-cn
    1.1.1.1 DNS CloudFlare 1.1.1.1
    1.0.0.1
    解析速度第一。
    稳定性第一。(自2022-05到2023-05)
    官网:https://1.1.1.1/
    G-Core DNS G-Core 95.85.95.85
    2.56.220.2
    解析速度一流,但不在前列。
    稳定性一流。
    官网:https://gcore.com/public-dns
    Cisco Umbrella DNS 思科 208.67.222.222
    208.67.220.220
    解析速度一流。
    稳定性一流。
    官网:
  • https://umbrella.cisco.com/
  • https://docs.umbrella.com/deployment-umbrella/docs/point-your-dns-to-cisco
  • NextDNS NextDNS - 解析速度一流。
    稳定性一流。
    免费版限制300,000 次查询/月 官网:https://nextdns.io/zh
    Quad9 DNS Quad9 9.9.9.9
    149.112.112.112
    解析速度一流。
    稳定性一流。
    中国只有香港和台湾有节点 官网:https://www.quad9.net/

    测试

    结论:

    • 国内只有阿里电信114强,其他的甚至会有拉跨的现象。
    • 国外可以选择CloudFlare、思科。

    为什么要测试?

    • 实践是检验真理的唯一标准,理论与上线之间必须要有测试
    • 公共DNS是为公众服务的,倾向于全局最优。而我们需要局部最优。(对自己来说是最优)
    • 数据驱动。

    测试脚本-得到各分位延迟.go:

    package main
    
    import (
    "errors"
    "fmt"
    "github.com/miekg/dns"
    "sort"
    "sync"
    "time"
    ) ///////////////////////////////////////////////////////////////////////////
    // 代码作用:解析域名列表,得到平均延迟、各分位延迟
    // 版本:v0.1
    // 最近一次更新时间:2023年5月22日
    /////////////////////////////////////////////////////////////////////////// type DnsProbe struct {
    DomainList []string
    Server string
    Concurrency int
    } // 检查域名A记录是否正常解析
    func checkDomainA(domain string, dnsServer string) (error, time.Duration) {
    c := dns.Client{}
    c.ReadTimeout = 3000 * time.Millisecond
    m := dns.Msg{}
    m.SetQuestion(domain, dns.TypeA)
    r, rtt, err := c.Exchange(&m, dnsServer)
    if err != nil {
    return err, rtt
    }
    // 从返回结果中得到A记录
    for _, ans := range r.Answer {
    _, ok := ans.(*dns.A)
    if ok {
    return nil, rtt
    }
    }
    return errors.New("查不到A记录"), 0
    } // 解析所有域名
    func (d DnsProbe) CheckDomainList() {
    var errCount = 0
    var latencySum float64 = 0
    var latencys []float64 var wg sync.WaitGroup
    wg.Add(len(d.DomainList))
    var lockErr sync.Mutex
    var lockLatencySum sync.Mutex
    countGoroutine := make(chan int, d.Concurrency) for _, domain := range d.DomainList {
    countGoroutine <- 1
    go func(domain string) {
    defer wg.Done()
    // 主要逻辑
    err, rtt := checkDomainA(domain, d.Server)
    if err != nil {
    lockErr.Lock()
    defer lockErr.Unlock()
    fmt.Printf("[debug] err:%s\n", domain+" "+err.Error())
    errCount++
    } else {
    lockLatencySum.Lock()
    defer lockLatencySum.Unlock()
    latency := float64(rtt.Microseconds()) / float64(1000)
    latencySum += latency
    latencys = append(latencys, latency)
    }
    <-countGoroutine
    }(domain)
    }
    wg.Wait() sum := len(d.DomainList)
    countSuccess := sum - errCount
    fmt.Printf("域名总数:%d\n", len(d.DomainList))
    if errCount > 0 {
    fmt.Printf("成功数:%d\n", countSuccess)
    fmt.Printf("失败数:%d\n", errCount)
    }
    if countSuccess == 0 {
    return
    } fmt.Printf("平均延迟:%.4f\n", latencySum/float64(countSuccess)) //计算分位延迟
    sort.Float64s(latencys)
    index99 := int(0.99 * float64(len(latencys)-1))
    index95 := int(0.95 * float64(len(latencys)-1))
    index90 := int(0.90 * float64(len(latencys)-1)) var tempSum float64
    i := 0
    // 90分位
    for ; i <= index90; i++ {
    tempSum += latencys[i]
    }
    fmt.Printf("90分位平均/最大延迟:%.2f %.2f\n", tempSum/float64(index90+1), latencys[index90]) // 95分位
    for ; i <= index95; i++ {
    tempSum += latencys[i]
    }
    fmt.Printf("95分位平均/最大延迟:%.2f %.2f\n", tempSum/float64(index95+1), latencys[index95]) //99 分位
    for ; i <= index99; i++ {
    tempSum += latencys[i]
    }
    fmt.Printf("99分位平均/最大延迟:%.2f %.2f\n", tempSum/float64(index99+1), latencys[index99])
    } func main() {
    domainList := []string{"baidu.com.", "taobao.com."}
    probe := DnsProbe{
    DomainList: domainList,
    Server: "10.191.112.3:53",
    Concurrency: 5,
    }
    probe.CheckDomainList()
    }

    114.114.114.114测试结果:(电信)

    域名总数:1174

    成功数:1140

    失败数:34

    平均延迟:27.9103

    90分位平均/最大延迟:19.65 23.58

    95分位平均/最大延迟:20.18 40.50

    99分位平均/最大延迟:22.82 210.91

    223.5.5.5测试结果:(阿里)

    域名总数:1174

    成功数:1143

    失败数:31

    平均延迟:14.6767

    90分位平均/最大延迟:8.37 11.11

    95分位平均/最大延迟:8.57 13.96

    99分位平均/最大延迟:9.85 85.91

    119.29.29.29测试结果:(腾讯)

    域名总数:1174

    成功数:1134

    失败数:40

    平均延迟:56.8179

    90分位平均/最大延迟:28.09 143.87

    95分位平均/最大延迟:36.87 238.82

    99分位平均/最大延迟:49.29 592.15

    117.50.11.11测试结果:(北京微步)

    域名总数:1174

    成功数:1128

    失败数:46

    平均延迟:166.1405

    90分位平均/最大延迟:73.53 429.60

    95分位平均/最大延迟:102.53 717.20

    99分位平均/最大延迟:143.09 1888.25


    8.8.8.8测试结果:(谷歌)

    域名总数:1174

    成功数:1145

    失败数:29

    平均延迟:294.6463

    90分位平均/最大延迟:271.93 366.86

    95分位平均/最大延迟:276.98 371.25

    99分位平均/最大延迟:284.67 1091.67

    1.1.1.1测试结果:(CloudFlare)

    域名总数:1174

    成功数:1145

    失败数:29

    平均延迟:178.7482

    90分位平均/最大延迟:136.31 336.56

    95分位平均/最大延迟:148.73 482.76

    99分位平均/最大延迟:166.93 821.59

    95.85.95.85测试结果:(G-Core)

    域名总数:1174

    成功数:1111

    失败数:63

    平均延迟:527.6431

    90分位平均/最大延迟:375.50 1138.58

    95分位平均/最大延迟:429.46 1990.93

    99分位平均/最大延迟:502.98 2636.41

    208.67.222.222测试结果:(思科)

    域名总数:1174

    成功数:1147

    失败数:27

    平均延迟:179.5852

    90分位平均/最大延迟:142.50 222.05

    95分位平均/最大延迟:149.00 318.45

    99分位平均/最大延迟:162.16 981.61

    9.9.9.9测试结果:(Quad9)

    域名总数:1174

    成功数:1140

    失败数:34

    平均延迟:199.7471

    90分位平均/最大延迟:140.72 351.70

    95分位平均/最大延迟:154.14 483.79

    99分位平均/最大延迟:179.46 1865.28

    参考文档

    国内外公共 DNS调研的更多相关文章

    1. 全球免费公共 DNS 解析服务器 IP 地址列表推荐 (解决无法上网/加速/防劫持)

      除了宽带提供商的 DNS 以外,像阿里云.腾讯云.Google.百度.IBM.CNNIC 等一些有足够实力的大型互联网公司也非常慷慨地为公众提供了免费的 DNS 解析服务器.异次元这就搜集了全球范围内 ...

    2. 亲测!阿里云公共DNS,感觉不错!

      最近阿里推出了公共DNS,这对于普通的网友来说估计没什么用处,但对于我们建站人来说,确实是一个不错的消息.一听说阿里出公共DNS,博主就立马换电信的DNS换下了.经过这几天的测试,相当满意! 个人感觉 ...

    3. 阿里公共DNS 正式发布了

      喜大普奔!集阿里巴巴集团众多优秀工程师开发维护的公共DNS---AliDNS终于上线啦!作为国内最大的互联网基础服务提供商,阿里巴巴在继承多年优秀技术的基础上,通过提供性能优异的公共DNS服务,为广大 ...

    4. 公共 DNS server IP 地址

      公共 DNS server IP 地址 名称 DNS server IP 地址 CNNIC SDNS 1.2.4.8 210.2.4.8 114 DNS 114.114.114.114 114.114 ...

    5. 公共DNS推荐及dns测速

      DNS在平时上网中扮演重要角色,如果不注意DNS的话,可能会导致网速慢.弹窗广告.网址打不开.打开不是自己想要的网站.劫持等一系列问题.针对DNS的问题,今天我们就来总结一下,看看哪个DNS服务器最好 ...

    6. 【Linux】常见公共DNS地址

      如果您是程序员.系统管理员或任何类型的 IT 工作者,那么您可能有自己最喜欢的用于故障排除的 IP 地址.而且你可能已经用了好几年了. 这些 ip 可用于: ping 测试连接 使用 dig 或 ns ...

    7. 百度公共dns

      常用公共DNS服务器地址 DNS(Domain Name System),即域名解析系统,作为将域名和IP地址相互映射的一个分布式数据库,能够使人通过相对好记的域名访问网站,而是一串数字.目前国内运营 ...

    8. 常用公共DNS服务器地址

      DNS,全称Domain Name System,即域名解析系统,帮助用户在互联网上寻找路径,它在互联网的作用是把域名转换成为网络可以识别的IP地址.目前国内电信运营商通过使用DNS劫持和DNS污染的 ...

    9. 免费公共DNS服务器IP地址大全(2017年6月24日)

      收集全球各个常用公共DNS服务器 IP地址,欢迎各位朋友评论补充! 国内常用公共DNS 114 DNS: (114.114.114.114:    114.114.115.115) 114DNS安全版 ...

    10. 前6名免费DNS服务 - 公共DNS服务

      前6名免费DNS服务 - 公共DNS服务 谷歌 8.8.8.8,8.8.4.4备份,用户将期望并获得高可用性,如DNSSEC等过滤和安全保护. OpenDNS 现在是Cisco帝国的一部分,主要是20 ...

    随机推荐

    1. dotnet 警惕使用 StackTrace 加获取方法标记 Attribute 特性在 Release 下被内联

      大家都知道,在 dotnet 里的 Debug 下和 Release 下的一个最大的不同是在 Release 下开启了代码优化.启用代码优化,将会对生成的 IL 代码进行优化,同时优化后的 IL 也会 ...

    2. dotnet Roslyn 通过读取 suo 文件获取解决方案的启动项目

      本文来告诉大家一个黑科技,通过 .suo 文件读取 VisualStudio 的启动项目.在 sln 项目里面,都会生成对应的 suo 文件,这个文件是 OLE 格式的文件,文件的格式没有公开,本文的 ...

    3. Vue2源码解析-源码调试与核心流程梳理图解

      现在VUE3已经有一段时间了,也慢慢普及起来了.不过因为一直还在使用VUE2的原因还是去了解和学了下它的源码,毕竟VUE2也不会突然就没了是吧,且VUE3中很多原理之类的也是类似的.然后就准备把VUE ...

    4. 使用 Kafka Assistant,为您的开发加速

      简要介绍 快速查看所有 Kafka 集群,包括Brokers.Topics和Consumers 支持各种认证模式:PLAINTEXT.SASL_PLAINTEXT.SSL.SASL_SSL 对Kafk ...

    5. 通过虚拟机镜像部署zabbix

      前言 由于基础镜像的缘故,zabbix部署过程中很可能出现各种缺少依赖包的情况,如果环境中又无法连接互联网,系统部署会非常麻烦.为此zabbix官方提供了虚拟机镜像,导入后可以直接在平台上拉起虚拟机, ...

    6. 深入理解 Swift Combine

      Combine 文中写一些 Swift 方法签名时,会带上 label,如 subscribe(_ subscriber:),正常作为 Selector 的写法时会忽略掉 label,只写作 subs ...

    7. rails 上传文件

      控制器文件 app/controllers/api/v1/order_controller.rb def create # 从本地读取 log_dir = File.expand_path(File. ...

    8. Go语言基础之并发 goroutine chan

      参考文档: https://www.liwenzhou.com/posts/Go/14_concurrence/ http://www.5lmh.com/并发编程/channel.html 示例一: ...

    9. C++ 类的继承(Inheritance)

      一.继承(Inheritance) C++有一个很好的性质称为inheritance(继承),就是声明一个class(derived class),把另一个或多个class(base class)的所 ...

    10. Scala中集合中的View用法

      设想以下这个计算 def eval(i: Int): Option[Int] = { println(s"invoke with $i") if (i % 2 == 0) { No ...