百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

一款好用的DNS服务器-SmartDNS(好用的dns.)

nanshan 2024-10-25 13:07 20 浏览 0 评论

公司使用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的情况

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

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

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

希望这篇文章可以帮到正在努力的你,欢迎关注和评论!

相关推荐

轻量级分析利器再升级:解读 DuckDB 1.3.0 新特性

DuckDB团队近日正式发布了最新版本——DuckDB1.3.0,代号“Ossivalis”。此次版本以金眼鸭的远古祖先BucephalaOssivalis命名,象征项目在演化和成长过...

C++跨平台编译的终极奥义:用Docker把环境差异按在地上摩擦

"代码在本地跑得飞起,一上服务器就coredump?"——每个C++程序员都经历过的《编译器的复仇》事件!大家好,我是Henry,废话少说,今天来简单谈一下跨平台编译的那些事儿,...

全网最全-Version Script以及__asm__((&quot;.symver xxx&quot;))使用总结

首先提醒一点,一切的前提建立在你的名字必须要mangling,不然无论你写的versionscript还是__asm__都不会起任何效果VersionScript简单用法:这是一个典型例子,这个例...

Ubuntu 25.04 Beta发布:Linux 6.14内核

IT之家3月28日消息,Canonical昨日(3月27日)放出了Beta版Ubuntu25.04系统镜像,代号“PluckyPuffin”,稳定版预估将于2025年...

不同平台CRT的区别?什么是UCRT?如何看libc源代码?

若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好!CRT运行时库C标准规定例如输入输出函数、字符串函数、内存操作等接口,一般采用C运行时库实现。微软的CRT微软有两套CRT,早期的MS...

信创力量,中兴绽放——中兴新支点桌面操作系统安装与使用全攻略

原文链接:「链接」Hello,大家好啊,今天给大家带来一篇中兴新支点桌面操作系统安装使用的文章,欢迎大家分享点赞,点个在看和关注吧!中兴新支点桌面操作系统是一款基于Linux内核、面向政企和信创环...

Linux下安装常用软件都有哪些?做了一个汇总列表,你看还缺啥?

1.安装列表MySQL5.7.11Java1.8ApacheMaven3.6+tomcat8.5gitRedisNginxpythondocker2.安装mysql1.拷贝mysql安装文件到...

一篇文章解决Linux系统安全问题排查,另配实操环境

实操地址:https://www.skillup.host/1/linux/safe/command.md#Linux安全检查排查指南##1.系统账户安全检查###1.1检查异常账户``...

程序员必备的学习笔记《TCP/IP详解(一)》

为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样...

《Linux常用命令》(linux的常用命令总结)

一、文件与目录操作1.目录导航pwd:显示当前工作目录路径示例:pwd关键词:当前路径、工作目录cd:切换目录示例:cd/home/user#切换到绝对路径cd..#...

Kubernetes 教程之跟着官方文档从零搭建 K8S

前言本文将带领读者一起,参照者Kubernetes官方文档,对其安装部署进行讲解.Kubernetes更新迭代很快,书上、网上等教程可能并不能适用于新版本,但官方文档能.阅读这篇文章你...

电脑网卡坏了怎么修复(电脑网卡坏了怎么修复win7系统)

当电脑网卡出现故障时,无论是有线网络还是无线网络,都可能无法正常连接。下面从软件、硬件等方面,分步骤为你介绍排查与修复的解决方案。一、初步排查:锁定问题源头检查网络环境将手机、平板等其他设备连接至同一...

如何查询电脑/手机的物理地址(如何找手机的物理地址)

一、要查询电脑的物理地址(也称为MAC地址),可以按照以下步骤进行操作:1.打开命令提示符(Windows)或终端(Mac):-在Windows上,点击“开始”按钮,搜索“命令提示符”,然后点击打...

IPv4 无网络访问权限全流程解决方案

当设备出现IPv4无网络访问权限问题时,多由网络配置错误、连接故障或服务异常导致。以下提供系统化的排查步骤与解决方案,帮助用户快速定位并修复问题。一、基础故障快速检查1.物理连接确认有线网络:检...

Python教程(十九):文件操作(python操作文件夹)

昨天,我们学习了列表推导式,掌握了Python中最优雅的数据处理方式。今天,我们将学习文件操作—Python中读写文件的基础技能。文件操作是编程中的核心技能,无论是读取配置文件、保存用户数据,还是...

取消回复欢迎 发表评论: