夜雨聆风学习资料网

ARTICLE · 1267456

一个不小心,差点给AI工具给糊弄了——SmartDNS 无法测速问题的排查

一个不小心,差点给AI工具给糊弄了——SmartDNS 无法测速问题的排查

现象

今天早上在看自己家里网络状态的时候,发现自己搭建的 SmartDNS 服务器,在向上级DNS发送请求的时候,并没有对返回的IP地址进行测速。

检查过程

检查了很多个地方,包括路由器是否有阻断、SmartDNS 所在的 Ubuntu Server 服务器系统的防火墙是否有阻断,以及和 SmartDNS 的版本是否有关系(回滚到旧版本),最后的检查结果是和它们都没有关系。当然,也粗略地看了一下 SmartDNS 的配置信息,不过当时还没看出来是哪里的问题。随后把 SmartDNS 的日志级别从 info 调整到 debug,想从日志中查看有没有一些有助于问题排查的记录。不过,日志里面对域名的解析情况记录,其rtt的值都是-0.1ms,这表示缓存或直接上游返回的占位 RTT,不是真实测速结果,且没有其它更多的测速记录,实际就是说明了这些域名并没有进行测速,日志内容参考下面:

[07:03:28] result: www.126.com, qtype: 1, rtt: -0.1 ms, 111.124.203.38[07:04:44] result: mail.qq.com, qtype: 1, rtt: -0.1 ms, 183.47.114.18

既然路由器、操作系统防火墙、SmartDNS 的版本问题都已经排除了,那大致就可以确定是配置的问题了。为了进一步确认是否跟配置文件内的配置有关系,笔者在备份好已有的配置文件的情况下,重新写了一个全新的配置文件,内容只包括绑定的端口、上游DNS服务器、测速模式和响应模式,其中测速模式配置如下:

speed-check-mode ping,tcp:80,tcp:443

而响应模式设置如下:

response-mode fastest-ip

响应模式设置为“fastest-ip”的主要目的还是在于尽量地让 SmartDNS 对上游DNS返回的IP地址都进行测速。

除了上述的设置以及维持日志级别为debug之外,其它的设置都保持 SmartDNS 的默认设置(不做配置)。

基本配置写好之后,重载 SmartDNS 服务,在 Ubuntu Server 中执行了以下的命令:

dig @127.0.0.1 www.cntse.com

然后查看了以下 SmartDNS 日志,终于发现了 SmartDNS 日志中有测试记录了,日志中相关的记录如下:

[07:22:29] result: www.cntse.com, rtt: 7.2 ms, 114.237.67.63

这次 rtt 的值不再是-0.1 ms了,而是真实的延迟时间 7.2 ms,表示对这个域名成功进行了测速。

问题原因和解决方法

这就说明了之前测速不生效是因为配置文件内的配置问题了。可问题到底在哪里呢?难道是缓存问题?不,笔者把之前的配置文件还原过去,然后把 SmartDNS 缓存关闭,重载 SmartDNS 服务,随后进行测试,测试结果依旧是没有进行测速,说明跟缓存没有关系。哪问题到底在哪?想起昨天修改过 SmartDNS 的配置,主要是使用了一个分配置文件,让某公司相关的域名由指定的上游DNS服务器进行解析,并且设定了和全局不太一样的测速模式。不过,笔者已经有一段时间没有关注过 SmartDNS 服务器的测速工作状态了,因此不清楚修改前和修改后的情况有没有变化。既然调整过测速设置,笔者就打开了那个分配置文件查看了一下设置情况,果然还真的发现了问题。配置文件中,对指定域名的设置是“speed-check-mode /www.cntse.com/ tcp:443”,但实际上这种写法是不对的,根据 SmartDNS 官方的说明,“speed-check-mode”后面只能是全局性的测速模式(比如上面提到的“speed-check-mode ping,tcp:80,tcp:443”),不能指定具体的域名。如果要让指定的域名单独使用全局设定以外的测速模式,则需要使用“domain-rules /域名/ -speed-check-mode 测速模式顺序”,如:

domain-rules /www.cntse.com/ -speed-check-mode tcp:443,ping,tcp:80

笔者重新把相关的配置重新成正确的格式,保存后重载 SmartDNS 服务,重启后再执行一次域名解析请求,这下终于可以正常地进行测速了。

不过,到底为什么会让笔者犯这个错误呢?主要的原因还是昨天使用指定上游DNS服务器进行解析的域名有点多,笔者为了省事(懒得自己输入那么多文字),简单地让 SmartDNS 帮我生成一堆配置,而没有告诉它配置方法的语法格式,生成之后又没有仔细地进行检查,就导致了这种问题的发生。有趣的是,SmartDNS 本身又没有提示语法错误,没有任何的报错提示(包括日志里面也没有体现出来),导致笔者花了一些时间去排查问题。不过好在,问题的原因最后还是查了出来并且得到了解决。

本文出处:IT人的工作生活网站 CNTSE (笔者的博客),点击“阅读原文”可查看文章出处。

-----------------

更多内容可以点击下方搜索栏进行搜索:

----------------

----------------

相关学习资料