設問と背景
この一般的な技術的質問では、DNSプロトコルのセマンティクス、キャッシング、およびインシデント診断がテストされます。優れた回答では、「名前が存在しない」、「名前は存在するが要求されたタイプがない」、「名前解決に失敗した」を区別し、権威データを修正しても再帰リゾルバーから古いネガティブ応答が即座に消去されない理由を説明します。
面接官が評価するポイント
- すべての空の応答を「DNSの欠落」と呼ぶのではなく、NXDOMAINとNODATAを区別できるか。
- SOAデータがどのようにネガティブキャッシュの期間を提供し、障害のキャッシングがどのように制限されるかを説明できるか。
- スタブ、再帰リゾルバー、権威サーバーのパスを、証拠と残存TTLを用いてトレースできるか。
- 盲目的なキャッシュフラッシュやリトライストームを発生させずに、レコード作成、ロールバック、および監視手順を設計できるか。
確認すべき明確化のための質問
照会された名前、レコードタイプ、タイムスタンプ、応答コード、権威ゾーンの公開状態、DNSSEC検証、すべてのリゾルバーが影響を受けているのか単一のネットワークのみなのか、そしてローカル、サービスメッシュ、またはアプリケーションのDNSキャッシュが関与しているかを確認します。
30秒の回答フレームワーク
まず権威サーバーに問い合わせ、次に複数の再帰リゾルバーに問い合わせながら、NXDOMAIN、NODATA、またはSERVFAIL、AuthorityセクションのSOA、およびTTLを記録します。NXDOMAINは名前が存在しないことを示し、NODATAは要求されたタイプなしで存在することを示します。どちらもSOAパラメータを使用してネガティブキャッシュされます。権威側が正しいのに再帰側が依然として古い応答を返す場合は、ネガティブTTLを待つか、制御されたリゾルバー無効化を使用します。1つのクライアントをリフレッシュしても上流のキャッシュをクリアすることはできません。
ステップごとの詳細な回答
1. ネガティブな結果を区別する
NXDOMAINは、権威チェーンが「照会された名前が存在しない」と応答していることを意味します。NODATAは通常、空のAnswerセクションを持つ成功応答であり、名前は存在するものの要求されたRRタイプが存在しないことを意味します。SERVFAILは、例えば権威サーバーに到達できない、またはDNSSEC検証に失敗したなどの理由で名前解決プロセスが失敗したことを意味し、名前が存在しないことの証明ではありません。
2. ネガティブ有効期間の出所を説明する
RFC 2308により、NXDOMAINおよびNODATAの応答にはSOAを含めることが認められています。再帰リゾルバーはネガティブTTL(現在の実装では一般的にSOA MINIMUMとSOA TTLの小さい方で制限されます)を使用して、応答を保持する期間を決定します。オペレーターはその値を、レコードの作成や削除における伝播ウィンドウとして扱う必要があります。RFC 9520では、一時的な停止によって復旧が永久に妨げられないよう、名前解決の失敗に対する有界なネガティブキャッシングも要求されています。
3. 再現可能な診断を構築する
dig @authoritative-server api.example.com A +norecurse を実行して権威応答、SOA、およびシリアルを検証し、次に同じクエリを複数の再帰リゾルバーに対して実行します。status、Authorityセクション、SOA TTL、およびタイムスタンプを記録します。権威側がポジティブで再帰側がNXDOMAINの場合はネガティブキャッシュまたは委譲パスを示唆します。権威側でのNXDOMAINはゾーンの公開や命名の問題を示唆します。SERVFAILは到達可能性、委譲、またはDNSSECを示唆します。
4. キャッシュ増幅とリトライストームを防止する
アプリケーションはネガティブ応答に対してビジーループ(ビジーウェイト)を行うべきではありません。サービスディスカバリには有界なバックオフを使用し、キャッシュの経過時間と共に応答コードをログに記録します。本番トラフィックが到着する前に新しい名前を公開し、最初のクエリによって多くの再帰キャッシュにNXDOMAINがシードされないようにします。変更後は、リゾルバーおよびリージョンごとのネガティブ応答率を監視し、期限切れ前のキャッシュと継続的な権威側の障害を区別します。
5. 復旧とロールバックを計画する
すべてのパブリック再帰リゾルバーに対して、ネガティブエントリを即座に削除するよう強制することはできません。ネガティブTTLを待ち、制御可能なリゾルバーをクリアし、権威またはDNSSECを修復し、そのウィンドウ期間中は古いエンドポイントまたは代替ディスカバリパスを維持します。権威、再帰、およびリクエストの実際の動作を継続的に検証し、NXDOMAINおよびSERVFAILの割合がベースラインに戻った後にのみフォールバックを削除します。
質の高い模範解答
私はまずNXDOMAIN、NODATA、およびSERVFAILを区別します。NXDOMAINは名前が存在しないこと、NODATAは要求されたタイプなしで名前が存在すること、SERVFAILは名前解決チェーンが失敗したことを意味します。ゾーンとシリアルについて権威サーバーに問い合わせ、次に複数の再帰リゾルバー、それらの応答コード、AuthorityセクションのSOA、および残存TTLを比較します。ネガティブ応答はSOAのネガティブTTLに従ってキャッシュされたままになる可能性があるため、新しく作成されたレコードが依然としてNXDOMAINのように見えることがあります。また、リゾルバーが有界な障害結果を保持している可能性もあります。アプリケーションのリトライストームを回避し、切り替え前に名前を公開し、計画されたネガティブTTLウィンドウを使用し、フォールバックエンドポイントを保持しながら複数のリージョンと実際のトラフィックを監視します。
よくある間違い
- NXDOMAIN、NODATA、SERVFAILを同一の空の結果として扱うこと。
- 再帰リゾルバーの状態を無視してノートパソコンのキャッシュのみをクリアすること。
- SOAを編集すれば、すでに保存されているネガティブエントリが即座に短縮されると思い込むこと。
- 権威サービスが壊れたままの状態で継続的にリトライを行うこと。
- Aレコードのみを確認し、AAAA、委譲、DNSSEC、またはスペルミスを忘れること。
フォローアップ質問と回答
なぜ新しいAレコードが依然としてNXDOMAINを返すのですか?
権威サーバーがゾーンをロードしており、委譲が正しいことを確認してください。権威サーバーがAを返す場合、再帰側のNXDOMAINは通常、以前のネガティブエントリです。そのSOAネガティブTTLが期限切れになるのを待ちます。
NODATAによって後から追加されたAAAAレコードが遅延することはありますか?
はい。リゾルバーは名前がAAAAなしで存在するという情報をキャッシュする場合があるため、そのタイプ固有のネガティブTTLが期限切れになるまで、クライアントは空の応答を受け取り続ける可能性があります。
SERVFAILもキャッシュされますか?
はい、近年の標準仕様では、実装ごとの制限付きで、名前解決の失敗に対する有界なキャッシングが求められています。権威またはDNSSECを修復した後、その障害ウィンドウが解消される間、複数のリゾルバーで検証を行ってください。
ランダムなサブドメインでネガティブキャッシュをバイパスできますか?
一般的な解決策にはなりません。ランダムな名前は権威へのクエリとキャッシュの負荷を増大させ、委譲、ゾーン、またはDNSSECのエラーを修復するわけではありません。権威側の事実を修正し、既存のエントリが期限切れになるのを待つべきです。