Google Code Prettify

2009年2月15日日曜日

世界どこでもiPhoneで日本の自宅電話にアクセス(iPhone+Asterisk+ひかり電話+VPNで日本の自宅電話携帯化)

日本の実家にある「ひかり電話」のルータにはSIPサーバー機能があるっていうんで、香港で使っているiPhoneから何とか使えないものかとあれこれ試してみました。何日も寝る時間を惜しんでいじくりまわした結果、なんとかできるようになりました。

iPhoneをVPNで実家のネットワークに接続するまではできたのですが、どうしてもSIPクライアントとサーバーがうまく話をしてくれないようなので、このやり方はあきらめました。
仕方ないので、iPhone==>Asterisk==>ひかり電話ルーター という接続を行うことにしました。香港の家庭内ネットワークと日本の実家のネットワークがVPNで接続されているのでAsteriskは香港の家庭内ネットワーク上に配置します。

Asterisk 1.6を手持ちのLinuxマシンにつっこんで、作業開始です。PBXの設定などしたことないので、いろいろな人が示しているサンプルをチェックして、自分の環境にあてはめてみましたが、なかなかどれもうまくうごきません。ただ、VoIP-Info.jp Wiki簡易インストールマニュアルの情報はきれいに情報整理されていて、「これ以上よい説明+サンプルはないだろう」と判断し、ゴリゴリと設定いじくりまくりの試行錯誤の作業を続けました。

まず、シンプルにまとめられた設定ファイルサンプルがあるはずなのですが、記事内に埋め込まれているFTPへのリンクではどうしてもダウンロードすることができません。自分のインターネット環境の問題なのか何なのか悩んでいたところ、もう1つリンクを見つけました。wgetでhttpダウンロードしているじゃないですか。
# cd /usr/src
# wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.6.0.5.tar.gz
ありがたくダウンロードさせてもらい、自分の環境に合わせたある程度のカスタマイズをほどこし、ログデータとの格闘が始まりました。右往左往している過程を書いても仕方ないので、結論に関することだけ書きます。エラー情報に下記のようなラインを見つけました。
[Feb 15 17:31:10] WARNING[31980] chan_sip.c: Received response: "Forbidden" from
'"04xxxxxx72" <sip:1@192.168.y.y>;tag=as11c2fedb'
04xxxxxx72...実家の電話番号
192.168.y.y ... 実家のひかり電話ルーターのIP

「おやおや、sip:1@192.168.y.y っていうのが嫌がられてる?」と思い、ならば、その"1"ってのを定義している変数fromuser (sip.conf内)をいじくってみました。
[Feb 15 17:32:15] WARNING[32052] chan_sip.c: Received response: "Forbidden" from
'"04xxxxxx72" <sip:0004@192.168.y.y>;tag=as42991667'
ひかり電話側に登録されている認証ユーザー名に切り替えてもまだ同じエラーがでます。「そういえば、どこかで見た設定の書式で、ユーザ名:パスワード:認証ユーザ名@ という書式が用いられてたので、それに習って、fromuser=4:password:0004 なんてふうに書き換えてみました。

この一撃が効いたようで、発信・着信ともに問題なく行えるようになりました。とりあえず一安心。で、それが正しいのかどうか確認するためにVOIP-Info.org のAsterisk config sip.confに関して説明されているページで確認してみました。

Asterisk as a SIP client

In sip.conf under [general] add a register definition:

Format:
register => user[:secret[:authuser]]@host[:port][/extension]
or
register => fromuser@fromdomain:secret@host

悪くはなさそうなのですが、ちょっとちがうっぽいです。fromuserという変数の使い方としてはちょっとまずそうです。まあ、動いているのでとりあえずよしとしちゃいましょう。