言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Asterisk でインターネット電話

インターネットで電話をかける VoIP の中で一番人気なのは Skype ですが、他にも色々方法があります。特に SIP が代表的な規格なようで、オフィスの電話もよく見たら SIP でした。電話というのはメッシュネットワークの最大のアプリだと思うので、週末 SIP の事を調べるために オープンソースSIP サーバ Asterisk を試してみました。

やった事

  • インターネット上のサーバに Asterisk をインストール
  • 家にあるパソコン二台を 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 クライアントを使います。今回、次のソフトを使いました。

他にも、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 超えというのはそれだけで大きな話題でしたが、今では普通に標準技術があるらしい。