フリー・エンジニア
高橋隆雄 フリー・エンジニア
高橋隆雄

2006年末にリリースされたAsterisk 1.4がマイナー・バージョンアップ。3月3日に1.4.1がリリースされたがその位置付けがあいまい。本格採用には次期バージョンアップを待った方がよさそうだ。

 前回はAsteriskを取り巻く最近の動向について解説したが,今回はAsterisk 1.4の新しい点,あるいは変わった点について見ていこう。Asteriskのバージョン1.4は,久々のメジャー・バージョン版である。それだけに,その機能などを知りたいという意見を多くいただいた。

・ちょっとがっかりなSLA

 去る3月3日,Asterisk 1.4.1がリリースされた。今回のリリースではセキュリティにかかわる修正と,SLA(shared line appearance,後述)が大幅に書き直されたそうである。

 SLAは,Asterisk 1.4から取り入れられた新機能の一つ。シェアード・ライン,すなわち共有ラインなので日本でいうところの「ライン・キー」実装が簡単にできるようになるのかと思われたが残念ながらそうではなかった。

図1●Asterisk 1.4に取り入れられた新機能SLA(shared line appearance)の概要
図1●Asterisk 1.4に取り入れられた新機能SLA(shared line appearance)の概要
複数電話機のラインを共有できるようにする。例えば3者通話などに使える。
 SLAの概要は図1の通りで,要するに複数の電話機が,あるラインを共有化して使うことができるというものである。例えば一つの電話機が占有して使う場合には,他の電話機はその通話に割り込むことはできないが,共有して使う場合には他の電話機が割り込んだり,あるいは3者通話(音声会議)ができる。

 ここだけ読むと,ライン・キーの機能がさらに豊富になったもののようにも受け取れるが,筆者はその実装方法には「がっかり」した。SLAは外線側の回線などから着信があると,まず最初に電話を“取って”しまう。着信した状態のままで着信した呼を待たせておいて,SLAに所属している電話機を一斉に呼び出し(ここはライン・キー的),最初に取った電話機と通話を開始させるのである。

 このためSLAをいきなり外線着信のために使用すると,誰もその通話を取らなくても電話をかけてきた相手には通話料金がかかってしまうことになる。日本ではおよそ考えられない実装になっている。おそらくこの機能は,シェアード・ラインの言葉通り,単にラインを共有するために実装されたのではないかと筆者は考えており,要するに通話中の会話に入ったり抜けたり,あるいはモニターしたりということがしやすいアメリカ的実装ではないかと思われる。

 いきなり外線着信を取ってしまうのを防ぐには,外線側がリング要求を出していることを通知し,着信側が電話を「取るであろう」ことが分かった時点でSLAを起動する,という方法も考えられる。だが,簡単には実装できそうもない。

 やはりライン・キーの機能は日本側で独自に実装しなければならず,待っていても解決はしないのかもしれない。ただし,このSLAの実装方法自体は興味深いものではある。アメリカ的と切り捨てるにはもう少し調査が必要だろう。うまく利用すれば,このSLAを改造することでライン・キーの機能を実現する糸口となるかもしれない。

・Google Talkが動作しない

 今回の目玉機能として挙げられるのは,やはり米グーグルのIM(インスタント・メッセンジャー)ソフトである「Google Talk」との接続だろう。筆者もこの機能に期待した一人だ。Google Talkと相互接続ができれば,IP電話機やWiFi電話機のユーザーとGoogle Talkユーザーとの間で通話できる。これは便利だ。

 だが,今のところ筆者はこの機能をうまく動作させられない。もし,通話に成功したという方がおられたら,ぜひとも筆者のWikiまで情報をお寄せいただきたい。筆者の見たところ,どうもこの不具合はNAT(network address translation)越えの問題ではないかと思う。そう思った理由を以下に示そう。

 AsteriskにおけるGoogle Talkに対応するための実装は二つの方法で実現している。Google Talkは「XMPP」(米ジャバーが開発したIMソフト「Jabber」のプロトコルを拡張したもの)を用いてシグナリングしているため,Asteriskは“res_jabber”で実装しているJabberチャネルを使ってこれと通信する。だが,実際の通話チャネルは“chan_gtalk”で実装されており,これは従来からのチャネル,“chan_sip”や“chan_iax”と同じである(図2)。

図2●Asterisk 1.4におけるGoogle Talkとの接続のための実装   図2●Asterisk 1.4におけるGoogle Talkとの接続のための実装
res_jabber,chan_gtalkの二つの方法で実現している。

 このように二つに分けて実装されているのは,AsteriskがGoogle Talk以外のJabberサーバーとも通信することができるように設計されているからだ。Google Talkではなく,Jabberを使ってもインスタント・メッセージの送受信などをしたり,あるいはユーザーのプレゼンス(在席状況)を確認することもできる。

 NAT越えが問題ではないかと筆者がアタリを付けている理由の一つは,Jabberによるシグナリングは一見するとうまくできているように見えるが,そのとき“chan_gtalk”,つまりGoogle Talk用の通話チャネルがアップしないためだ。これでは相手との接続はできるものの通話が成立しない。この現象が発生したのは,AsteriskがNAT対応機器の背後にあるかどうかではなく,通話先のGoogle TalkクライアントがNAT対応機器の背後にある場合に生じていたからだ。

 Google Talkで通話する際,Googleのサーバーを経由するのではなく,ピア・ツー・ピアで接続するため,NATの処理いかんでは,このような問題が発生することは十分に考えられる。実際,海外でもGoogle Talkのチャネルがうまく動かないという問題がWebサイトなどに報告されている。残念ながらGoogle Talkに接続する部分は,Asterisk 1.4.1でも更新はされていないようだ。