最新 追記

meta's blog - The Power To Serve

筆者について

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

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


2010-12-04 PortForwarding for radiko.jp

radiko.jp を地域外で聴くためのトンネリング (12月1日のリニューアルに対応)

2010年12月1日のradikoのリニューアルで、フォワーディングの設定変更が必要になりました。

radiko.jp のAレコードが変更になったためです。以前は3つのIPアドレスがDNSラウンドロビンで運用されていました。

;; ANSWER SECTION:
radiko.jp.		264	IN	A	210.172.41.85
radiko.jp.		264	IN	A	210.172.41.88
radiko.jp.		264	IN	A	210.172.41.91

12月1日より下記のように変更されています。

;; ANSWER SECTION:
radiko.jp.              194     IN      A       219.103.34.226

変更点は 210.172.41.80/28 に転送していたパケットの転送先が 219.103.3.226 になった点だけのようです。

これをふまえて、SSHポートフォワーディングのスクリプトは以下のように変更になりました。

--- radiko.sh   2010-12-04 03:37:13.000000000 +0900
+++ radiko.sh.old       2010-12-04 03:32:43.000000000 +0900
@@ -2,9 +2,9 @@
 if [ `ps xwww|grep radiko_tunnnel|wc -l` -eq 0 ]; then
   echo -n 'Making Radiko Tunnel...'
   ssh chiba.example.jp -N -f \
-       -L10080:219.103.34.226:80 \
+       -L10080:210.172.41.88:80 \
        -L11935:219.103.32.110:1935 \
-       -L18935:219.103.34.226:8935 \
+       -L18935:210.172.41.88:8935 \
        -i /path/to/.ssh/radiko_tunnel \
        && echo 'OK!'
 else

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 219.103.34.226 dst-port 80
ipfw add 40000 fwd 127.0.0.1,18935 tcp from any to 219.103.34.226 dst-port 8935

以前の radiko.jp 地域外聴取についての記事はこちらです。

本日のツッコミ(全1件) [ツッコミを入れる]

Σ ひで [PortForwarderの設定例も書いてください。お願いします。]


2010-12-10 ruby19-iconv

lang/ruby19 と converters/ruby-iconv の関係

FreeBSDでTwiProwlなどのruby1.9を必要とするソフトウェアを実行しようとすると、以下のようなエラーが出る場合があります。

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load --
iconv (LoadError)
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /usr/local/lib/ruby/1.9/json/common.rb:2:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /usr/local/lib/ruby/1.9/json.rb:1:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from twiprowl:16:in `<main>'

見ての通りiconvのロードに失敗しているだけなので、本来はportsからconverters/ruby-iconvをインストールすればOKなはずです。しかし、単に

cd /usr/ports/converters/ruby-iconv && make install

としたのでは下記のようにruby1.8用のものがインストールされてしまいます。

$ sudo make install
===>  License check disabled, port has not defined LICENSE
===>  Extracting for ruby18-iconv-1.8.7.302,1
===>   ruby18-iconv-1.8.7.302,1 depends on file: /usr/local/bin/ruby18 - found
/bin/mkdir -p /usr/ports/converters/ruby-iconv/work
/bin/ln -sf /usr/ports/lang/ruby18/work/iconv /usr/ports/converters/ruby-iconv/work/
===>  Patching for ruby18-iconv-1.8.7.302,1

直接extconfなどを実行してruby1.9用のiconvをインストールしている記事もありますが、これは正攻法ではありません。RUBY_DEFAULT_VER環境変数をセットして以下のようにビルドするのが正解です。

cd /usr/ports/converters/ruby-iconv && make RUBY_DEFAULT_VER=1.9 install

とするとruby1.8用のiconvとruby1.9用のiconvを別々のパッケージとして共存させてインストールすることが可能です。

$ pkg_info| grep iconv | grep ruby
ruby18-iconv-1.8.7.302,1 An iconv wrapper class for Ruby
ruby19-iconv-1.9.2.0,1 An iconv wrapper class for Ruby

どうしてこうなるのかの秘密は、ruby-iconvのMakefileと8-12行目あたりと、/usr/ports/Mk/bsd.ruby.mkの139-142行目にあります。

これは他の多くの ruby-* というportに対しても有効です。


2010-12-20 PortForwarding for radiko.jp

radiko.jp を地域外で聴くためのトンネリング (2010年12月のリニューアル rev.2)

12月4日の日記で2010年12月1日に行われたradikoのリニューアルに対応しましたが、対応が不完全でしたので訂正します。

12月1日にリニューアルが行われ、この記事を書いている現在ではradikowを聴くために必要なサーバは以下の2つのようです。前者が主にWebページを配信し、後者が音声ストリームを配信するサーバです。再生中の通信を監視したところ、転送すべきポートは以下のようでした。

  • 219.103.34.226 (radiko.jp)
    • 80/tcp
    • 443/tcp
    • 8935/tcp
    • 8936/tcp
    • 8937/tcp
  • 219.103.34.224 (radiko.smartstream.ne.jp)
    • 80/tcp
    • 1935/tcp

Webブラウザ、radiko_player_air、radikker、ラジ朗など、聴取に利用するアプリによって必要なポートが異なる(全てのポートを転送しなくても聴ける)ようですが、ひとまずこれだけ転送しておけばどの環境でも聴けるようです。

SSH用のシェルスクリプトとipfw用のルールは気が向いたら更新します。

radiko SSHポート転送用シェルスクリプト & ipfw 用ルール

いずれも一例です。

SSH用シェルスクリプト

#!/usr/local/bin/bash
if [ `ps xwww|grep radiko_autologin|wc -l` -eq 0 ]; then
  echo "Making Radiko Tunnel..."
  ssh chiba.example.jp -l user -N -f \
        -L10080:219.103.34.226:80 \
        -L10443:219.103.34.226:443 \
        -L18935:219.103.34.226:8935 \
        -L18936:219.103.34.226:8936 \
        -L18937:219.103.34.226:8937 \
        -L10081:219.103.34.224:80 \
        -L21935:219.103.34.224:1935 \
        -i /path/to/.ssh/radiko_autologin
else
  echo "Radiko Tunnel is alive."
fi

ipfw 用フォワーディングルール

40000 fwd 127.0.0.1,10080 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 80
40000 fwd 127.0.0.1,10443 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 443
40000 fwd 127.0.0.1,18935 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 8935
40000 fwd 127.0.0.1,18936 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 8936
40000 fwd 127.0.0.1,18937 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 8937
40000 fwd 127.0.0.1,10081 tcp from ${inet}:${imask} to 219.103.34.224 dst-port 80
40000 fwd 127.0.0.1,21935 tcp from ${inet}:${imask} to 219.103.34.224 dst-port 1935
本日のツッコミ(全5件) [ツッコミを入れる]

Before...

Σ meta [ありがとうございます。結構見ている方がいるようですので近日中に追加します。]

Σ sara [ありがとう!!]

Σ 北国赤海老 [radikaの接続エラーでのアドレスが不明だったので参考になりました。]