macOS(Sequoia、Sonoma、Ventura)で DNS キャッシュをフラッシュする方法
Terminal コマンド一つで macOS の DNS キャッシュをクリアする方法。ドメイン変更後の古い DNS レコード、壊れたリダイレクト、奇妙な解決の問題を修正します。
DNS キャッシュの問題は誤診しやすいです。ドメインのレコードを更新して伝播を待ち、ブラウザを開いても古いサイトがまだ表示される。または以前は動いていたサイトに突然接続できなくなる。サーバーは問題ない。インターネットも問題ない。問題は Mac が古くなった DNS の答えをキャッシュしてまだ提供していることです。
DNS キャッシュのフラッシュは macOS に保存された答えを忘れて最初からやり直すよう指示します。コマンド一つで約 5 秒かかります。
Mac が DNS レコードをキャッシュする理由
ウェブサイトにアクセスするたびに、Mac はドメイン名(example.com など)を IP アドレスに変換しなければなりません。この変換にはプロセスがあります:Mac はまずローカル DNS キャッシュを確認し、次に DNS リゾルバー(通常は ISP のものか 1.1.1.1 などの公共リゾルバー)に問い合わせ、どちらにも答えがない場合、リゾルバーがそのドメインの権威ネームサーバーに問い合わせます。
キャッシュは通常良いことです。最近訪問したサイトのルックアップチェーン全体をスキップできるため、ブラウジングが速くなります。問題は DNS レコードが変更されて Mac のキャッシュした答えがまだ古い宛先を指している場合に発生します。DNS レコードの TTL(time to live)はリゾルバーにどのくらいキャッシュするかを指示しますが、macOS は常にそれを正確に守るわけではありません。
DNS フラッシュが実際に役立つ場合
すべてのネットワーク問題が DNS キャッシュの問題ではありません。フラッシュが役立つのは:
- ドメインの DNS レコードを変更したばかりなのに Mac がまだ古い IP に解決している場合
- DNS の変更が他の場所に伝播しているのにサイトが間違った場所にリダイレクトする場合
- VPN やカスタム DNS 設定から切り替えて一部のドメインが正しく解決されていない場合
- 確実に存在するドメインがあなたのマシンで「サーバーが見つかりません」と表示されるが他の場所では正常に解決される場合
サイトが遅い、接続がタイムアウトする、TLS エラーが発生しているといった場合は、DNS フラッシュは役立たないでしょう。それらは別の問題です。
macOS で DNS キャッシュをフラッシュするコマンド
コマンドは最近の macOS バージョン全体で同じです。Terminal を開いて(アプリケーション > ユーティリティにあります。または Spotlight で検索)以下を実行します:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
パスワードを入力するよう求められたら入力します。Terminal は入力しても文字を表示しません。これは正常です。成功しても確認メッセージは表示されません。これも正常です。
このコマンドは以下で動作します:
- macOS Sequoia(15.x)
- macOS Sonoma(14.x)
- macOS Ventura(13.x)
まだ Monterey や Big Sur をお使いの場合もこれらのバージョンで動作します。
このコマンドは 2 つのことを行います。dscacheutil -flushcache は DNS を含むディレクトリサービスのキャッシュをクリアします。killall -HUP mDNSResponder は macOS の DNS レスポンダープロセスにシグナルを送り、リロードを指示します。両方が必要です。以前の macOS バージョンでは dscacheutil だけで十分でしたが、数年前からそれでは不十分になっています。
sudo プレフィックスはこれらがシステムレベルの操作であるため必要です。これなしでは両方のコマンドが黙って失敗するか権限エラーを返します。
フラッシュが機能したか確認する
フラッシュ後、新しいブラウザタブを開いて問題があったドメインにアクセスします。古いキャッシュが問題だった場合、正しいサイトが表示されるはずです。
より確実な確認のために DNS ルックアップを行い、期待するものと一致する IP アドレスを取得していることを確認できます。NetUtil の DNS ルックアップツールはこれを素早く行えます:アプリを開き、「DNS ルックアップ」に移動し、ドメインを入力してクエリを実行します。結果には Mac が現在解決している A レコード(IPv4 アドレス)または AAAA レコード(IPv6)が表示されます。IP が更新された DNS レコードと一致すれば、フラッシュは機能し新しいレコードが反映されています。
古い IP が表示される場合、問題はローカルキャッシュではありません。おそらく上流のリゾルバーを通じてまだ伝播中か、DNS の変更がまだ完全に有効になっていません。その場合は数分待ってから再試行してください。
Terminal で直接 nslookup example.com または dig example.com を使って解決された IP を確認することもできます。
一度のフラッシュで完了
macOS での DNS フラッシュは数秒で完了するワンライナーです。結果は目に見える形では持続しません。単に古くなったキャッシュされた答えをクリアして Mac を新鮮な状態にします。待っている DNS の変更が伝播していれば、すぐに正しく解決されます。伝播していない場合でも、フラッシュは何も害を与えず、伝播が追いついたら再実行できます。
NetUtil には Ping、Traceroute、Whois、ポートスキャン、Netstat と並んで DNS ルックアップツールが含まれています。macOS Big Sur で Apple が削除した Network Utility を置き換える無料の macOS アプリです。