DNSキャッシュとは
DNSキャッシュは、DNS問い合わせで得たレコードや不存在の結果を有効期限まで保存し、同じ問い合わせへ再利用する仕組みです。英語ではDNS cache(ディーエヌエス・キャッシュ)と呼びます。
保存の中心は、同じ名前・種類・クラスに属するレコードの集合であるRRset(アールアールセット)です。たとえば一つの名前に複数のAレコードがあれば、ばらばらの無期限メモではなく、集合と残りTTLとして扱われます。
キャッシュは正式データの原本ではなく、権威側から得た結果を期限付きで再利用するコピーです。高速化と問い合わせ負荷の軽減に役立つ一方、変更直後に以前の結果が残る理由にもなります。

ヒット、ミス、否定キャッシュは三つの異なる状態
キャッシュヒット
必要なRRsetと有効な残りTTLがあり、権威側へ行かずに応答できます。
キャッシュミス
利用できる結果がないため、再帰DNSサーバーが上流へ問い合わせます。
否定キャッシュ
名前不存在や指定種類なしという結果を、SOA情報に基づく期限まで再利用します。
キャッシュは一か所だけにない
アプリ自身、OS、家庭用ルーターや社内の中継リゾルバー、再帰DNSサーバーが、それぞれ結果を保存する場合があります。ブラウザを閉じてもOS側に残る、OSのキャッシュを消しても再帰DNS側に残る、といった違いが生じます。
また、Web配信サービスやプロキシが保存するHTTPキャッシュは、DNSキャッシュとは別です。DNSキャッシュを削除してもWebページの古い画像が変わらない場合、ブラウザやHTTP側のキャッシュを調べる必要があります。
TTLは、保存した時点から減っていく
権威DNSサーバーが示したTTLを上限として、再帰DNSサーバーは経過時間を差し引いた値を返します。端末が受け取るのは、多くの場合、権威側で設定された元の値ではなく残り時間です。期限が切れたエントリーは通常の答えとして再利用できません。
障害時に期限切れの答えを一時利用するserve stale(サーブ・ステイル)の運用もありますが、これは実装や方針に基づく例外的な継続利用です。「TTLが切れても常に古い値を返す」標準動作と考えてはいけません。
変更前のTTLが、変更後の残り方を決める
権威側のアドレスを変更した瞬間、世界中のキャッシュが同時に更新されるわけではありません。変更前の値を取得済みのキャッシュは、その取得時のTTLが尽きるまで以前の値を返せます。変更作業に備えてTTLを短くするなら、古い長いTTLのキャッシュが消えるだけの時間を変更前に確保します。
「DNSの浸透待ち」という表現は便利ですが、データが全世界へ一斉配布される仕組みではありません。各キャッシュが必要に応じて問い合わせ、取得時刻ごとに期限を迎えるため、利用場所によって切り替わる時刻が違います。
キャッシュを信頼できる状態に保つ
偽の応答を正当な答えとして保存させる攻撃をcache poisoning(キャッシュ・ポイズニング)と呼びます。問い合わせIDや送信元ポートの推測を難しくする、問い合わせと応答の対応を厳密に確認する、不要な追加情報を受け入れないといった防御が使われます。
DNSSEC検証を行う再帰リゾルバーは、署名されたゾーンについて応答データと信頼の連鎖を確認できます。ただしDNSSECは通信内容を秘密にする仕組みではなく、すべてのゾーンが署名されているわけでもありません。
仕様の確認資料:RFC 1034「Domain Names — Concepts and Facilities」、RFC 2308「Negative Caching of DNS Queries」、RFC 9520「Negative Caching of DNS Resolution Failures」