
上流の 1 つの 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
IPv6 を設定していないため、B はリクエストを D1 に転送します。その後、ループが発生し、リクエストが D1 と D2 間でバウンスします。dns-loop-detect がこのループを防ぐと思いましたが、そうではありません。これを防ぐために、D2 に local=/mydomain.net/ を配置できることは知っていました。しかし、dns-loop-detect の目的は何でしょうか。どのようなループを検出して停止するのでしょうか。
答え1
ループ検出アルゴリズムは、すべての上流に単純なプローブを送信するだけですない特定のドメイン (rDNS を含む) に制限されます。そのプローブが返された場合、そのプローブに記載されているサーバー ID はループとしてマークされます (つまり、使用可能なアップストリームをチェックするときにスキップされます)。
最も明白なループが意図されており、停止できるのは、resolvconf 関連の自動化によって、ローカル キャッシュ リゾルバとしての役割を果たす dnsmasq 自体を含む、すべての既知の DNS サーバーが dnsmasq に送信されるときです。
任意のドメインに有効なアップストリームにのみプローブを送信する理由は、プローブが名前のクエリであるためですtest
。dnsmasq は、任意の名前を処理するように明示的に構成されていないアップストリームにはそのようなクエリを送信しません。