«前の日記(2010-08-20) 最新 次の日記(2010-09-30)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2010-09-21 PortForwarding for radiko.jp

radiko.jp を地域外で聴くためのトンネリング(改)

この記事は最新でない情報を含んでいます。最新の情報は2010年12月4日の記事を参照してください。

radiko.jpを地域外で聴取するためのトンネリングについては4月5日のエントリで紹介しましたが、度重なる仕様変更で新たにトンネリングすべきポートが現れました。 PCのブラウザでFlashを使用して聴取する分には問題ありませんが、iPhoneアプリの「ラジ朗」で聴取する際には8935番ポートもフォワードしなければいけないようです。

これをふまえてポートフォワーディングの設定を見直すと、

$ ssh chiba.example.jp -N -f \
-L 10080:210.172.41.88:80 \
-L 11935:219.103.32.110:1935 \
-L 18935:210.172.41.88:8935

SSHのポートフォワーディングの設定は上記のように、ipfwのIPフォワーディングの設定は、

ipfw add 40000 fwd 127.0.0.1,11935 tcp from any to 219.103.32.110 dst-port 1935
ipfw add 40000 fwd 127.0.0.1,10080 tcp from any to 210.172.41.80/28 dst-port 80
ipfw add 40000 fwd 127.0.0.1,18935 tcp from any to 210.172.41.80/28 dst-port 8935

上記のようになります。ルール番号はそれぞれの環境にあわせて修正してください。

また、トンネリングの為のSSH接続が切れた際に再接続するために以下のようなシェルスクリプトを作成しました。使用するにはパスワード入力なしでログインするためにパスフレーズなしの鍵でログインするように準備しておく必要があります。この例の場合は radiko_tunnel,radiko_tunnel.pub という鍵ペアを使用しています。

radiko.sh:
#!/usr/local/bin/bash
if [ `ps xwww|grep radiko_tunnnel|wc -l` -eq 0 ]; then
  echo -n 'Making Radiko Tunnel...'
  ssh chiba.example.jp -N -f \
       -L10080:210.172.41.88:80 \
       -L11935:219.103.32.110:1935 \
       -L18935:210.172.41.88:8935 \
       -i /path/to/.ssh/radiko_tunnel \
       && echo 'OK!'
else
  echo "Radiko Tunnel is alive."
fi

そしてこのスクリプトを5分毎に実行するようにcrontabに

*/5 * * * * /path/to/radiko.sh

とでも書いておけば5分毎にSSH接続を監視し、切れていれば再接続してくれます。