はじめに:DNSを切り替えたはずなのに、なぜか旧サーバーにアクセスされる?
LAN内サーバーの移行やIPアドレス変更を行った際、インフラエンジニアが最も頻繁に遭遇するトラブルが 「DNSキャッシュの亡霊」 です。
- 「DNSレコードのAレコードを新IPに書き換えた」
- 「TTLも5分(300秒)に短縮しておいた」
- 「5分経過したから大丈夫だろうと旧サーバーを停止した」
その瞬間、LAN内チャットに悲鳴が響き渡ります。
「〇〇システムに繋がりません!」「画面がエラーになりました!」
調査してみると、一部の端末がいまだに旧IPアドレスに接続を試みています。
「DNSのTTLが切れているのになぜ?」と頭を抱えますが、実は現代のOS環境には 「何重もの隠れDNSキャッシュ」 が存在しているためです。
本記事では、LinuxとWindowsに潜む多重DNSキャッシュの仕組みと、切り替え時に一撃でキャッシュを全消去(Flush)するトラブルシュート手法を解説します。
1. Windows環境:DNSキャッシュクリアの決定版
Windowsの場合、コマンドプロンプトの ipconfig /flushdns だけでは不十分なケースがあります。
特にブラウザ(ChromeやEdge)はOSのキャッシュとは別に 「独自のブラウザ内DNSキャッシュ」 を持っています。
② ブラウザ内DNSキャッシュのクリア
- Chrome / Edge: アドレスバーに
chrome://net-internals/#dnsと入力し、「Clear host cache」 をクリック。 - これを行わないと、ブラウザを開いたままのユーザーはいつまでも旧IPにアクセスし続けます。
2. Linux環境:ディストリビューション別のキャッシュクリア
現代のUbuntuなどのLinuxでは、systemd-resolved がローカルでDNSキャッシュを保持しています。
① systemd-resolved のキャッシュクリアと統計確認
# (要点抜粋)
# (Source: https://github.com/ojisantech/)
# キャッシュのフラッシュ
sudo resolvectl flush-caches
# キャッシュ統計の確認 (Current Cache Size が 0 になったか検証)
resolvectl statistics
② 旧来の nscd や bind9 が動いている場合
# (要点抜粋)
# (Source: https://github.com/ojisantech/)
# nscd のホストキャッシュを無効化
sudo nscd -i hosts
# またはサービス再起動
sudo systemctl restart systemd-resolved
3. 切り替え作業前に仕込むべき「TTL短縮スクリプト」
トラブルの根本原因は、「切り替え当日にTTLを短くしても手遅れ」という点にあります。
必ず 切り替え作業の48時間前 に、TTLを300秒(5分)以下に下げておく必要があります。
💻 コア実装・設定スニペット(抜粋)
# (要点抜粋)
# DNSクライアントキャッシュの消去
Clear-DnsClientCache
# NetBIOS 名解決キャッシュの消去
nbtstat -R
まとめ:DNS切り替えは「キャッシュ階層」を意識せよ
DNSのトラブルは、ネットワーク機器ではなく「クライアント端末の中」で起きていることがほとんどです。
- OSのDNSキャッシュだけでなく、ブラウザ独自のキャッシュを忘れない
- Linuxは
resolvectl flush-cachesを使う - 作業の数日前からTTLを意図的に落としておく
この3原則をチェックリストに入れておくだけで、月曜の朝に全LAN内から問い合わせが殺到する恐怖のDNSトラブルを100%回避できます!
📚 さらに詳しいアーキテクチャ設計・パラメータ表・トラブルシューティング
最後までお読みいただきありがとうございます!
本記事が少しでも「役に立った」「あとで試したい」と感じていただけましたら、ぜひQiitaの 「いいね(♡)」 と 「ストック」、および アカウントのフォロー をいただけると今後の検証・執筆の大きな励みになります!
また、本記事のさらに踏み込んだ 「深層アーキテクチャ解説」「主要パラメータの技術的根拠」「現場アンチパターン・トラブルシューティング対応表」 は、以下のGitHub技術リファレンスにて公開しています。
👉 【第31弾 詳細技術リファレンス (QIITA_ARTICLE_DETAIL_31.md)】
⭐ 全14層・200パターンの自立型インフラ&オンプレAIリファレンス集(おじさんの武器庫)を順次公開中です。ぜひGitHubリポジトリへの Star (★) と X (@OjisanTechnical) のフォローもお願いいたします!
👉 GitHub リポジトリ: ojisantech/ojisan-arsenal
💡 【検証環境・個人研究(PoC)に関する注記】
本記事は、筆者個人の自宅検証環境(ホームラボ/仮想環境)において、公開情報およびOSS(オープンソースソフトウェア)を用いて独自に構築・検証した個人研究(PoC)の記録です。特定の企業・団体の実環境や業務上の非公開情報とは一切関係ありません。