结论

国内可以在以下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. 2018-11-23-国内好用的-DNS-列表

      title author date CreateTime categories 国内好用的 DNS 列表 lindexi 2018-11-23 12:45:57 +0800 2018-11-23 12 ...

    2. C#/C++ 通过ODBC连接OceanBase Oracle租户

      概述 近期我们项目正处于将Oracle数据库迁移到OceanBase Oracle租户模式的阶段.考虑到我们项目采用了C++和C#混合开发,并且使用了多种技术,因此存在多种数据库连接方式.然而,针对C ...

    3. minicube安装

      minicube安装 一.安装手册: https://minikube.sigs.k8s.io/docs/start/ 二.安装 打开官网,选择和自己对应的系统和要下载的版本.点击下面的release ...

    4. 远程控制软件 TeamViewer 的局限性和替代方案

      TeamViewer 公司创建于2005年,总部位于德国,客户遍及全球,其中企业用户居多,其各方面性能都很不错,但价格却非常贵.针对个人用户,TeamViewer 提供免费版软件,但时不时会提示&qu ...

    5. Linux环境下:程序的链接, 装载和库[动态链接]

      静态链接库在程序编译阶段就完成了链接工作,完成链接后,依赖的库就都打入了可执行文件中,所以文件大小一般会比较大. 而动态库链接库是在程序运行时才被链接的,所以磁盘上只要保留一份副本,因此节约了磁盘空间 ...

    6. 图解JDK7及其早期版本HashMap扩容死锁问题

      在JDK7及其早期版本中HashMap在多线程环境下会发生扩容死锁的问题. HashMap中在创建时默认会有16个桶,有一个默认加载因子0.75,如果Map中的Entry数量达到阈值(16*0.75) ...

    7. Django——Media配置

      settings.py中的配置: MEDIA_ROOT 和 MEDIA_URL MEDIA_ROOT 是指:用户上传文件的根路径 --> MEDIA_ROOT = os.path.join(BA ...

    8. 面向编程对象的好处及应用紧耦合VS松耦合(继承,多态)(1-2)

      面向编程对象的好处及应用紧耦合VS松耦合(继承,多态)(1-2) 当初: 代码是做了客户端与业务的分离的封装 现在: 加深下功底,在上一个随笔之前做一个修改和拓展(继承,多态) 作业: 现在从计算器变 ...

    9. RabbitMQ系列(五) RabbitMQ的文件和目录位置

      概述 每个RabbitMQ节点使用一些文件和目录,用于加载配置.存储数据 / 元数据 / 日志文件等等.这些文件和目录的位置是可以自定义的. 本指南涵盖: 1)如何自定义RabbitMQ节点所使用的各 ...

    10. WPF使用WPFMediaKit/AForge调用摄像头示例 .net core 8.0 也支持

      调用摄像头使我们经常会用到的一个功能,可以根据摄像头捕捉到的图像进行分析处理来做很多的东西,比如电子档案.图像识别.AI分析等等. 本示例中主要介绍Nuget最常用的两个调用摄像头的轮子 WPFMed ...