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

Cra*_*cks 5 dns dnsmasq raspberry-pi

我有一个指定两个 DNS 名称服务器的设置。一个是本地的,另一个是外部的。本地的是pihole,它本身经过 url 过滤后将请求转发到外部。外部设置是为了防止pihole设备软件或硬件出现故障。

内部响应时间约为20 ms,外部响应时间约为2 ms 尽管pihole被列为外部名称服务器之前的名称服务器,但dnsmasq默认情况下会测试计时响应并使用更快的名称服务器。

然而, dnsmasq确实提供了一个参数strict-order,该参数应按照严格的列出顺序使用名称服务器,因此在这种情况下,仅当 pihole 失败”时才应使用外部名称服务器。

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

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

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

小智 6

我也想实现这个目标。我有一个运行 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


小智 1

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

#define FORWARD_TEST 1000 /* try all servers every 1000 queries */
#define FORWARD_TIME 600 /* or 10 minutes */
Run Code Online (Sandbox Code Playgroud)

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

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