2026年5月24日
2026年5月24日
DNSキャッシュをクリアする方法(Windows/Mac/Linux)|ブラウザ・ルーターの分も含めて
DNSキャッシュを消すコマンドは、Windows なら ipconfig /flushdns、Mac なら sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder、Linux(systemd-resolved を使う環境)なら resolvectl flush-caches です。ただし、キャッシュはOSだけでなくブラウザ、ルーター、プロバイダのDNSサーバーにもあり、OSのキャッシュを消しても古い表示が残ることがあります。この記事では、OSごとの手順に加えて、どの層のキャッシュが原因かを見分ける方法を説明します。
DNSキャッシュをクリアしたくなる場面
WordPress サイトの運用では、次のような場面でよく必要になります。
- サーバー移転でAレコードを新しいIPアドレスに変えたのに、自分のパソコンだけ旧サーバーのサイトが表示される
- 新しく作ったサブドメインが、他の人は開けるのに自分だけ「サイトにアクセスできません」になる
- hosts ファイルを編集・削除したのに、結果が変わらない
どれも、手元のどこかに古い名前解決の結果が残っているのが原因です。DNSの応答にはTTL(有効期限の秒数)があり、期限が切れるまではキャッシュの値が使われます。
キャッシュがある場所を知っておく
名前解決の結果は、おおむね次の順に保存されています。
- ブラウザ自身のキャッシュ
- OSのキャッシュ(Windows の DNS Client、macOS の mDNSResponder、Linux の systemd-resolved など)
- 家庭や社内のルーター、社内DNSサーバー
- プロバイダや公開DNS(8.8.8.8 など)のキャッシュDNSサーバー
自分で消せるのは基本的に1と2です。3はルーターの再起動で消えることが多く、4は自分では消せないためTTLが切れるのを待つか、別のDNSサーバーに問い合わせて確認します。
Windows でクリアする
コマンドプロンプトまたは PowerShell を開いて実行します。環境によっては管理者権限が必要なため、「管理者として実行」で開いておくと迷いません。
ipconfig /flushdns
DNSリゾルバーのキャッシュがフラッシュされた旨のメッセージが表示されれば完了です。PowerShell のコマンドレットを使う方法もあります。
# キャッシュの中身を確認する
Get-DnsClientCache | Where-Object Entry -like "*example.com*"
# キャッシュを消す
Clear-DnsClientCache
消す前に中身を見ておくと、本当に古い値がキャッシュされていたのかを確かめられます。hosts ファイルに書いた内容もこの一覧に表示されますが、キャッシュを消しても hosts ファイルの設定自体は消えません。
Mac でクリアする
ターミナルで次の2つを実行します。パスワードを求められたら、Mac のログインパスワードを入力します。
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
成功しても何も表示されないのが普通です。このコマンドは近年の macOS で広く使われているものですが、古いバージョンでは手順が異なっていた時期があります。うまくいかない場合は、お使いの macOS のバージョンに合った手順を Apple のサポート情報などで確認してください(2026年10月現在)。
Linux でクリアする
Linux は、ディストリビューションや設定によってキャッシュを持つ仕組みが異なり、そもそもOS側にキャッシュが無い場合もあります。まず、何が動いているかを確認します。
# systemd-resolved が動いているか
systemctl is-active systemd-resolved
# /etc/resolv.conf の参照先(127.0.0.53 なら systemd-resolved)
cat /etc/resolv.conf
systemd-resolved の場合(Ubuntu など)
sudo resolvectl flush-caches
# キャッシュの件数などを確認する
resolvectl statistics
古いバージョンでは systemd-resolve --flush-caches という書き方でした。どちらが使えるかは、resolvectl コマンドがあるかどうかで判断できます。
nscd や dnsmasq を使っている場合
# nscd のホスト名キャッシュを消す
sudo nscd -i hosts
# dnsmasq は再起動でキャッシュが消える
sudo systemctl restart dnsmasq
どれも動いていなければ、OSはキャッシュを持っておらず、毎回 /etc/resolv.conf に書かれたDNSサーバーに問い合わせています。この場合に古い値が返るなら、原因は問い合わせ先のDNSサーバー側です。
ブラウザのキャッシュも消す
Chrome や Edge は独自のDNSキャッシュを持っています。アドレスバーに次のURLを入力すると、DNSのキャッシュを消す画面が開きます。
chrome://net-internals/#dns
edge://net-internals/#dns
画面のボタン(Chrome では「Clear host cache」)を押したあと、同じ画面の「sockets」の項目で接続中のソケットも閉じると、古いサーバーへの接続が使い回されるのを防げます。Firefox では about:networking#dns から消せます。いずれも画面の表記はバージョンによって変わることがあります。
また、ブラウザの「セキュアDNS(DNS over HTTPS)」が有効だと、ブラウザはOSとは別のDNSサーバーに問い合わせます。OSのコマンドでは正しい値が返るのにブラウザだけ古い場合は、この設定も確認します。
クリアしたのに直らないときの切り分け
キャッシュを消しても変わらないときは、どこから古い値が返っているかを順に確かめます。
# 手元のOSが使っているDNSサーバーに聞く
nslookup example.com
# 公開DNSに直接聞く
nslookup example.com 8.8.8.8
# 権威DNSに直接聞く(ns1.example.net は例)
dig @ns1.example.net example.com A +norecurse
- 権威DNSの値が古い:DNSの設定自体が反映されていません。管理画面で保存できているか、ネームサーバーが正しいかを確認します
- 権威DNSは新しいが、手元のDNSサーバーが古い:ルーターやプロバイダのキャッシュが残っています。TTLが切れるまで待つか、ルーターを再起動します。一時的にパソコンのDNSを公開DNSに切り替える方法もあります
- nslookup は新しいが、ブラウザだけ古い:ブラウザのキャッシュ、セキュアDNS、または hosts ファイルが原因です
nslookup や dig は hosts ファイルを参照しないため、hosts ファイルに古い設定が残っている場合はコマンドの結果とブラウザの表示が食い違います。Google Public DNS と Cloudflare の 1.1.1.1 には、特定のドメインのキャッシュ削除を依頼できる公式ページもありますが、これは各サービスのキャッシュだけが対象です。
まとめ
- Windows は
ipconfig /flushdns、Mac はdscacheutil -flushcacheとkillall -HUP mDNSResponder、Linux はresolvectl flush-cachesなどで消せる - Linux は環境によって仕組みが異なるため、まず何がキャッシュを持っているかを確認する
- ブラウザにも独自のキャッシュとセキュアDNSの設定がある
- ルーターやプロバイダのキャッシュは自分では消せず、TTLが切れるのを待つ
- 直らないときは、手元・公開DNS・権威DNSの答えを比べて、古い値がどこから来ているかを特定する