在一个上游 dnsmasq (D1) 中我有:
log-queries
dns-loop-detect
server=/mydomain.net/192.168.200.1
在另一个 dnsmasq (D2) 中我有:
log-queries
dns-loop-detect
domain=mydomain.net
...
当我dig test.mydomain.net A
这样做时,它工作正常。但是,如果我这样做dig test.mydomain.net AAAA
,B 会将请求转发回 D1,因为我没有设置 ipv6。然后循环发生,请求在 D1 和 D2 之间来回跳转。我以为 dns-loop-detect 会阻止这个循环,但事实并非如此。我知道我可以在 D2 中输入 local=/mydomain.net/ 来阻止这种情况。但是 dns-loop-detect 的目的是什么呢?它应该检测并停止哪种循环?
答案1
该环路检测算法只是向所有上游发送一个简单的探测不是仅限于特定域(包括 rDNS)。如果收到该探测,则该探测中提到的服务器 ID 将被标记为循环(即在检查可用上游时被跳过)。
最明显的循环是当某些与 resolvconf 相关的自动化程序向 dnsmasq 提供所有已知的 dns 服务器时(包括作为本地缓存解析器角色的 dnsmasq 本身),它能够停止。
仅将探测发送到对任何域有效的上游的原因仅仅是探测是针对名称的查询test
- dnsmasq 不会将此类查询发送到未明确配置为处理任意名称的上游。