公司使用dnsmasq作为内网DNS服务器,前一段时间收到同事各种吐槽,弄得我颜面扫地。具体有下面几种异常:

  • 解析超时,上游配置腾讯公共DNS

aneirin@host-1:~$ dig @119.29.29.29 www.baidu.com

; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> @119.29.29.29 www.baidu.com; (1 server found);; global options: +cmd;; connection timed out; no servers could be reached
  • 解析国外域名偶尔失败,上游使用百度公共DNS

aneirin@host-1:~$ dig @180.76.76.76 www.linuxtechi.com

; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> @180.76.76.76 www.linuxtechi.com; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER< opcode: QUERY, status: SERVFAIL, id: 55999;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;www.linuxtechi.com.       IN  A......
  • 配置两台上游DNS,一台阿里的,一台谷歌的,dnsmasq开启“--all-servers”选项,

偶尔出现“www.baidu.com”解析到国外IP的情况

百度解析到国外IP

总结就是国内的公共DNS服务器解析国外域名偶尔出现解析超时或给出错误IP,国外的DNS服务器会将国内的域名解析成国外IP(谷歌宣称他们可以根据请求来源给出最优的IP地址,但工作中多次出现国内域名解析到国外IP的情况,如果有窍门,欢迎读者指点)。

痛点

上面的问题有两点需要解决,一是配置多个上游DNS服务器,取得响应最快的结果,这点dnsmasq就可以满足,它可以配置两个以上的DNS上游服务器,加上“--all-servers”选项,响应最快的返回结果将发给客户端。

--all-servers
By default, when dnsmasq has more than one upstream server available, it will send queries to just one server. Setting this flag forces dnsmasq to send all queries to all available servers. The reply from the server which answers first will be returned to the original requester.

这里解决了超时和“SERVFAIL”的问题,但没有解决返回非最优IP的问题,谷歌的公共DNS可能会缓存“www.baidu.com”的结果,这样就会出现返回速度比国内公共DNS快的情况,但这时客户端得到的IP很可能是国外的,导致请求变慢。如果服务器在将解析结果返回给客户端前,先做一个测试,比如ping测试或更高层的测试,测试性能最优的结果返回给客户端,这就完美了!

解决痛点-SmartDNS

在github上溜达,还真发现了这么一款软件-SmartDNS,国人开发的,必须赞一个。

下面介绍来自SmartDNS:

“SmartDNS是一个运行在本地的DNS服务器,SmartDNS接受本地客户端的DNS查询请求,从多个上游DNS服务器获取DNS查询结果,并将访问速度最快的结果返回给客户端,提高网络访问速度。同时支持指定特定域名IP地址,并高性匹配,达到过滤广告的效果。与dnsmasq的all-servers不同,smartdns返回的是访问速度最快的解析结果。”

为了最小化对现有配置的更改,我将SmartDNS部署在和dnsmasq不同的主机上,并将SmartDNS作为dnsmasq的上游DNS服务器。SmartDNS的安装比较简单,配置项也比较丰富,这里主要使用软件的“域名预取”和“最快结果返回”功能。下面是配置文件(省略了冗长的注释),

bind [::]:53cache-size 4096# 开启域名预取,smartdns将在域名ttl即将超时的时候,再次发送查询请求,并缓存查询结果供后续使用prefetch-domain yes # 上游DNS返回多个结果时,使用ping方式作为测速方法speed-check-mode ping log-level infoserver 223.5.5.5server 223.6.6.6server 119.29.29.29server 8.8.8.8server 8.8.4.4

配置文件中,配置了多个上游DNS服务器,有国内的也有国外的,并使用ping方式作为查询结果的测速方法,这样不仅解决了“timeout”和“SERVFAIL”的问题,也解决了解析国内域名返回国外IP的问题。软件上线了有一个多月,再也没有先前的问题出现,而且同事也反馈访问国内网站快了一些,容我偷乐下!

SmartDNS还有不少高级的功能,自己没有做更多测试,感兴趣读者可以自行上github学习。

图片和内容源自网络分享,若有侵权,请联系删除!

上海艾磊科技有限公司专门为企业提供IT咨询,IT外包,系统集成,以及各类IT增值服务。其中增值服务包括OFFICE 365云服务,鼎捷企业ERP管理软件,云备份,企业邮箱,无线覆盖,上网行为管理,VPN架设,网络安全服务,INTERNET接入,设备租赁, IP电话服务

ping得通dns却无法上网_一款好用的DNS服务器SmartDNS相关推荐

  1. dns被自动修改_怎么加速iTunes下载速度 设置DNS方法【介绍】

    这回主要分享的加速iTunes下载应用的方法主要是修改你连接的无线网络(WIFI)的DNS的方法. 有的人可能会问为什么修改DNS就可以了呢? 简单的说就是把你所要下载的服务器准确的找到,不用自动分配 ...

  2. vmware中NAT模式下,虚拟机与主机能ping通 为什么虚拟机不能上网

    vmware中NAT模式下,虚拟机与主机能ping通 为什么虚拟机不能上网? 方案一: 1.把虚拟机的网络连接设置为桥接或NAT都可以的 2.把虚拟机和主机设置为同一网段 主机 网络邻居属性 3.双击 ...

  3. python如何测试仪器_使用python检测一个设备是否ping的通

    标签: 使用python检测一个设备是否ping的通 一,subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子 ...

  4. 外网业务访问故障,ping时通时断,显示有请求超时time out处理过程

    类似问题参考: ip地址冲突导致ping时通时断显示超时问题处理过程_wj31932的博客-CSDN博客 无法上网故障排查过程及复现过程系ip冲突造成_wj31932的博客-CSDN博客_arp获取不 ...

  5. 解决ping得通IP 但是ping 不通域名的问题

    能ping通ip 则代表链路是通的,但是ping不通域名只能说明是域名解析出现了问题. 可使用nslookup + 域名 看下是哪个域名服务器,我们很多时候都是使用自动获取DNS服务器,但是有些时候, ...

  6. dns迭代查询配置_人人都能看懂-关于dns服务基本知识

    一.DNS: Domain Name Service 应用层协议(C/S,53/udp, 53/tcp) 域名又称网域,是由一串用点分隔的名字组成的上某一台或计算机组的名称,用于在数据传输时对计算机的 ...

  7. Maven工作笔记003---公司只允许代理上网_给maven配置代理下载jar包

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 公司只允许代理上网_给maven配置代理_下载jar包啊 配置很简单: 找到maven的setti ...

  8. 手机流量怎么修改dns服务器,手机上网速度慢怎么办?手动修改DNS为上网提速

    相信很多Android手机用户都有遇到过类似问题,明明大家用的都是同样的Wi-Fi网络,但是别人的手机可以秒开网页,而自己的手机却总会慢个半拍或是经常打不开.遇到这种问题是不是很气人呢,那么,手机上网 ...

  9. DNS错误不能上网怎么办 电脑dns错误修复方法

    电脑dns错误会导致无法打开网页及无法上网的情况,那么,DNS错误不能上网怎么办?如何解决?针对此问题,本文就为大家图文介绍电脑dns错误修复的方法 一刷新DNS缓存 设置完电脑DNS后,可能电脑依然 ...

最新文章

  1. D3DXCOLOR 和 D3DCOLOR 和 D3DCOLORVALUE
  2. 学习笔记Spark(二)—— Spark集群的安装配置
  3. 微服务实践:全栈小团队“洪荒之力”改造阿里服务CRM技术体系
  4. Extjs 4.2 MVC+ThreeJs学习笔记(二)一个简单的ThreeJS场景
  5. python摄像头人脸识别代码_python 实现摄像头人脸识别
  6. JSP四大域对象与九大内置对象
  7. View controller-based status bar
  8. php 电梯程序设计,教你写出京东电梯式轮播
  9. ASP.NET MVC下的四种验证编程方式[续篇]
  10. 华三 h3c Smart linkMonitor link配置
  11. Python 和 C++实现 九九乘法表
  12. catia三维轴承_常用滚动轴承手册与三维图库(CATIA版)
  13. FIR versus IIR Butterworth Chebyshev Bessel Filter
  14. AWS System Manger 批量操作EC2 实例
  15. 作业1:从产品经理人的角度规划项目
  16. EuroBen Benchmark安装以及测试(By Robinvane Suen)
  17. c语言输出我爱你程序,程序员表白教程,这些代码用过的都成功了!
  18. (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究串口通信(SPI flash)
  19. DDR扫盲——DDR与DDR2、DDR3的区别
  20. 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第九节:卡通渲染

热门文章

  1. 【特征工程】与【表示学习】
  2. 基于口令的密码PBE(Password Based Encryption)
  3. java元婴期(18)----java进阶(spring(2)----DI(依赖注入)基于注解的IOC与DI配置properties)
  4. 现代密码学5.1--哈希函数定义
  5. 下载linux操作系统一般的初始账号密码(虚拟机)
  6. 多态及其内部原理剖析
  7. (61)分析 KiFindReadyThread 函数 —— 线程优先级
  8. PE学习(四)第四章:导入表
  9. Acwing第 28 场周赛【完结】
  10. Acwing第 24 场周赛【完结】