ネガティブキャッシュとは?存在しない結果もキャッシュするDNSの仕組み

システム開発・テクノロジー
ネガティブキャッシュとは?ざっくりと3行で
  • DNSの問い合わせで「そのドメインは存在しない(NXDOMAIN)」という否定的な応答をキャッシュして、同じ問い合わせを一定時間繰り返さない仕組みのこと
  • ネガティブキャッシュがあることでDNSサーバーへの無駄な問い合わせが減りインターネット全体の負荷軽減に貢献するが、新しいドメインの伝播を遅らせる副作用がある
  • ネガティブキャッシュのTTL(有効期間)はSOAレコードのMINIMUM値で制御され、RFC 2308では最大3時間(10800秒)を推奨している

【深掘り】これだけ知ってればOK!

ネガティブキャッシュの必要性を理解しよう。存在しないドメインへの問い合わせ(タイプミスのURL・廃止されたドメインへのリクエストなど)は毎回権威DNSサーバーまで問い合わせる必要がある。ネガティブキャッシュがなければ全ての「存在しないドメイン」への問い合わせがDNSサーバーに届き続け、サーバー負荷が膨大になる。

ネガティブキャッシュが問題になる場面がある。新しいドメインを登録したとき:キャッシュが残っている間は「存在しない」という情報がキャッシュされているため、新しいレコードが伝播しても一定時間アクセスできないことがある。ドメイン移行後:古いIPアドレスのNXDOMAIN応答がキャッシュされ移行後のサーバーに届かないことがある。

ネガティブキャッシュのTTLはSOAレコードのMINIMUM値で決まる。例えばSOAレコードのMINIMUMが3600(1時間)なら、NXDOMAINの応答は1時間キャッシュされる。インフラ変更が多い環境ではMINIMUM値を短くすることでネガティブキャッシュの影響を最小限にできる。

DNSのトラブルシューティングでネガティブキャッシュを疑う際は「ipconfig /flushdns」(Windows)または「sudo dscacheutil -flushcache」(Mac)でローカルDNSキャッシュをクリアすることで確認できる。LinuxではNSCD・systemd-resolvedのキャッシュクリアが必要になる。

Webエンジニアが意識すべき場面として、新しいサブドメインを追加した直後・DNSレコードを変更した直後・ドメイン移行直後がある。ネガティブキャッシュのTTLが残っている間は一部のユーザーで名前解決が失敗する可能性があるため、事前にSOAのMINIMUM値を低くしておくことがベストプラクティスだ。

よくある誤解

ネガティブキャッシュはキャッシュの一種に過ぎないと思っている

通常のキャッシュは「正しい応答を一時保存する」が、ネガティブキャッシュは「失敗した結果を一時保存する」点が異なる。これはDNSのパフォーマンス最適化に不可欠な仕組みで、RFC 2308として標準化された正式なプロトコルだ。

DNSキャッシュをクリアすればネガティブキャッシュも即座に解消されると思っている

ローカルのDNSキャッシュをクリアしても、上位のDNSリゾルバー(ISPのDNSサーバーなど)にキャッシュが残っていれば問題は解消しない。TTLが切れるまで待つか、自社管理のDNSサーバーであればキャッシュを強制クリアする必要がある。

会話での使われ方

ITKAGYO運営者デプロイ太郎のアイコン画像

新しいサブドメインを追加したのに30分経っても名前解決できないんですが。ネガティブキャッシュが残っている可能性があります。SOAのMINIMUM値を確認してください。

インフラエンジニアが新規サブドメイン追加後の名前解決の問題をトラブルシューティングしている場面。

ITKAGYO運営者デプロイ太郎のアイコン画像

ドメイン移行前にSOAレコードのMINIMUM値を300秒に下げておいてください。ネガティブキャッシュのTTLを短くして移行後の影響を最小化します。

シニアインフラエンジニアがドメイン移行作業の事前準備として担当者に指示している場面。

ITKAGYO運営者デプロイ太郎のアイコン画像

ipconfig /flushdnsで自分のPCのDNSキャッシュはクリアできましたが、会社のDNSサーバー側のネガティブキャッシュはTTLが切れるまで待つしかないですね。

システム担当者がDNS障害対応で自分でできる範囲の対処をしながら上位DNSの制限を説明している場面。

【まとめ】3つのポイント

  • 存在しない応答をキャッシュしてDNSサーバーの負荷を軽減する:NXDOMAINという否定的な応答もTTLの間キャッシュすることで無駄な問い合わせを減らし、インターネットインフラ全体の効率化に貢献する仕組みだ
  • SOAレコードのMINIMUM値でTTLを制御する:ネガティブキャッシュの有効期間はSOAのMINIMUM値で決まるため、ドメイン移行・新規サブドメイン追加の前には値を短くしておくことがインフラ変更時のベストプラクティスだ
  • flushdnsはローカルのみ・上位DNSのキャッシュはTTL待ち:ローカルDNSキャッシュのクリアは自分のPCのみに有効で、ISPや上位DNSリゾルバーのネガティブキャッシュはTTLが切れるまで残り続けることを理解しておく必要がある

よくある質問

Q
ネガティブキャッシュのTTLはどうやって確認しますか?
A

対象ドメインのSOAレコードを確認します。「dig SOA example.com」コマンドの出力の最後の数値がMINIMUM値(ネガティブキャッシュのTTL)です。Windowsでは「nslookup -type=SOA example.com」で確認できます。

Q
ネガティブキャッシュが原因で新しいドメインにアクセスできない場合の対処法は?
A

まず「ipconfig /flushdns」(Windows)や「sudo dscacheutil -flushcache」(Mac)でローカルキャッシュをクリアします。それでも解消しない場合はSOAのMINIMUM値のTTLが切れるまで待つか、別のDNSサーバー(8.8.8.8など)を一時的に使用します。

Q
RFC 2308とは何ですか?
A

DNSのネガティブキャッシュを標準化したRFC(インターネット標準仕様書)です。1998年に策定され、NXDOMAINレスポンスのキャッシュ方法・TTLの計算方法・最大TTLの推奨値(3時間)などを定めています。

Q
ネガティブキャッシュとポジティブキャッシュはどう違いますか?
A

ポジティブキャッシュは「このドメインのIPアドレスはXXX」という正常な応答をキャッシュします。ネガティブキャッシュは「このドメインは存在しない(NXDOMAIN)」という否定的な応答をキャッシュします。どちらもDNS問い合わせの効率化が目的です。

この用語と一緒に知っておきたい用語

用語 この記事との関連
キャッシュ キャッシュとの関係を知ると全体像がつかみやすくなります。一度読み込んだWebサイトやアプリのデータを端末に一時保存する仕組みのこと!
DNS DNSは関連分野でよく登場する重要キーワードです。インターネット上でIPアドレス(例:192.168.1.1)をドメイン名(例:itkagyo.com)に変換する住所変換システムだよ
ドメイン ドメインを押さえると本記事の理解がさらに深まります。Webサイトやメールに使われるインターネット上の住所のこと――URLの中にあるexample.comの部分がドメインだよ
サーバー サーバーを押さえると本記事の理解がさらに深まります。ネットワークを通じて情報やサービスを提供する側のコンピューターのこと。レストランで料理を運んでくれる給仕係(server)をイメージするとわかりやすいよ
レコード レコードを押さえると本記事の理解がさらに深まります。レコードの主要な特徴と用途を理解することで、関連する技術・制度・概念を正確に把握できるようになる

【出典】参考URL

https://www.rfc-editor.org/rfc/rfc2308 :RFC 2308 Negative Caching of DNS Queries
https://e-words.jp/w/%E3%83%8D%E3%82%AC%E3%83%86%E3%82%A3%E3%83%96%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5.html :IT用語辞典「ネガティブキャッシュ」
https://www.infraexpert.com/study/dnsz10.html :DNS SOAレコードとネガティブキャッシュの解説

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!