インターネットで電話をかける VoIP の中で一番人気なのは Skype ですが、他にも色々方法があります。特に SIP が代表的な規格なようで、オフィスの電話もよく見たら SIP でした。電話というのはメッシュネットワークの最大のアプリだと思うので、週末 SIP の事を調べるために オープンソースの SIP サーバ Asterisk を試してみました。
Asterisk のインストール
サーバーには、さくら VPS で借りてる Ubuntu 10.04 LTS を使いました。インストールは超簡単で
$ sudo apt-get install asterisk
だけです。これでカーネルの構築から起動まで一挙に行われます。
Asterisk の設定
Asterisk を操作するには、CLI (コマンドラインインタフェース) を使います。CLI の起動には
$ sudo asterisk -vvvvvr
を実行します。v は好きなだけ沢山書きます。書けば書くほど表示されるデバッグ情報が増えます。ここでは、二台のパソコンの SIP クライアントでお互いに電話出来るようにします。もう一枚ターミナルを開いて、Ubuntu の場合 /etc/asterisk/sip.conf に次の行を追加しました。
[taro] ; ユーザ名 type=friend host=dynamic secret=passwd ; パスワード context=users deny=0.0.0.0/0 permit=71.93.115.0/255.255.255.0 ; クライアントの IP アドレス nat=yes ; 自宅から NAT で接続する時は yes [hanako] type=friend host=dynamic secret=passwd context=users deny=0.0.0.0/0 permit=71.93.115.0/255.255.255.0 nat=yes
それから CLI に戻って、以下のコマンドで設定ファイルを読み込みユーザの状態を表示します。
CLI> sip reload CLI> sip show peers
次に、お互いで通話可能にする為にダイヤルプランという物を作ります。ダイヤルプランの設定は /etc/asterisk/extensions.conf にあります。
[users] exten=>6001,1,Dial(SIP/taro,20) exten=>6002,1,Dial(SIP/hanako,20)
また CLI で読み込みします。読み込みのコマンドが違うので注意。
CLI> dialplan reload CLI> dialplan show users
これでサーバ側は完了です。
SIP クライアントの設定
パソコンで通話をかけるには SIP クライアントを使います。今回、次のソフトを使いました。
- Mac OS X : jitsi http://jitsi.org/
- Ubuntu : SLFPhone http://sflphone.org/
他にも、Ubuntu 標準の Empathy や Ekiga など色々ありますが、jitsi が一番簡単でした。もしも Empathy で SIP を使いたいなら telepathy-sofiasip を apt-get する必要があります。
上の設定で、taro と hanako というユーザを作りましたが、それぞれ SIP 名は「taro@サーバー名」、「hanako@サーバ名」のようになります。taro から hanako に電話するには、「taro@サーバ名」でログインして 6002 とダイヤルします。
終わりに
実験が終わったら念のため
sudo service asterisk stop
で Asterisk を落としておきました。
今回、Asterisk の雰囲気だけを試してみましたが、実際の動作原理もこれから調べたいです。なんとなく理解した所では、SIP というのは通信開始を通知するだけのプロトコルで、実際の通話はサーバを介さずクライアント間で GSM や speex 等の UDP パケットを直接送るようです。NAT を超える為には STUN という仕組みを使っています。昔私がネットの仕事をしていた時は NAT 超えというのはそれだけで大きな話題でしたが、今では普通に標準技術があるらしい。