笔者家里部署了一个DNS服务器,操作系统是 Ubuntu Server,DNS软件采用了 SmartDNS的非静态编译版本(1.2025.v47.1.28)。SmartDNS的非静态编译版本更新速度很快,最多时候可能一天都会有几个版本的发布,而这么快发布的其中一个原因便是发现一些Bug,需要紧急修复,因此,不太推荐生产环境下使用非静态编译版本。不过笔者是在家里使用,就算出现一些不稳定的情况,也不至于影响到自己的收入,而且基本上很快就能得到解决。
不过,前晚遇到一个情况,就是想测试一下一些域名的解析情况,但是在Windows下执行nslookup的时候,DNS服务器总会出现请求超时的提示,随后才能把解析结果显示出来。如果只有一个域名出现这种情况,那还可以看作偶发事件,问题是连续测试了好几个域名,也是同样的情况,具体见下图:

这种情况明显就是DNS服务器的问题了。笔者随后把客户端电脑的DNS服务器指向另一台内网DNS服务器(Rocky Linux+bind),没有出现请求超时的情况,说明问题就在SmartDNS本身。但笔者调整了SmartDNS的一些设置,包括更换上游DNS服务器,但所有的设置调整,都是于事无补。
问题到底出现在哪里呢?笔者在使用较早版本的SmartDNS,且使用正常配置的时候,从未出现过这种问题,想到笔者使用的是更新速度相当快的非静态编译版本,偶尔会出现一些影响使用的bug,会不会是笔者所使用的这个版本存在bug导致出现请求超时的情况呢?为了验证这个想法,笔者下载了1.2025.v47.1.29这个版本,这个版本SmartDNS的作者并未主动提到进行了哪些修改,只是简单的说了一下“同步更新上游代码”,就好像新版微信发布时说“修复一些已知问题”一样。下载后,笔者对SmartDNS进行了更新并重新启动了服务,完成操作后在客户端进行测试,遗憾的是,请求超时的问题依旧出现了,哪怕是笔者回滚到前几个版本,甚至是稳定版,这个问题还是会继续出现。
难道要改用bind么?但笔者不太想网内部署有两个bind,为了进一步确认问题所在,笔者干脆把SmartDNS的配置文件里面的各行配置几乎全部注释,只保留一行端口配置,然后再重新启动SmartDNS服务。这个操作过后,再执行nslookup,请求超时的问题就没再出现了,说明问题的原因,可能就是跟配置有关系!随后把已注释的配置逐个解除注释,解除一个后重启服务再用nslookup测试,最后发现“mdns-lookup”设置为“yes”的时候(即配置文件内对应配置项为“mdns-lookup yes”),请求超时的问题就会出现。最后,笔者把几乎所有的配置项都恢复原来的设置,只把“mdns-lookup yes”注释掉(或者删除),保存配置文件后重启SmartDNS服务,请求超时的问题就不再出现了。
