dnsmasq dns 域名服务器优先级参数 - 严格顺序

dnsmasq dns 域名服务器优先级参数 - 严格顺序

我有一个指定两个 DNS 名称服务器的设置。一个是本地的,另一个是外部的。当地的一个是皮孔,它本身在url过滤后向外转发请求。外部设置以防万一皮孔设备软件或硬件出现故障。

皮孔响应时间约为20ms,外部响应时间约为2ms。虽然皮孔被列为外部之前的名称服务器,域名解析默认情况下将测试计时响应并使用更快的那个。

域名解析但是,确实提供了一个参数strict-order,该参数应该按照列出的严格顺序使用名称服务器,因此在这种情况下,应该仅在以下情况下使用外部名称服务器:皮孔“失败”。

在实践中,使用该参数strict-order并不会像希望的那样工作,并且外部名称服务器仍然获胜。这dnsmasq 手册页没有详细说明“失败”的定义。

我正在寻找可能解决此问题的其他参数设置。

作为最后的手段,我会使用外部程序来检测皮孔工作顺序,并操纵域名解析相应的名称服务器设置。但这不是首选解决方案。

答案1

我也想实现这个目标。我有一个运行 dnsmasq 的路由器和一个 PiHole。 Raspberry Pi SD 卡很容易出现故障,因此当 DNS 出现故障时,对于我家中除系统管理员之外的每个人来说,互联网实际上都会出现故障。恐怕那些担心关键任务情况的评论是只见树木不见森林。

我发现该strict-order设置确实有效,但文档对于它们的事实含糊其辞需要以相反的顺序指定在你的配置中。违反直觉,我希望文档能够阐明这一点。

no-resolv
strict-order # NOTE: List servers in reverse order below (bottom is highest priority)
server=45.90.30.131 # NextDNS 2
server=45.90.28.131 # NextDNS 1
server=192.168.1.2 # PiHole

我在家进行了测试,192.168.1.2 正在接收我的所有 DNS 请求。我停止了 PiHole 服务器以验证请求是否会转发到我指定的其他服务器。虽然它确实有效,但解析速度非常慢,因为路由器会按每个请求的顺序尝试服务器。我试图找出如何减少 dnsmasq 的超时,但是显然这不存在作为设置。 dnsmasq 的创建者 Simon Kelley 说:

dnsmasq 的上游超时始终与客户端的超时相同,因此唯一的方法是减少客户端的超时。

但是,如果您可以安排发送到 10.2.1.2 的数据包在未启动时返回“没有到主机的路由”错误,那么事情会失败得更快。这可能可以通过 arp 表或路由表操作来实现,我没有查看详细信息。

我尝试关闭 PiHole 而不是仅仅停止 DNS 服务器来查看请求是否会更快失败,但没有看到任何变化。我认为没有自动化的方法来处理这个问题,但是如果有人可以加入一些路由器配置来加速这个过程,那就太好了。

答案2

从代码来看,dnsmasq 将尝试使用一台服务器发送所有请求,直到查询超时,并使用第二台服务器作为后备。一台服务器的使用时间有一个上限。定义在config.h.

#define FORWARD_TEST 1000 /* try all servers every 1000 queries */
#define FORWARD_TIME 600 /* or 10 minutes */

取自Pihole-FTL Github 存储库(dnsmasq 的一个分支,具有 AD 阻止功能)。

在存储库中搜索OPT_ORDER实施细节。

相关内容