m1._domainkey.amazon.comのTXTレコードのクエリを送信したとします。
nslookup -q=txt m1._domainkey.amazon.com
amazon.comの権威ネームサーバーは
amazon.com nameserver = ns1.amzndns.com.
amazon.com nameserver = ns1.amzndns.org.
amazon.com nameserver = ns1.amzndns.net.
この TXT レコードが、リゾルバが照会する最初の権威ネームサーバー ns1.amzndns.com には存在せず、別の ns1.amzndns.org には存在する場合はどうなりますか? リゾルバが回答を得るまでネームサーバーへの照会を続けるのは一般的なことですか?
実際には、すべてのネームサーバー上に存在しないにもかかわらず、TXT レコードを取得できることがわかりました。
回答には資料/参考資料を含めてくださいこれを独学で勉強できるようになります。
読んでくれてありがとう。
答え1
の権威あるネームサーバープロトコルフラグを設定する。「権威ある回答」(AA)応答にビットが含まれていて、リゾルバはその応答を真実として受け取ります。
応答が肯定的である場合、応答には要求されたリソース レコードが含まれます。
権威ネーム サーバーにそのリソース レコードがない場合、応答は NXDOMAIN メッセージになります。
権威ネーム サーバーが一貫していない場合、クライアントが受け取る応答は、どの権威ネーム サーバーにクエリが送信されたかによって異なります。そして、その応答が真実であるとみなされます。
リゾルバが回答を得るまでネームサーバーにクエリを続けるのは一般的なことですか?
はい、ただし最初のネーム サーバーがまったく応答しない場合のみです。
何らかの(肯定的または否定的な)応答を受信すると、リゾルバは他のネーム サーバーにクエリを実行する必要がなくなります。
(あなたのリゾルバーは、片方の親が一つの答えを出した時に、もっと気に入る別の答えが返ってくることを期待してもう一方の親のところに行くような、6 歳児のような行動をするわけではありません。)
答え2
リゾルバの動作は実装に依存します。
たとえば、Microsoft Windows 10 は、すべてのネーム サーバーを並行してクエリします。クライアントは、否定応答であっても、最初に応答したサーバーを使用します。
クライアントがネーム サーバーを順番に照会する場合、応答が受信されない場合はタイムアウトになり、次の設定済みネーム サーバーに進みます。応答が受信されると、否定応答であっても照会は終了します。
発生しないのは、クライアントがすべてのネーム サーバーの応答を待機しないことです。クライアントは複数の応答を使用せず、最初の応答のみを使用します。
Amazon に 100 台のネーム サーバーがあり、そのうち 1 台だけにリソース レコードがある場合、クライアントが他の 99 台のネーム サーバーの 1 つにクエリを実行すると、リソース レコードに対する否定応答が返されます。
https://superuser.com/questions/969171/multihomed-windows-10-dns-resolution-timeouts/970322#970322
in practice, I have seen that I will get the TXT record even though it is not on all nameservers.
記録について質問がある場合は、クライアントの詳細を含め、動作を再現する記録を自由に共有していただければ、再現いたします。
詳しくは:
Microsoft は、ネーム サーバーが誤って構成されているという多数のインシデントが発生したため、A/AAAA レコードの並列名前解決を導入しました。これにより、プライマリが使用できないためにプライマリ以外のネーム サーバーが照会されたときに、通常、大きな問題が発生しました。反復解決プロセスにはタイムアウトがあり、各レベルには異なるタイムアウトと累積タイムアウトがある場合があります。複数のネットワーク アダプターからの結果を使用するためのルールもあります。これにより、一部の組織では、高可用性を目的として 4 つまたは 5 つのネーム サーバーを構成していました。残念ながら、プロセスは 3 番目のサーバーの後でタイムアウトしたため、DNS 戦略は無効になり、障害復旧戦略は無効になり、それ自体で他の問題が発生しました。
nslookup を使用する場合、リゾルバの動作をシミュレートし、特定のネーム サーバーに対して反復クエリを実行するには、-norecurse
スイッチを使用します。