2026年5月17日
2026年5月17日
DNSキャッシュをクリアする方法|Linux・Windows・macOS・ブラウザー別
DNS キャッシュのクリア(フラッシュ)は、DNS レコードを変更したのに、手元のパソコンやサーバーがまだ古い IP アドレスに接続してしまうときに行います。サーバーの引っ越しでドメインの A レコードを新しいサーバーに向けた直後などが典型です。
先に、DNS キャッシュを消しても解決しない場面を分けておきます。
- WordPress で記事やデザインを更新したのに表示が変わらない → DNS ではなく、ページキャッシュ(キャッシュ系プラグイン、サーバーのキャッシュ、CDN)やブラウザーのキャッシュの問題です。DNS キャッシュを消しても変わりません。
- 自分の端末では新しいサーバーが見えるのに、ほかの人には古いサーバーが見える → 相手が使っているプロバイダーやパブリック DNS のキャッシュが残っています。こちらから消すことはできず、レコードの TTL(キャッシュしてよい秒数)が切れるのを待ちます。
この記事のコマンドは、2026年11月時点の各 OS・ソフトの公式マニュアルで確認したものです。
まず DNS の答えがどう変わったかを確かめる
キャッシュを消す前に、権威 DNS サーバー(ドメインのレコードを管理しているサーバー)が新しい値を返しているかを確かめます。ここが古いままなら、キャッシュを消しても古い値が返ります。
# ドメインの権威 DNS サーバーを調べる
dig +short NS example.com
# 権威 DNS サーバーに直接問い合わせる(キャッシュを通らない)
dig +short A example.com @ns1.example-dns.jp
# いま使っているリゾルバーの答えと、残りの TTL(秒)を見る
dig example.com A +noall +answer
最後のコマンドの出力の2列目が残り TTL です。問い合わせるたびに減っていき、0 になるとリゾルバーは権威サーバーに問い合わせ直します。
Linux: どのキャッシュが動いているかを確かめる
Linux はディストリビューションや構成によって、DNS をキャッシュするソフトが違います。キャッシュが1つも動いていない構成も珍しくありません(その場合、OS 側で消すものはありません)。
# /etc/resolv.conf の参照先を見る
ls -l /etc/resolv.conf
grep nameserver /etc/resolv.conf
# キャッシュを持つ主なサービスが動いているか
systemctl is-active systemd-resolved nscd dnsmasq unbound named
nameserver 127.0.0.53 になっていれば systemd-resolved が使われています(Ubuntu の標準構成)。active と表示されたサービスについて、次の手順でキャッシュを消します。
systemd-resolved
sudo resolvectl flush-caches
# キャッシュの件数を確認(Current Cache Size が 0 に戻る)
resolvectl statistics
古い資料にある systemd-resolve --flush-caches は旧コマンド名です。現在は resolvectl を使います。
nscd
nscd(Name Service Cache Daemon)は、ホスト名の検索結果を hosts というテーブルにキャッシュします。
sudo nscd -i hosts
-i は指定したテーブルのキャッシュを無効にします。サービスを再起動しても同じ結果になります(sudo systemctl restart nscd)。
dnsmasq
dnsmasq は SIGHUP を受け取るとキャッシュを消し、/etc/hosts を読み直します。
sudo pkill -HUP dnsmasq
NetworkManager が内部で dnsmasq を起動している構成もあります。その場合も同じコマンドで消せます。
Unbound
キャッシュサーバーとして Unbound を動かしている場合は、unbound-control を使います(remote-control を有効にしておく必要があります)。
# 1つの名前の A・AAAA などを消す
sudo unbound-control flush example.com
# ドメイン配下(サブドメインを含む)をすべて消す
sudo unbound-control flush_zone example.com
BIND(named)
# キャッシュ全体を消す
sudo rndc flush
# 1つの名前だけ消す
sudo rndc flushname example.com
消えたかを確かめる
dig や nslookup は /etc/resolv.conf のサーバーに直接問い合わせるため、nscd のキャッシュを通りません。アプリケーションと同じ経路(NSS)で名前解決した結果を見るには getent を使います。
getent hosts example.com
# systemd-resolved を使っている場合
resolvectl query example.com
なお、/etc/hosts に古い IP アドレスを書いたままだと、キャッシュを消してもそちらが優先されます。サーバーの引っ越しで一時的に書いた行が残っていないかも確かめてください。
Windows
コマンドプロンプトまたは PowerShell で実行します。
ipconfig /flushdns
キャッシュの中身は ipconfig /displaydns で確認できます。
macOS
ターミナルで実行します。管理者パスワードを求められます。
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
ブラウザー(Chrome)
Chrome は OS とは別に名前解決の結果を短時間保持します。アドレスバーに chrome://net-internals/#dns を入力し、「Clear host cache」を押します。開いたままの接続が古いサーバーにつながっている場合は、同じ画面の左側の「Sockets」で「Flush socket pools」も押します。
キャッシュを消しても古い IP アドレスにつながるとき
- 自宅や社内のルーターが DNS キャッシュを持っている場合は、ルーターの再起動か、TTL が切れるのを待ちます。
- プロバイダーやパブリック DNS(8.8.8.8、1.1.1.1 など)のキャッシュは、手元の操作では消せません。Google Public DNS と Cloudflare の 1.1.1.1 には、特定の名前のキャッシュの削除を依頼できるページがあります。
- 引っ越しのように切り替え日が決まっているときは、数日前にレコードの TTL を短くしておくと、切り替え後に古い値が残る時間を短くできます。
関連する手順は次の記事にまとめています。