Mac OS X で Bonjour Sleep Proxy を動かす方法

Mac OS X 10.6 の中にも Bonjour Sleep Proxy の機能は入っていたのですね。 mDNSResponder(8) の中に機能は含まれていて条件により動作するようになっていました。

詳しく調べきれてはいないのですが、動作させる方法は 2つあるようです。

  1. インターネット共有を有効にする
  2. 省エネルギーの設定でコンピュータのスリープをしないにして、mDNSResponder を起動するときに -OfferSleepProxyService 50 とオプション指定する

どちらもいまいち良くないところがありまして…
1 は設定を変えるのが簡単そうですが、使用するポートの設定によっては DHCP サーバーがぶつかるなどの問題が発生するのと、DHCP サーバー以外にも不要なものが動いてしまうのが良くないところです。
2 は余計なものは動きませんが、設定はファイル /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist を直接編集する必要がありますし、そのファイルは OS のアップデート時などに上書きされてしまう可能性があります。

com.apple.mDNSResponder.plist を編集する場合は、オリジナルのファイルを必ず別な場所にコピー保存してから次の部分を編集します。

<key>ProgramArguments</key>
<array>
	<string>/usr/sbin/mDNSResponder</string>
	<string>-launchd</string>
</array>

の様になっているところを

<key>ProgramArguments</key>
<array>
	<string>/usr/sbin/mDNSResponder</string>
	<string>-launchd</string>
	<string>-OfferSleepProxyService</string>
	<string>50</string>
</array>

の様に 2行追加します。
問題があると DNS で名前を引くこともできなくなります。

動作を確認する方法ですが、機能が有効になっていると コンソール.app ですべてのメッセージを表示させておくことで mDNSResponder が出すログを確認することができます。

50 の意味が気になる方がいるかもしれません。 これは機能を有効にする条件と、おそらく複数の Sleep Proxy が存在した場合の優先順位にも関係しているような感じでしたが、そこまではよく確認していません。 Mac で動かす場合は機種によって条件や優先順位を変えると思われる処理があるようです。 50 を指定すればどの機種でも動作対象になるはずだと思います。