2013年2月3日日曜日

Netscreen越しでiPhoneからAppleTVを利用してみた。

仕事の関係で自宅にJuniperのNetscreen5GT(以下NS)を置いてる。
オークションで5000円くらいで買ったんだけどバージョンが6.2.0r11.0と結構新しい。

インターネットGWを、ルータ機能の解除できないwimaxルータに変えてから、グローバルIPをNSに持たせられなくなったのでお飾り的になってしまったけど、一度FWを設置してしまうとスーパーハッカーだらけの今日このごろ、不安なものでずっと使い続けている。
余談だが、FWを設置していない家のPCは1時間に1回くらいの割合でスーパーハッカーに侵入されて、マイピクチャの恥ずかしい写真を見られていると思っていい。

さて先日、なんとなく面白そうに思ってAppleTVを買ってみた。
iPhoneのゲームをTVの大画面でプレイできたり、iPhoneの「remote」というアプリがリモコンになったりと、ガジェット好きにはなかなか興味をそそられるプロダクトだ。

実際使ってみて、AppleTVのリモコンは文字入力が絶望的にやりにくいのでiPhoneをリモコンにするのは必須だなと、NS越しに果たしてできるもんかと挑戦してみたその記録。

----

うちの場合、PC、液晶TV(兼PCモニタ)、AppleTVはNSのスイッチポートに接続していて、これは内部セグメントなのでTrustゾーンに所属している。
一方でiPhoneは、wimaxルータの無線LANを使用していて、こちらはNSの上位にあたり、Untrustゾーンに所属している。
仕事ではNSはL3モードで使うので、うちのもL3だ。つまり、セグメントを越えてiPhoneとAppleTVを接続する必要がある。
まぁAppleTVをUntrustにMIPしてやればiPhoneから見えるしうまくいくでしょ。。。と思ってたけど全然だめだった。
考えてみれば当たり前で、iPhoneはAppleTVのIPアドレスを知らない。MIPされて同一セグメントにいるように見えるが、remoteアプリにはAppleTVのアドレスを入れる箇所はないのだ。
なのでiPhoneは、mDNSを使ってAppleTVを見つける。問題はこのmDNSの最初のパケットが224.0.0.251宛てて、これはルータを超えられないリンクローカルマルチキャストだ。
NSの上下で違うネットワークアドレスをもたせているので、このマルチキャストはNSを超えることが出来ず、iPhoneはいつまで経ってもAppleTVを見つけられない。

解決策は2つあって、

1 .NSのスイッチポートに無線LANメディコン的なものを使ってそこにiPhoneをつなぐ
2.上下セグメントを同じネットワークにして、NSをL2透過モードで動作させる。

1.は、本案件のためにお金を掛けたくないので却下
となると、2だ。もしくはNSを窓から投げ捨てるかだ。しかしこれは通行人の迷惑になるので実施できない。

とはいえ2を実行するのは躊躇われた。なぜなら、シリアルコンソールで繋ぐ手段がないからだ。
PCにシリアルポートが付いてないのでUSBの変換ケーブルが要る。高いものではないけど、これのためにわざわざ買うのももったいない。。。
では諦めてAppleTVの使いにくいリモコンで操作するのか?
あるいは窓からNSを投げ捨てるのか?でももし歩いてる子供に当たりでもしたら。。。
いや、考えてみればAppleTV自体がおれには必要ないのでは・・・?

これって、知人が遊びに来たのでみんなでおれのiPhoneの写真みようぜ?とか、自室PC内のコンテンツをリビングで見たいぜ?とか、PCのない寝室で寝る前にちょっと昔のドラマ見たいわ、とか、ゲームを大画面で遊んでみんなでキャッキャウフフするとか、そういう時に使うもんでしょ?
友達滅多に遊びに来ない1K一人暮らしのおれには全く要らないもんやん。
もう使用感出る前にオークションに出そうぜ?

と、箱にしまいかけたところで思い直してNSのL2化にやはり着手することにした。 
AppleTVは友達滅多に遊びに来ない1K一人暮らしのおれにはほとんど必要ないが、朝ごはん食べながらyoutubeをちょこっと見ることができるし、 ウイルスチェック中のPCをそっとしておきながらhuluが見れるし、NBAも前よりよく見るようになったからだ。
huluの画質もPCよりAppleTVで見るほうがいいような気がするし。
AppleTVはおれには必要なのだ。
とはいえL2化は、シリアルコンソールのない状況では非常に気を使う作業だ。まぁコンフィグをセーブする前ならリブートすれば元には戻るが、時間はあまり食いたくない。

というわけで、仕事と同じくらいのクオリティの作業手順書を作った。正月休み中だったが。
作業詳細は省くが無事うちのNSはL2透過モードで動くようになった。なぜか、trust側へのログインがsshでしか行えないのだが、まぁログインできるのでよしとする。

さてここからポリシーを設定しないといけない。appleのサイトによると、appleTVで使っているポートは

・UDP/5353 (mDNS)
・TCP/3689 (AirPlay)

とのこと。

早速NSに設定して、iPhoneのremoteアプリからAppleTVに接続をすると、あっさり成功!
ボタンにもちゃんと反応している!すごい!
と思ったのもつかの間、カーソルを動かせん。
AppleTV付属リモコンと2刀流で遊んでみたが1分ほどで飽きたので、原因を探す。NSのdenyログを見るのだ。
すると、TCP/50000以上のハイポートがdenyされまくっていた。制御は上記ポートで行なって実際のデータはハイポートで送るんだろう。めんどくさいので50000~65535のTCPを全部許可した。

これで カーソルが動くようになり、いざプリズンブレイクを見るぞ!と思ったら今度は映像と音声がでない。
TVが見れないのでは意味が無い。これでは「appleTV」ではなく「」だ。

denyログを確認すると今度はUDPのハイポートをdenyしまくっていた。さっき一緒にdenyしておけばよかった!
それも許可することで、ようやくiPhoneからAppleTVを操作できるようになった。  超快適!
ソファに寝転がったまま操作できて次から次へと映像コンテンツを渡り歩ける!PCのときはきっちり座って操作する必要があったがこれは起き上がらずに全部操作できる。
非常に危険な状態だ。自堕落の極みだ。

というわけで、

・UDP/5353 (mDNS)
・TCP/3689 (AirPlay)

を、まず制御用に開けておく必要がある。

さらに
 http://support.apple.com/kb/TS1629?viewlocale=ja_JP
で調べたが、

・TCPとUDP 49152-65535(コンテンツ転送用?)

 をiPhone→AppleTV向けに開けておく。
これで、iPhoneとAppleTVを接続して遊べる。
iPhoneからPCのiTunesのコンテンツを視聴したり(1部屋では全く意味無し)、iPhone内の楽曲をAppleTVから出力することも、iPhone画面のミラーリングも、上記要件が空いていればOK。

手持ちのCDは全部iPhoneに入れてるので、最近はコンポ動かすよりAppleTV経由でiPhoneの音を聞くことのほうが増えてきた。
インフルエンザになってもベッドからiPhoneで探偵物語の続きを見れるし、カーレースをTVの大画面でやれるのはとてもおもしろい。

AppleTV、友達があまり遊びにこない独身1K住まいにも、なかなかいいです。

0 件のコメント:

コメントを投稿