OS X YosemiteでなぜWi-Fiの不具合が発生するのか?という理由と、その原因である「discoveryd」を「mDNSResponder」に置換えて修正する方法。

シェアする

スポンサーリンク

 OS X 10.10にアップデートされた一部のMacでWi-Fiが接続できない不具合が報告されていますが、この不具合を「Yosemiteで廃止されたmDNSResponderをMavericksから持ってくることで解決する」という方法をArs Technicaが掲載しています。詳細は以下から。


Yosemite-Wi-Fi-Issue-change-mDNSResponder-Hero


YosemiteでWi-Fiの不具合が発生する理由

 OS X 10.10 YosemiteにアップグレードしたMacでWi-Fiの不具合が色々と問題になっていますが、Ars Technicaのネットワーク担当のテクニカルライターIljitschさんによると、この不具合の根本はdiscoverydというデーモンで、


OS-X-Yosemite-discoveryd-error

Appleが2002年にリリースしたOS X 10.2 Jaguarから2014年のOS X 10.9 Mavericksまで、約12年間に渡りOpen Sourceで開発を続けてきたMacのDNSサービスデーモン”mDNSResponder”をOS X 10.10 Yosemiteでは非Open Sourceにし、C++で書き直した”discoveryd”というデーモンに変更したために起こっている」と主張しており、


Apple-Open-Source-mDNSResponder
[OS X 10.9 : mDNSResponder – Apple Open Source Browser]

This was introduced with Mac OS X 10.2 Jaguar back in 2002. mDNSResponder is written in C and has been released as open source by Apple, and it has found its way to all kinds of non-Apple operating systems and hardware.

Again, as of OS X 10.10, mDNSResponder has been replaced by discoveryd. Curiously, discoveryd is (re)written in C++, not exactly one of Apple’s favorite languages. It’s not on Apple’s list of open source projects.
[Why DNS in OS X 10.10 is broken, and what you can do to fix it – Ars Technica]

 AppleはMavericksのpacemakerでもntpdの不具合を起こしており、Isaac HepworthさんやCraig Hockenberryさんなど多くの開発者からも同様の意見や「Sandbox化されて手のうちようがない」という意見が出ているようです。


YosemiteでmDNSResponderを走らせる

 この記事の”Restoring mDNSResponder, if you dare(勇気があるならmDNSResponderを元に戻してみましょう)”という見出しから説明されている方法はOS X 10.10で採用されたdiscoverydを止めて、OS X 10.9までのmDNSResponderをかわりに起動するというもので、かなり無理矢理な感じがしますが、この方法で数人の方は解決b.hatenaしているようなのでまとめました。


1.まず、警告として何かの間違いでMacが起動しなくなった場合、シングルユーザーモードでMacを起動してdiscoverydを有効にすることで元に戻ると思いますが、それでも無理な場合を見越してTimeMachineでシステムのバックアップをとっておきます。


MacBook-Air-Keyboard-Overview

First a word of warning: if something goes wrong, your Mac may not be able to boot. This can be fixed by booting in single user mode and re-enabling discoveryd (see below).
Be sure you have a recent backup just in case, and only follow the steps below if you are prepared to boot into single user mode if needed.

[Why DNS in OS X 10.10 is broken, and what you can do to fix it – Ars Technica]

2.次にOS X 10.9からmDNSResponder, mDNSResponderHelper、その他の設定ファイルをコピーします。必要なファイルは以下のディレクトリにあるのでデスクトップなどにコピーしてYosemiteのMacに持ってきてください。(Ars Technicaの記事にはTime Machineのコピー方法も掲載されています)


mDNSResponder-in-OS-X-Mavericks

cd ~/Desktop/
cp /usr/sbin/mDNSResponder .
cp /usr/sbin/mDNSResponderHelper .
cp /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist .
cp /System/Library/LaunchDaemons/com.apple.mDNSResponderHelper.plist .

3.次にOS X 10.10のMacにmDNSResponder一式をコピーします。


mDNSResponder-in-Yosemite

sudo cp mDNSResponder /usr/sbin/
sudo cp mDNSResponderHelper /usr/sbin/
sudo cp com.apple.mDNSResponder.plist /System/Library/LaunchDaemons/
sudo cp com.apple.mDNSResponderHelper.plist /System/Library/LaunchDaemons/

4.最後にlaunchctlコマンドでdiscoverydを無効にして、mDNSResponderを有効にします。


launchctl-mDNSResponder-on-Yosemite

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.discoveryd.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.discoveryd_helper.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponderHelper.plist

5.元に戻したい場合は逆にdiscoverydを有効にしてmDNSResponderを有効にするだけです。

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponderHelper.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.discoveryd.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.discoveryd_helper.plist

 この方法で何か別の不具合が起こるかもしれませんが、とりあえずdiscoverydを無効にして、mDNSResponderを有効にしてても、Wi-FiやAirDropなどは問題なく使用できているので、OS X 10.10.2でもWi-Fi問題で困っている方は試してみるの一つの手段かもしれません。


ps-aux-mDNSResponder-on-Yosemite

関連リンク:
「MacBookをOS X Yosemite 10.10.2にアップデートしたらWi-Fiの接続問題が悪化した」という報告が出始めるb.hatena

OS X 10.10.2 Yosemiteで修正&改善された報告まとめ。Wi-Fiの不具合についてはまだ解決していないMacも多いもようb.hatena

OS X Yosemiteにアップグレードした一部のMacでWi-Fiが遅くなる不具合を一時的に解消するMac用アプリ「WiFriedX」が公開b.hatena

コメント

  1. Apple7743 より:

    Appleが作るDaemonはいつもバギーだ┐(‘~`;)┌

  2. Apple7743 より:

    1年ごとにリリースしなくていいから、しっかりしたものを作ってくれ

  3. Apple7743 より:

    いや一年ごとには出していいがwifi問題だけは修正してくれ
    他はいいwifiが遅いと動画もまともに見れないからいらいらする

  4. Apple7743 より:

    うまく動いていたmDNSResponderを替える必要があったのか?

  5. Apple7743 より:

    ML以降、クローズドに回帰してる感があるので、
    mDNSResponderの置換もその一環じゃないかねぇ。
    Sambaも置き換えてるし相当な強い意志を感じる。

  6. Apple7743 より:

    問題なくWi-Fiが使えている環境と、自分のようにWi-Fiがすぐ切れる環境があるわけで、
    なぜそんな違いが生じているのか
    Wi-Fiのカードのドライバの違いまでも含むのか? さっぱりわからない!!

  7. Apple7743 より:

    ヨセからiPhoneモデムにするとwifiをルーターに出来ない仕様になって困ってたんだがこの手段は思い付かなんだ

  8. Apple7743 より:

    Macは大丈夫になったんだがiPhoneのWi-Fiが使いもんにならないくらいヤバい

  9. Apple7743 より:

    俺はios8 Yosemite になってからどっちも遅くなったな
    酷い場合はYouTubeも無理だ

  10. Apple7743 より:

    がんばれベータのみんな
    マベでようすみせてもらう

  11. Apple7743 より:

    ことえりも入れ替わっちゃったし・・・

  12. Apple7743 より:

    以前は新OSにすぐ飛びついたけど
    Snow Leopardくらいから1年は様子見るようになった
    人柱にはなれんよ

  13. Apple7743 より:

    実際はみんなの使ってるルーターが古すぎてダメ、という可能性もある気がする。

  14. Apple7743 より:

    ↑それは100パーセント無い
    OSアップデート前は正常で、アップデート後はトラブル発生してるのに
    他の機器でも起きてないしな
    となると、yosemiteに問題があると考えるのが普通
    っていうか、ルーターが古いとダメ・AirPort以外はダメとか言い出したらメーカーとして終わっとる

  15. Apple7743 より:

    SafariもよくフリーズするからまたChromeに乗り換えたわ。
    1PasswordがあればiCloudキーチェーンはなくてもいい。

  16. Apple7743 より:

    いやwifiが遅くなるのはあってもsafariがフリーズしたことはないな

  17. Apple7743 より:

    ここまでバグだらけなOSなら、もうWWDCにも興味なくなる人が増えるぞ
    どうせまともに動作しないプロダクトなんでしょって感じで・・・

  18. Apple7743 より:

    >>14.さん
    こちらはMBPr Late 2013 13-inch ですが、Yosemiteのおかげ様で、純正の最新AirPort Time Capsule (802.11ac)ですらWi-Fiの速度低下を招いていますからこのOS自体がすでにApple史上最大のバグのリリースですよ。「どこを見ても不具合を起こす力に満ちて」いますから。どうにもならなかったんで、Mavericksに戻したらちゃんと速度が戻ったんで、どう考えてもYosemiteの仕業ですよね。

  19. Apple7743 より:

    マベまでは新OSはすぐにインストールしてそのまま使ってたけど、
    ヨセミテはなんかダメ。
    リリースしてからだいぶ経ったのに、やっぱりまだどこかしら不具合あって自分の環境に入れる気になれない。
    以前みたいに有料で良いからちゃんとしたものリリースしてほしい。

  20. Apple7743 より:

    Wi-Fiだけでもなおして欲しい