筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
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接続を監視し、切れていれば再接続してくれます。
2010-08-20 オープンソース界にちょっとだけ貢献
■ 2010年のsend-prまとめ
特に何があったからというわけではないのですが、2010年に入ってから提出したsend-prをまとめてみます。
- ports/143359: net/xrdp does not accept Windows 7 RDP client
- ports/146781: broken port japanese/roundcube
- ports/148022: net/netatalk 2.1.1 does not listen on ipv4
8月20日現在で以上の3つ。あまり多くはありません。
1番目のnet/xrdpのportは提出時点でのバージョンが0.4系で、Windows 7のリモートデスクトップクライアントで正常に接続することが出来なかった問題に関するPRです。メンテナが作成した0.5系のportのビルドとテストを行い、起動スクリプトの修正に協力しました。
2番目はWebメーラーのroundcubeの日本語版のportが壊れていてビルドできない問題の単なる報告です。進捗はありません。mail/roundcubeが日本語に既に対応しているのでjapanese/roundcubeはほとんど不要になっています。機会があればjapanese/roundcubeの廃止に協力したいと思います。
3番目はUNIX上でApple Filing Protocolサーバを提供するnet/netatalkに関する障害報告です。2.1.0から2.1.1にバージョンアップすると、IPv6でしかListenしなくなるため、IPv4環境では接続できなくなるという問題です。afpd.confに
-ipaddr 192.168.11.11
という行を追加して明示的にIPv4でListenするように設定することで回避していましたが、port側に変更が加えられてこの問題は解消しました。
今後はsend-prするたびに記事にすることにします。
2010-06-24 サーバ移行
■ 自宅サーバリプレース
自宅サーバのリプレースを敢行しています。
現行のサーバは
- Dell Optiplex GX 150
- Pentium 3 933MHz
- 256MB RAM
- 32GB HDD
- Vine Linux 4.2
というスペックのもので、大学に入学する直前の高校3年のときに購入したものです。Vine Linuxを選択したのは、当時(未だに)実家のインターネット回線がISDNだったためCD1枚に収まるディストリビューションを選択した結果です。高校3年の最後の3ヶ月と、学部4年間、そして大学院の最初の3ヶ月のまるまる4年半ほとんど停止せずによく働いてくれました。uptimeは最長で
21:51:10 up 567 days, 21:54, 2 users, load average: 0.14, 0.07, 0.06
を記録しています。スペック的にはまだまだ戦えるレベルですが、凝ったことをしようとするとメモリが足りなかったり、BIOSの罠でハードディスクが32GBまでしか使えな(HDD側で容量を32GBに制限するジャンパを結線しないとブートしない)かったり、将来に不安があるのでリプレースを決意しました。
新しいサーバは言わずと知れた格安サーバ HP ProLiant ML115 G5です。OSはFreeBSDを選択。できるだけ無停止でリプレースしたいので、サブプロバイダとしてi-revoを契約、BフレッツのPPPoEマルチセッションで接続、新しいサーバはこちらの回線にぶら下げることにしました。
既にリプレースは半分程進んでいて、順番が前後しますが構築のまとめを書いていくかもしれません。
2010-06-23 IPサイマルラジオ放送 radiko.jp
■ iPhoneアプリ「ラジ朗」で radiko.jp を地域外で聴く方法
IPアドレスベースで聴取地域制限を行っているradikoですが、iPhoneの3G回線ではすべて東京と判定されるというのは前述した通りです。
このため、iPhoneの3G回線でradikoを聴取するにはちょっとした壁があります。radiko公式アプリではGPSによる地域判定が必要だったり、ラジ朗ではWi-Fi回線での聴取のみに制限されていたりという制限があります。
今回はJailbreak済みのiPhone向けに、ラジ朗を使って地域外でradikoを聴取する方法を紹介します。
iPhoneのルーティングテーブルを弄るという方法で地域外での聴取を実現しますが、聴取にはWi-Fi接続を必要とします。root権限のTerminalを起動し、以下のコマンドを打ちます。
route add -net 210.172.41.80/28 -interface pdp_ip0 route add -net 219.103.32.110 -interface pdp_ip0
上記のようなルーティングテーブルを追加することで、Wi-Fi回線が繋がっていてもradikoのサーバへの通信は常に3G回線を経由するようになります。
ラジ朗はWi-Fiが有効でない状態ではGPSによる地域判定を要求し、Wi-Fiが有効な状態ではWi-Fi回線のIPアドレスにより地域判定が行われます。しかし通信を3G回線で行っているかWi-Fiで行っているか、という判定はインターフェイスがUPかどうかしか見ておらず実際にどちらの回線で通信しているかは関係ありません。通常Wi-Fi回線が有効な場合は(MMSなどを除く)すべての通信がWi-Fiを経由するのですが、radikoサーバへの通信は3G回線を経由するというルーティングテーブルを追加することでラジ朗にはWi-Fi回線で通信していると判定され、実際には3G回線(常に東京判定)なのでradikoを聴取することができるというからくりです。
Jailbreak状態で地域外でradikoを聴くには3G UnrestricterやFakeLocationを使用するという方法がありますが、どちらも有料のアプリケーションです。ルーティングテーブルを追加するという方法では条件が限られますがOS標準の機能のみで実現できます。
今回の方法でradikoを聴取するための条件:
- Wi-Fi回線が使用できる
- 3G回線が使用できる(圏外だがWi-Fiのみつながるという場所ではNG)
- Jailbreak済み
つまり、radikoの聴取地域外でWi-Fiのない屋外を移動しながらという場合にはこの方法は使用できません。聴取地域外で自宅やマクドナルドのWi-Fi回線を使って移動せずに聴くという限られた条件でのみ有効です。前者の場合には3G UnrestricterやFakeLocationが有効です。
また、このルーティングテーブルを追加したままでは現在地に関係なくradikoサーバへの通信を常に3G回線経由で行うので、東京に出張してWi-Fiでradikoを聞くという場合には以下のコマンドでルーティングテーブルを削除しないとバッテリーの消費が激しくなるので注意が必要です。
route delete -net 210.172.41.80/28 route delete -net 219.103.32.110
2010-06-21 TimeMachine
■ Apple TimeMachineをFreeBSDで構築する方法
Apple Filing Protocol サーバの構築方法とTimeMachineのサーバとして使うための設定方法。下記のページから。
2010-06-07 SSHのRSA秘密鍵から公開鍵を生成する方法
■ SSHのRSA秘密鍵から公開鍵を生成する方法
些細なメモ。ssh-keygen コマンドの -y オプションを使う。
$ ssh-keygen -h -y Read private key file and print public key.
$ ssh-keygen -y Enter file in which the key is (/home/meta/.ssh/id_rsa): Enter passphrase: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA4BtGh1+6XRBqGr6a1RVV/ZyrCUTrmOpiQn8kt0HQD4oJLr6a1Ggl5bzMWjGHN15F7xOeVProJpL3Kkmn/N9mk7EJF4fmKnQm0lPmc/12jxIVxuiuYiiyCcHeOI3US/UXB2OFGJGZ71oncgdXz/HkmFV1uJREhNoW1tlD5c/l6c8=
これだけ。
2010-04-05 IPサイマルラジオ放送 radiko.jp
■ radiko.jp を地域外で聴く方法 (トンネリング編)
この記事は最新でない情報を含んでいます。最新の情報は2010年9月21日の記事を参照してください。
radiko.jp はIPアドレスベースで聴取地域の制限を行っているので、エリア内にトンネリングすればエリア外からでも聴取することができます。今回は SSH Port Forwarding によるradikoのトンネリング方法を解説します。 聴取可能地域と判定されるIPアドレスを持つサーバへSSHでログイン可能なことが前提です。
radiko.jp のDNSレコードは4月5日現在、次のようになっていて、こちらが radiko.jp の Web ページ (HTTP) の接続先です。
;; 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
また、これとは別の音声のストリーミング再生(RTMP)の接続先があり、以下の
- 219.103.32.110
はじめに、聴取可能地域に設置したサーバ (例: 千葉) に SSH Port Forwarding でトンネルを確保します。
$ ssh chiba.example.jp -N -f -L 10080:210.172.41.88:80 -L 11935:219.103.32.110:1935
radiko.jp の A レコードには IPアドレスが3つありますが、単なる DNS ラウンドロビンなのでどれか1つにのみトンネルを作れば OK です。
トンネルを確保したら、radiko 宛へ出て行くパケットをトンネルを通るようにフォワードしてやります。今回は FreeBSD なので ipfw を使いました。 ipfw で IPフォワーディングを使用するには IPFIREWALL_FORWARD オプションを有効にしてカーネルを再構築する必要があります。
ipfw に以下のようなルールを設定します。
ipfw add fwd 127.0.0.1,10080 tcp from any to 210.172.41.80/28{85,88,91} dst-port 80
ipfw add fwd 127.0.0.1,11935 tcp from any to 219.103.32.110 dst-port 1935
以上で地域外でも radiko.jp を聴取できるようになります。 クライアントPCで設定すればそのPCでのみ、ルータで設定すればそのルータを通るLAN内のPCすべてから聴取可能です。
イメージ図はこんな感じ。
この記事は最新でない情報を含んでいます。最新の情報は2010年9月21日の記事を参照してください。
2010-03-16 IPサイマルラジオ放送 radiko.jp
■ radiko.jp を地域外で聴く方法 (モバイル回線編)
背景はこのへん参照。
radiko.jp のサイマルラジオ放送はIPアドレスベースで聴取地域制限を行っています。 モバイル回線の場合3G網の上にIP網がオーバーレイされているため、IP層でルーティングする必要がなく、IP層的にはすべて東京(または大阪)に集約されているキャリアが多い様です。
このためイー・モバイルなどのモバイル回線で接続すれば実際の現在地に関わらず、東京または大阪扱いになり、radiko.jpで配信されているラジオを聴取することが可能です(2010年3月16日現在)。
自宅などの既にインターネット回線が確保されている場所の場合、以下のIPアドレス宛のパケットのみがイー・モバイルなどのモバイル回線から出て行くようにすれば、モバイル回線に必要以上の負荷をかけずにradikoの聴取が可能になります。
- 219.103.32.110/32
- 210.172.41.80/28
iPhoneのテザリング(ソフトバンク3G回線)で聴取するための設定メモ。あらかじめiPhoneでテザリングを可能にしていることが前提です。
- BluetoothまたはUSBでテザリング接続する (すでに有線LANや無線LANでつながっている回線を切断する必要はない)
- 管理者特権で Windows PowerShell を起動する
- 以下のコマンドを実行し、ルーティングテーブルを設定する
route ADD 219.103.32.110 MASK 255.255.255.0 192.168.20.1 route ADD 210.172.41.80 MASK 255.255.255.240 192.168.20.1
radiko.jpで配信されているラジオのビットレートはすべて HE-AAC 48kbps なので60時間ほど聴くと通信規制の閾値の1000万パケット(約1.2GB)に到達します。
2010-01-26 diablo-jdk1.6.0 で日本語フォント(font-ipa, font-ipa-uigothic)を使う方法
■ diablo-jdk1.6.0 で日本語フォント(font-ipa, font-ipa-uigothic)を使う方法
FreeBSD で Java を使用するには Diablo JDK16 や JDK16 を使いますが、これらには日本語フォントを使うための設定が含まれていないため、 日本語を使用する Java GUI アプリケーションでは日本語フォントの部分が□□で表示されてしまいます。
これを回避するためには以下の記事のように設定すればいいのですが、このままではうまくいきません。
というのも2009年5月から6月頃にかけて、日本語フォント周りの整理が行われ、フォントファイルのパスに変化があったからです。
下記の用に設定すれば日本語が表示できるようになります。
まず上の記事を参考に、日本語フォント port の再インストールを行っていない場合は再インストールを済ませておきます。 今までの port をアンインストールしたら、 japanese/font-std と japanese/font-ipa-uigothic をインストールします。
フォントのインストールが終わったら fontconfig.properties を作成します。
/usr/local/diablo-jdk1.6.0/jre/lib/fontconfig.properties に以下の様に書いておけばとりあえず日本語が表示されるようになります。他の言語についての設定は省いています。
# @(#)linux.fontconfig.properties 1.2 03/10/28 # # Copyright 2003 Sun Microsystems, Inc. All rights reserved. # # Version version=1 # Component Font Mappings serif.plain.latin-1=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1 serif.bold.latin-1=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1 serif.italic.latin-1=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1 serif.bolditalic.latin-1=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1 sansserif.plain.latin-1=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 sansserif.bold.latin-1=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 sansserif.italic.latin-1=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 sansserif.bolditalic.latin-1=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 monospaced.plain.latin-1=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 monospaced.bold.latin-1=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 monospaced.italic.latin-1=-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1 monospaced.bolditalic.latin-1=-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1 dialog.plain.latin-1=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 dialog.bold.latin-1=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 dialog.italic.latin-1=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 dialog.bolditalic.latin-1=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 dialoginput.plain.latin-1=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 dialoginput.bold.latin-1=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 dialoginput.italic.latin-1=-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1 dialoginput.bolditalic.latin-1=-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1 dialog.plain.japanese=IPA UIGothic dialog.bold.japanese=IPA UIGothic dialog.italic.japanese=IPA UIGothic dialog.bolditalic.japanese=IPA UIGothic sansserif.plain.japanese=IPA PGothic sansserif.bold.japanese=IPA PGothic sansserif.italic.japanese=IPA PGothic sansserif.bolditalic.japanese=IPA PGothic serif.plain.japanese=IPA PMincho serif.bold.japanese=IPA PMincho serif.italic.japanese=IPA PMincho serif.bolditalic.japanese=IPA PMincho monospaced.plain.japanese=IPA Gothic monospaced.bold.japanese=IPA Gothic monospaced.italic.japanese=IPA Gothic monospaced.bolditalic.japanese=IPA Gothic dialoginput.plain.japanese=IPA UIGothic dialoginput.bold.japanese=IPA UIGothic dialoginput.italic.japanese=IPA UIGothic dialoginput.bolditalic.japanese=IPA UIGothic # Search Sequences sequence.allfonts=latin-1 # Exclusion Ranges # Font File Names filename.IPA_Gothic=/usr/local/share/font-ipa/ipag.otf filename.IPA_PGothic=/usr/local/share/font-ipa/ipagp.otf filename.IPA_UIGothic=/usr/local/share/font-ipa-uigothic/ipagui.ttf filename.IPA_Mincho=/usr/local/share/font-ipa/ipam.otf filename.IPA_PMincho=/usr/local/share/font-ipa/ipamp.otf
Diablo JDK 以外の Java も使用する場合は、それぞれの JDK の指定する場所へシンボリックリンクを作成しておけばOKです。
2009-10-14 trackerd
■ trackerd を無効化する (FreeBSD 7.2-RELEASE)
Tracker というファイル検索のインデックス化デーモンがやたらリソースを消費するので無効化します。
無効化自体は /usr/local/etc/xdg/autostart/trackerd.desktop を削除するだけでOKです。
一応バックアップを取っておくために、
# mkdir /usr/local/etc/xdg/autostart.disabled # mv /usr/local/etc/xdg/autostart/trackerd.desktop /usr/local/etc/xdg/autostart.disabled/
としました。
Σ 深淵 [root権限でterminalを起動させるにはどうすればよいですか? 何卒ご教授よろしくお願いします。]