« iCloud を利用して自宅の Mac へ SSH する | ホーム | Mac OS X v10.8.2 の Appleeventd が拗ねる件について »

2012年10月 3日

iCloud + SSH + dns-sd で自宅の iTunes へ接続

前回の記事、iCloud を利用して自宅の Mac へ SSH するの応用編です。

iCloud を利用して自宅の Mac へ SSH ができるなら、SSH の Port forwarding を利用して WAN 越しに自宅の iMac の iTunes 共有へアクセスできるんじゃないか?という実験です。結果から言うと、あっけなく出来ました。

iCloud を利用して自宅の Mac へ SSH するができている前提で、手順は以下のとおり。

  • 空きローカルポートを iTunes 共有サービスとして DNS Service Discovery に登録
  • 登録したローカルポートに自宅 Mac の iTunes 共有サービスポートを Forwarding
これだけです。

空きローカルポートを iTunes の共有サービスとして DNS Service Discovery に登録するには dns-sd コマンドを -R オプション付きで使います。

$ dns-sd -R "Home iTunes" _daap._tcp local 3690 "My Home iTunes Server"

ローカルポート 3690番(デフォルトの iTunes 共有のポートの 3689 に +1 してます。別に何番でもいいですよ。)を「Home iTunes」という名前の _daap._tcp サービスとして Bonjour に登録しています。
この時点で iTunes の共有に「Home iTunes」が出てきます。

なお、上記コマンドはプロンプト帰って来ませんので、このままでもういっこターミナルを起動して、自宅の Mac へ SSH つかって Port Forward します。

$ ssh -CgN <account-name>@<computer-name>.123456789.members.btmm.icloud.com -L 3690:localhost:3689
$ password:

ローカルポートの 3690番をリモートホスト(自宅の Mac)のポート 3689番へ転送します。-N オプションを使ってますので、こちらもプロンプト帰って来ません。-C で圧縮。-g で localhost 以外からの接続も許可。

ここまできたら、iTunes の [共有] に出ている自宅の [iTunes の共有名] をクリックして接続してみてください。あっけなく接続されて、自宅の iTunes ライブラリが出てきます。
いつでもどこでも音楽が聴ける!おめでとう!

終了時は、2枚のターミナルで Ctrl + C してプロセスを止めてください。
それじゃあちょっと面倒なので、Shell Script にまとめて、1つのターミナルで済むように...。

#!/bin/sh
# iTunes_tunnel.sh

# regist daap service
dns-sd -R "Home iTunes" _daap._tcp local 3690 "My Home iTunes Server" &

# get dns-sd process ID
PID=$!

# SSH port forwarding
ssh -CgN <account-name>@<computer-name>.123456789.members.btmm.icloud.com -L 3690:localhost:3689 

# Kill dns-sd prosesss
kill $PID

止めたい時は Ctrl + C してください。このスクリプトを止めれば ssh の forward が止まって、次に dns-sd のプロセスも停止します(見りゃわかるか)。常用するなら LaunchAgents に登録するのもいいでしょう。

今回は、_daap._tcp を転送しましたが別に iTunes 共有にかぎらず色々応用がききますね。DNS Service Discovery 周りの事が色々わかって楽しかった。

Windows の iTunes に付属の Bonjour にも dns-sd コマンドがあるので、クライアントが Windows でも同様の事が可能です。SSH は PuTTY などで SSH のところなんとかすればでるんじゃないかと。Linux クライアントの場合には Avahi と daap クライアント(Amarokとか)を使えば同じことができるはずです。

おまけ
リモートの iTunes(というか daap サーバー)がグローバル IP を持っていてポートも空いているなら、SSH しないで dns-sd の PROXY モードでサービスを登録するだけでつながります。

オプションは -R の代わりに、-P を使います。PROXY するホストの fqdn と IP アドレスを追加するだけで書式は同じです。

$ dns-sd -P "Global iTunes" _daap._tcp local 3689 <youre_hostname.local> <123.45.67.89> "My Global iTunes Server"

PROXY モードがあるなら、iCloud のグローバルホスト名とIPアドレス (IPv6) でつながるんじゃない?と思った人。いいカンしてます。やってみてください。このネタはもう少し続きます。

トラックバック(0)

トラックバックURL: http://www.talkabout.jp/system/mt-tb.cgi/20

コメントする

このブログ記事について

このページは、Motoki Kusanoが2012年10月 3日 16:10に書いたブログ記事です。

ひとつ前のブログ記事は「iCloud を利用して自宅の Mac へ SSH する」です。

次のブログ記事は「Mac OS X v10.8.2 の Appleeventd が拗ねる件について」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。