DNSキャッシュが残ってしまう原因と対処方法|TTLとキャッシュ削除の仕組みを理解する

DNSキャッシュが残る原因と対処

DNSキャッシュが残ってしまう原因と対処方法

DNSサーバの運用やWebサイトの移転作業を行っていると、「DNSを変更したのに反映されない」「自分だけ古いサーバへ接続される」といった現象に遭遇することがあります。

その原因の多くはDNSキャッシュです。

DNSはインターネット全体の負荷を軽減するためにキャッシュ機能を持っています。しかし、この仕組みがDNS変更時には思わぬトラブルの原因になることがあります。

本記事ではDNSキャッシュの仕組みやTTLとの関係、キャッシュが残ってしまう理由、実務での対処方法について解説します。

DNSキャッシュとは

DNSキャッシュとは、一度取得したDNS情報を一定期間保存する仕組みです。

例えば次の問い合わせを行ったとします。


www.example.com
↓
192.168.60.20

毎回DNSサーバへ問い合わせると負荷が増加します。

そのため取得した結果を一定期間保存し、再利用します。

キャッシュが存在する場所

DNSキャッシュは複数箇所に存在します。


ブラウザ
↓
OS
↓
キャッシュDNSサーバ
↓
ISP DNS

そのため一箇所だけ削除しても問題が解決しない場合があります。

TTLとは

TTL(Time To Live)はDNS情報の有効期限です。


www.example.com. 3600 IN A 192.168.60.20

この場合の3600がTTLです。

単位は秒です。

TTL3600の意味

TTLが3600の場合です。


3600秒
↓
60分
↓
1時間

DNSキャッシュは最大1時間利用される可能性があります。

DNS変更後に反映されない理由

例えばWebサーバを移行したとします。

変更前です。


www.example.com
↓
192.168.60.20

変更後です。


www.example.com
↓
192.168.60.50

しかし利用者は古いキャッシュを保持している可能性があります。

利用者ごとに結果が違う理由

DNS変更後によく発生する現象です。

  • Aさんは新サーバへ接続
  • Bさんは旧サーバへ接続

これはキャッシュ保持状況が異なるためです。

ブラウザキャッシュ

最近のブラウザはDNS情報を内部に保持します。

例えば次のブラウザがあります。

  • Google Chrome
  • Microsoft Edge
  • Firefox

DNS変更後でも古い情報を保持する場合があります。

OSキャッシュ

WindowsにもDNSキャッシュがあります。

確認します。


ipconfig /displaydns

保存中のDNS情報が表示されます。

Windowsのキャッシュ削除

削除する場合です。


ipconfig /flushdns

実務でも頻繁に利用します。

Linuxの場合

Linuxは環境によって異なります。

systemd-resolvedを利用している場合です。


resolvectl flush-caches

キャッシュを削除できます。

キャッシュDNSサーバの影響

社内DNSサーバやISPのDNSサーバもキャッシュを保持します。


Client
↓
Cache DNS
↓
Authoritative DNS

利用者が削除できない場合もあります。

BINDキャッシュ削除

BINDをキャッシュDNSとして利用している場合です。


# rndc flush

全キャッシュを削除できます。

特定レコードだけ削除する

特定ホストだけ削除できます。

# rndc flushname www.example.com

実務ではこちらの方が安全な場合があります。

TTLが長すぎる問題

例えば次の設定です。


$TTL 86400

86400秒は24時間です。

DNS変更が最大24時間反映されない可能性があります。

移行前にTTLを短くする

実務ではよく行われる方法です。

変更前です。


86400

移行数日前に変更します。


300

5分になります。

TTL変更時の注意点

TTLを変更しても即座には反映されません。

元のTTLが有効です。

そのため事前準備が重要です。

digでTTLを確認する

確認方法です。
$ dig www.example.com

結果例です。
www.example.com. 300 IN A 192.168.60.50

300が現在のTTLです。

権威DNSとキャッシュDNSを比較する

権威DNSへ問い合わせます。
$ dig @ns1.example.com www.example.com

キャッシュDNSへ問い合わせます。
$ dig @8.8.8.8 www.example.com

結果が異なる場合はキャッシュが原因です。

ブラウザだけ古い場合

シークレットモードで確認します。

またはブラウザ再起動を行います。

ブラウザ内部キャッシュが原因の場合があります。

メールサーバ移行時の注意

MXレコード変更時も同様です。


example.com MX

キャッシュが残るため、新旧メールサーバへ配送される場合があります。

CDN利用時の注意

CDNサービスでは独自キャッシュを持つ場合があります。

  • Cloudflare
  • Akamai
  • Fastly

DNSだけでなくCDN設定も確認が必要です。

実務でよくある勘違い

DNS変更したのに反映されない

多くの場合はキャッシュです。

digで新しいのにブラウザは古い

ブラウザキャッシュの可能性があります。

自分だけ接続できない

OSキャッシュの可能性があります。

一部ユーザーだけ古い

ISP DNSのキャッシュが残っている可能性があります。

DNS変更時の実務手順


TTL短縮
↓
数日待機
↓
DNS変更
↓
動作確認
↓
TTLを元へ戻す

この手順が一般的です。

実務で覚えておきたいポイント

  • DNSキャッシュは複数箇所に存在する
  • TTLが反映時間を決める
  • Windowsはipconfig /flushdnsで削除できる
  • BINDはrndc flushで削除できる
  • DNS移行前はTTLを短くする
  • 権威DNSとキャッシュDNSを比較する

まとめ

DNSキャッシュは名前解決を高速化するための重要な仕組みですが、DNS変更時にはトラブルの原因になることがあります。

特にブラウザ、OS、キャッシュDNSサーバなど複数箇所にキャッシュが存在するため、問題の切り分けには注意が必要です。

また、TTLの仕組みを理解し、DNS移行前に適切なTTL設計を行うことで多くのトラブルを防げます。

DNS運用ではキャッシュを理解することが安定運用への第一歩と言えるでしょう。