web-dev-qa-db-ja.com

DNSネームサーバーはどのようにフォールバックしますか?

NSレコードに2つのDNSサーバーがリストされています。昨夜、DNSサーバーの1つがダウンしました。予想通り、一部のDNSサーバーがホスト名を解決していませんでした。これは一時的なものであり、 TTL of NSレコードが期限切れになると(1時間)になると、作業を開始します。

1時間以上後も、Earthlink、Verizon、OpenDNSサーバーを使用していたデスクトップからDNSタイムアウトが発生していました。他のDNSサーバーが応答しているかどうかをテストしました。

Dig @ns2.example.com www.example.com +short

これはうまくいきました。

私の質問:

  1. TTLの有効期限が切れた後でも、他のDNSサーバーが他のDNSサーバーにアクセスしなかった理由についての答えはありますか?
  2. DNSサーバーはドメインのメインDNSサーバーを優先しますか(SOAレコードから)?
  3. 利用可能なNS=レコードからネームサーバーを選択するために使用されるアルゴリズムはありますか?これは実装固有であると想定していますが、おそらくここに適用されるいくつかの標準があります。
15

これは不幸な苛立ちです。複数のDNSサーバーは信頼性を向上させることになっていますが、実際にはそれはしばしば逆の効果をもたらします。

問題は、クライアントが応答を待つのはそれほど長くなく、サーバーは同じ時間だけ待つことです。 AとBの2つのDNSサーバーがあるとします。Aは機能していて、Bは失敗したとします。これは起こります:

  1. クライアントはネームサーバーZに接続し、情報を要求します。 ZはBを選択し、クエリを送信します。

  2. ネームサーバーZが応答しなかったため、クライアントがタイムアウトしました。

  3. クライアントはネームサーバーYを試行します。YはBを選択し、クエリを送信します。

  4. ネームサーバーZはタイムアウトし、Aを試行します。正しい答えが得られますが、クライアントはこれ以上待機していません。

  5. ネームサーバーYが応答しなかったため、クライアントがタイムアウトしました。

  6. クライアントはあきらめ、両方のネームサーバーが応答しなくなります。

  7. ネームサーバーYはタイムアウトしてAを試行します。正しい答えが得られますが、クライアントはこれ以上待機していません。

そして、良い解決策はありません。ネームサーバーが応答するかどうかを確認するために待機する時間が長いほど、待機しているネームサーバー自体が待機する時間が長くなるため、待機する時間が長くなります。間違いなく、問題はYとZが十分に速くBをあきらめなかったことでした。

基本的に、ネームサーバーのいずれかが停止した場合、一部のクライアントは、悪運のみを試みたため、まったくの不運によりタイムアウトになります。

明るい面では、2つのネームサーバーがあり、1つが失敗した場合、ネームサーバーの約75%が0%ではなく回答を取得します。

18
David Schwartz