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

目次
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運用ではキャッシュを理解することが安定運用への第一歩と言えるでしょう。





