mDNSResponder
別名: BonjourとDNS
結論
mDNSResponderは、あらゆるドメイン名をアドレスに変換するmacOSのプロセスです。MacのDNSリゾルバであり、プリンタ、AirPlayスピーカー、共有しているMacなど、ローカルネットワーク上のデバイスを設定なしで見つけるBonjourも動かしています。
アプリがWebサイトを開いたりサーバに接続したりするときは、必ずmDNSResponderにアドレスを問い合わせます。回答をキャッシュするので、同じ名前の問い合わせにはすぐに答えます。自分のアカウントではなく、_mdnsresponderという専用のシステムアカウントで動いています。
負荷は、名前解決の件数に比例します。タブをたくさん開いたブラウザ、VPN、Bonjourデバイスの多い混雑したローカルネットワークは、どれも仕事を増やします。
mDNSResponderがCPUを使う理由
短い急上昇は、名前解決が一気に増えたときに起きます。新しいタブをたくさん開いた、アプリが多くのサーバと同期している、デバイスがネットワークに接続した、などです。使い続けているなら、たいていは名前解決をループで再試行している何か、正常に動いていないVPNやDNSフィルタ、Bonjourの通知が止まらないネットワークが原因です。
Webサイトが名前では開けないのにアドレスでは開ける、あるいはサイトがサーバを移転したのにMacがまだ古いサーバに行ってしまう、というときは、キャッシュが怪しいです。
DNSキャッシュをクリアする方法
最近のmacOSでは、ターミナルで2つのコマンドを実行すればキャッシュが消去され、mDNSResponderが再読み込みします。再起動は必要ありません。
- ターミナルを開きます。
sudo dscacheutil -flushcacheを実行し、求められたらパスワードを入力します。sudo killall -HUP mDNSResponderを実行します。
mDNSResponderが何をしているか確認する方法
mDNSResponderは専用のシステムアカウントで動くので、アクティビティモニタではすべてのプロセスを表示するまで見えません。ターミナルでは、DNSとBonjourという2つの役割を1つずつ確認できます。
- アクティビティモニタを開いて“表示” → “すべてのプロセス”を選び、検索フィールドに
mdnsと入力します。_mdnsresponderアカウントでmDNSResponderが、rootでmDNSResponderHelperが表示されます。 - “CPU”タブの“% CPU”と、“ネットワーク”タブのパケットの列を見守ります。短い急上昇は正常です。Webを見ていないのに負荷が続いているなら、確認する価値があります。
- MacがどのDNSサーバを使っているかを見るには、ターミナルを開いて
scutil --dnsを実行します。resolver #1に、ほとんどの名前解決に使われるサーバがnameserver[0]、nameserver[1]のように表示されます。 - mDNSResponder自体を通して名前解決をテストするには、
dns-sd -G v4v6 apple.comを実行します。アドレスが届くたびに表示されます。止めるにはControl+Cを押します。 - ネットワーク上でBonjourが何を見つけているかを見るには、
dns-sd -B _services._dns-sd._udp local.を実行します。周りのデバイスが通知しているサービスの種類が表示され、たとえばプリンタなら_airplayや_ippです。止めるにはControl+Cを押します。
mDNSResponderの普通の状態と気にすべき状態
普通: ほぼゼロで、たくさんのタブを開いたとき、ネットワークに接続したとき、ネットワーク上のデバイスがスリープから復帰したときに短く跳ね上がる。
確認する価値あり: CPUやネットワークを何時間も使い続ける、またはあるネットワークでは名前解決に失敗するのに、別のネットワークでは成功する。よくある原因:
- 独自のリゾルバを追加し、それを頻繁に変更するVPNやDNSフィルタ。VPNが一部の名前を自前のサーバに送っていると、
scutil --dnsにdomainの行が付いた追加のリゾルバが表示されます。 - 短い間隔で名前解決を繰り返すアプリやスクリプト。多くは、到達できないサーバへの再試行を続けているものです。
- オフィスや共同住宅など、多くのデバイスがBonjourで自分を通知している混雑したローカルネットワーク。
- 遅い、または応答しないDNSサーバを割り当てるネットワーク。名前解決が待たされ、再試行が繰り返されます。
DNSとBonjour: 2つの役割
apple.comのようなインターネット上の名前は、ネットワークまたは自分で設定したDNSサーバに送られます。Mac自身のネットワーク名など、.localで終わる名前はローカルネットワークの外に出ません。mDNSResponderが周りのデバイスに直接問い合わせます。これがマルチキャストDNSで、名前の“m”はここから来ています。
だからscutil --dnsには、mdnsと記されたlocal用のリゾルバが表示されます。プリンタや共有しているMacに、自宅では.localの名前で接続できるのに職場ではできないなら、職場のネットワークがインターネットではなく、ローカルの通知をブロックしています。
よくある質問
MacのmDNSResponderとは?
すべてのアプリのためにドメイン名をアドレスに変換し、Bonjourでネットワーク上のプリンタ、AirPlayスピーカーなどのデバイスを見つけるmacOSのプロセスです。
mDNSResponderを終了できる?
macOSがすぐに再起動しますし、止まっている間はWebサイトの名前解決が一切できません。間違った回答を消したいなら、終了するのではなくDNSキャッシュをクリアしましょう。
mDNSResponderが外部からの接続を受け入れようとするのはなぜ?
Bonjourは、ローカルネットワーク上でほかのデバイスが自分を通知するのを待ち受けています。macOSのファイアウォールはデフォルトでこれを許可しています。使っているファイアウォールが確認してきたら、許可すればAirPlay、プリンタの検出、画面共有が使えるままになります。
mDNSResponderは安全?
はい。macOSの一部で、Appleが署名しており、/usr/sbin/mDNSResponderにあります。自分やrootではなく、専用の制限されたシステムアカウントで動いています。
mDNSResponderHelperとは?
mDNSResponderの小さな相棒で、rootで動き、制限されたアカウントのmDNSResponderでは自分でできない少数の作業を引き受けます。macOSの一部で、ふだんはアイドル状態です。
関連項目
アクティビティモニタより優れたものをお探しなら、Mac向けアクティビティモニタの代替アプリのおすすめをご覧ください。用語集のすべての用語も見られます。