iPhoneをIP電話として使う! | 雲の上はいつも青空

雲の上はいつも青空

不思議な経歴をもつエンジニア!?の徒然なブログです。
お仕事関係の話が多いと思いますが、コメントとかもらえると中の人はとても喜びます(^O^)/

携帯電話が壊れてしまい(音声が聞こえなくなった)、SoftBankショップへ行ってきました。
なにやら記憶がおぼろげなのですが、帰宅したら手元にiPhoneがありました。 謎ですww

自宅にはAsteriskで構築したIP電話のシステムがあるのですが、このシステムへiPhoneを接続させるべくiPhone上で動くソフトフォンを探し始めました。
初めはGoogleで検索していたのですが、なかなか良いのが見つからず、Twitterでつぶやいたところ、すぐにWiFoneというソフトを紹介してもらいました。

もちろん有料(800円)ですが、使ってみて驚きました。$雲の上はいつも青空-Wifone
理由1:IAX2とSIPの両方が使える。
理由2:iPhoneに内蔵されている連絡帳が使える。
理由3:複数のアカウントが登録出来る。
理由4:Softbankの3Gネットワーク上からも使える。


もう理由1と理由4だけで、このソフトウェアの価値が解ります。
前にも書きましたが、インターネットの向こう側にいるSIP端末からの通信を、FW(ファイアーウォールやルータ)を越して、内部のAsterisk(IP PBX)へ接続することはさほど難しいことではありません。
しかし、SIPでやり取りして決定したRTP(音声データを流すプロトコル)のポート番号が動的に決まるので、このRTP用のインバウンド接続の制御が厄介です。
もちろん、FWやルータがSIPの通信を理解して、RTPが使うポートを動的にオープンしてくれればよいのですが、そのような機器はまだほとんどありません。
結局、RTPで使う範囲をすべてオープンするという乱暴な手段を取ることになります。
※これがSIPを使ってグローバルから接続するのが嫌いな理由です。

しかし、IAX2というプロトコルを使うと、1つのプロトコルで端末とサーバ間の制御情報と音声データを両方同じポートに流すので、たった一つのポートを開いておくだけで、インターネットの向こう側にいるIAX2端末とAsteriskは接続することが可能となります。

LAN内にAsteriskがいる場合、例えばYAMAHAルータの場合、以下のフィルターを書くだけで、インターネットからの接続が可能となります。
nat descriptor type 1 masquerade
nat descriptor masquerade static 1 1 192.168.0.151 udp 4569

※192.168.0.151の所にLAN内にいるAsteriskサーバのアドレスを書く。


iPhoneには無線LANに接続する機能あり、これは通常のSoftbankの携帯通信網より優先して使われるように設計されています。
つまり、IDパスワードを入力し無線LANに接続した状態になると、携帯電話としての音声通信以外(インターネットへの接続等)は、無線LAN経由となります。この状態で、WiFoneは無線LAN(自宅もしくは、会社や公衆無線LAN)を使い、自宅内では直接、お外ではインターネットを経由して自宅のAsteriskへ接続します。

次に、無線LANに接続できない場合には、Softbankの携帯通信網(3Gネットワーク)からインターネットへ出て、それから自宅のAsteriskへ接続します。
さらっと書きましたが、実はこれって凄いことです。

・無線LAN経由で自宅のAsteriskへ接続。
・3Gネットワーク経由で自宅のAsteriskへ接続。
→自宅のAsteriskより公衆電話網や携帯電話網へ発信。

無線LANは実質通信費は無料、3Gネットワーク経由の場合もWiFiバリュープラン専用パケット定額に入ると、月4,410円で使い放題になります(海外での利用は定額にはならない)。

つまりiPhoneから発信する場合、携帯電話としての通話料が実質かからないという事になります。
これは裏技とかイリーガルな方法ではないようですが、実のところは解りません。

$雲の上はいつも青空-電話iPhone用のソフトフォンを開発しているエンジニアの方とTwitterでやりとりして解ったことは…
・つい最近(2か月前位)まで、3Gネットワークを使い、IAX2やSIPで接続するソフトは作れなかった。
・何らかの制限が緩和され、使えるようになった。
・積極的にアナウンスしていないが、3G対応とうたったソフトフォンが公式のApp Storeで販売されている。
『Softbankは積極的には公言していないが、実質的には認めている。』というのが業界関係者の認識のようです。

肝心の音質ですが、3Gネットワーク経由の場合、携帯電話よりは落ちますが何とか使えるレベルだと思います。もちろん高速の無線LAN環境下では、まったく普通に使えます。

iPhoneですが、もっと早くに購入すべきだったと後悔しています。
これは、本当に素晴らしいデジタル携帯機器だと思います。

追記 2010/03/14
iPhoneをAsteriskに接続(レジスト)した時のTipsです。
SIPを使った時は問題ありませんが、IAXを使って接続した時に、WiPhoneではCallerIDをつけていないようで、着信側に内線番号がちゃんと表示されません。

とりあえず、Asteriskのextension.confで対応しました。
iPhone用のextensionを独立して作成します(もと使ってたのをコピー後、context名を変更)。
このextensionの内線通話の部分に一行追加します。

【修正前】
exten => _2XX,1,Dial(SIP/${EXTEN}&IAX2/${EXTEN},120,tT)
exten => _2XX,n,Congestion


【修正後】
exten => _2XX,1,Set(CALLERID(num)=208) ←iPhoneの内線番号
exten => _2XX,n,Set(CALLERID(name)=208)
exten => _2XX,n,Dial(SIP/${EXTEN}&IAX2/${EXTEN},120,tT)
exten => _2XX,n,Congestion


もちろん、iax.confのcontextを直すのを忘れないように…
※開発元にはバグレポート送っておきます。