Mac

OS X Yosemiteでdiscoveryutilを使ってDNSキャッシュをフラッシュする方法

OS X Yosemiteでdiscoveryutilを使ってDNSキャッシュをフラッシュする方法

OS XでDNSキャッシュをフラッシュする

Macユーザーの中には、ネームサーバーが正しく名前解決できるように、あるいはDNSアドレスの変更を各コンピュータで認識させるために、OS XのDNSキャッシュをフラッシュする必要がある状況に遭遇することがあるかもしれません。これは特にシステム管理者、ネットワーク管理者、そしてWeb開発者にとって重要ですが、他のユーザーもDNSキャッシュをダンプしてリセットする必要がある状況は確かに存在します。例えば、ユーザーが/etc/hostsファイルを変更し、Macを再起動せずに変更を反映させたい場合などです。

長年のMacユーザーなら、DNSキャッシュのリセット方法がMac OS Xのほぼすべてのバージョンで変更されたことをご存知でしょう。OS X Yosemiteも例外ではありません。これはおそらく、discoverydがmDNSResponderに取って代わり、その後再びmDNSResponderに戻ったことが原因でしょう。YosemiteでのDNSキャッシュのフラッシュはターミナルコマンドのままですが、OSのバージョンによって若干異なり、マルチキャストDNS、ユニキャストDNS、またはその両方をクリアできます。Mac上のすべてのDNSキャッシュをリセットする場合は、念のため両方をクリアしておくことをお勧めします。

OS X Yosemite 10.10.4 および OS X 10.10.5 で DNS キャッシュをクリアする

OS X 10.10.4以降、10.10.5(10.11を含む)では、Appleはdiscoverydを廃止し、mDNSResponderに置き換えました(正確には、mDNSResponderに戻しました)。そのため、OS X Yosemite 10.10.4、10.11 El Capitan、そしておそらくそれ以降のバージョンでDNSキャッシュをクリアするには、以下のコマンド文字列を使用します。

sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder;say cache flushed

このコマンドは、OS X 10.10.4 以降のすべての DNS キャッシュをフラッシュします。

長年のMacユーザーなら、このコマンド文字列がYosemite以前のリリースで基本的に動作していたことを覚えているかもしれません。ただし、OS X Yosemiteの10.10.4より前のバージョンでは、以下で説明する異なるコマンド文字列が使用されます。

OS X Yosemite (10.10、10.10.1、10.10.2、10.10.3) で DNS キャッシュをクリアする

キャッシュをリセットするにはターミナルを使用する必要があります。ターミナルアプリは/アプリケーション/ユーティリティ/にあります。または、Spotlightから起動することもできます。最新バージョンのOS XですべてのDNSキャッシュを完全にクリアするには、MDNS(マルチキャストDNS)とUDNS(ユニキャストDNS)の両方を対象に、2つの異なるコマンドを実行してください。

MDNSキャッシュをクリアする

sudo discoveryutil mdnsflushcache

要求されたら、Return キーを押して管理者パスワードを入力します。

UDNSキャッシュをクリアする

sudo discoveryutil udnsflushcaches

再度、Enterキーを押して、管理者パスワードを要求されたら入力します。後者のコマンドでは、caches が複数形になることに注意してください。これは微妙ですが、重要な構文の違いです。

OS X Yosemite ですべての DNS キャッシュをフラッシュしてリセットする

必要に応じて、上記の 2 つのコマンドを連結することもできます。次のコマンドでは、キャッシュがクリアされたときに音声で通知されます。

sudo discoveryutil mdnsflushcache;sudo discoveryutil udnsflushcaches;say flushed

確かにMDNSとUDNSのキャッシュは異なりますが、OS X YosemiteでDNSキャッシュを実際にクリアするには、両方のコマンドが必要であることがわかりました。ご自身のニーズに合わせて、どちらか一方だけをクリアする必要がある可能性も十分にあります。

不思議に思われる方もいるかもしれませんが、OS X Yosemite では mDNSResponder が廃止されたため、以前のバージョンの Mac OS X のように DNS キャッシュを更新するために mDNSResponder プロセスを強制終了する必要がなくなりました。

OS X Yosemite で DNS キャッシュの詳細を確認する

DNS を変更中または変更する予定があり、現在キャッシュされている内容の詳細を確認したい場合は、次のコマンドを使用できます。

UDNS キャッシュ統計を取得します。

sudo discoveryutil udnscachestats

次のようにして、マルチキャスト DNS キャッシュの詳細を取得することもできます。

sudo discoveryutil mdnscachestats

どちらも、キャッシュされている DNS エントリの数に関する詳細を提供し、次のようなレポートを提供します。

UDNS Cache Stats: Cached 962 of 1750

これらのコマンドを、flushcache のバリエーションを実行する前と後に実行すると、次のように 0 エントリ キャッシュにリセットされることがわかります。

MDNS Cache Stats: lo0: Cached 0 of 2000

変更されたかどうかはどうやってわかりますか?

キャッシュをフラッシュした後、ネーム サーバーまたは IP が実際に変更されたかどうかを確認するには、次のように URL を指定した 'dig' コマンドを使用します。

dig osxdaily.com

digはnslookupに似ていますが、出力が優れており、クエリ時間、ドメインへのアクセスに使用されたDNSサーバー、タイムスタンプなど、より詳細な情報も含まれています。これらはすべて、ネームサーバーの問題をトラブルシューティングする際に役立ちます。ちなみに、digのクエリ時間が遅い場合は、namebenchなどのツールを使用して、より高速なDNSサーバー(通常はGoogle DNSやOpenDNS)を探す必要があります。

最新バージョンの OS X 用の別の DNS キャッシュトリックをご存知ですか? コメントでお知らせください。