Wireshark でパケットの解析

Wireshark というオープンソースのパケット解析ソフトでAsterisk とIP電話間のパケットを調べてみます。

Wireshark はhttp://www.wireshark.org/ からダウンロードできます。

パケットのキャプチャ

Asterisk は Linux 上で動作しているので、その上で tcpdump コマンドでUDP 5060ポートをキャプチャしておいて、IP電話で通話することで、Asterisk の SIPシーケンスを確認できます。

# /usr/sbin/tcpdump -s 65000 -w dump.cap udp port 5060

Wireshark で解析

Wireshark で上記のキャプチャして出力ファイルの dump.cap を読み込みます。

メニュー File -> Open で dump.cap を指定し、開くと下記のような画面が表示されます。
時系列にどこからどこへどんなやりとりが行われたかが一目瞭然です。

さらに、VoIP による通話に限定することもできます。

メニュー Telephony_ -> VoIP Calls を開くと VoIP による通話一覧が表示され、さらに Flow ボタンをクリックすると、下記のようにグラフィカルなシーケンスを確認することができます。

tcpdump と Wireshark があれば、いろいろネットワークのトラブル原因を調べるのに役立ちそうです。

参考:
http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tmorita-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4274066835

以上です。

BaresipをUbuntuで使用する(その3)

前回は、Baresip のオーディオ関連の設定を行い、通話の準備ができました。今回は、Asterisk <-> Baresip 間の双方向コミュニケーションが動作するかを確認するために、エコーテスト(Echo アプリケーション)という機能を利用します。

また、Echo アプリケーションは、チャネルから読み出したオーディオをそのまま書き出す(エコー)アプリケーションです。Asterisk端末間の遅延と音質をテストするために用いることが出来ます。

8001 をダイアルするとエコーテストが実行されるようにAsterisk のダイアルプランを作成します。

1. extensions.conf の修正

extensions.conf に 8001 がダイアルされた時の処理を記述します。

$ sudo vi /etc/asterisk/extensions.conf
[globals]
; グローバルで 8001 を変数に定義
ECHO_TEST=8001
... 省略 ...
[default]
; エコー テスト : 8001 がダイアルされた処理
exten => ${ECHO_TEST},1,Answer
exten => ${ECHO_TEST},n,Wait(1)
exten => ${ECHO_TEST},n,Playback(demo-echotest)
exten => ${ECHO_TEST},n,Playback(beep)
exten => ${ECHO_TEST},n,Echo
exten => ${ECHO_TEST},n,Playback(demo-echodone)
exten => ${ECHO_TEST},n,Playback(vm-goodbye)

保存します。

2. ダイアルプランの再読み込み

extensions.conf の修正を終えたら、Asterisk を再起動して新しいダイアルプランを読み込ませます。

$ sudo service asterisk restart

または、
Asterisk CLI(コマンドラインインターフェース)からは、

hostname*CLI> dialplan reload

3. Baresip からダイアル

では、Baresip でエコーテストをやってみます。

Baresip を実行します。

# baresip
baresip v0.4.1 Copyright (C) 2010 - 2011 Alfred E. Heggestad
auprec: PCMA 8000Hz 1ch
auprec: PCMU 8000Hz 1ch
ausrc: alsa
auplay: alsa
medianat: stun
medianat: turn
medianat: ice
Populated 2 audio precs
Populated 0 video precs
Populated 0 audio filters
Local IP address: IPv4=eth0:192.168.1.3 IPv6=:::1
dl: mod: /usr/local/lib/baresip/modules/uuid.so (/usr/local/lib/baresip/modules/uuid.so: cannot open shared object file: No such file or directory)
conf: module uuid.so: No such file or directory
uuid: uuid_load: No such file or directory
ua: 2001@192.168.1.100
Populated 1 account
Populated 1 contact
2001@192.168.1.100: 200 OK () [1 binding]
ui: All 1 useragents registered successfully! (79 ms)

次に、8001 をダイアルします。ダイアルするには、キーボードの D をタイプします。すると、Baresip のコンソールにカーソルがブリンク表示され、次のようになります:

>             ■

ここで 8001 をタイプし、 続けてEnter キーをタイプします。

>         8001■
connecting to 'sip:8001@192.168.1.100'..
SIP Progress: 100 Trying ()
Set audio enprer: PCMU 8000Hz 1ch
Set audio deprer: PCMU 8000Hz 1ch
Enable telephone-event: pt_tx=101, pt_rx=101
video stream is disabled..
2001@192.168.1.100: Call established: sip:8001@192.168.1.100
main: long async blocking: 124>100 ms (h=0x3a569b arg=0x9db33c8)

ここで、英語のメッセージが聞こえてきます。
you are about to entering echo test….

エコーテストを終了するには、# を入力します。

4. まとめ

以上で、 Baresip のビルド、インストールと実行まで確認しました。Baresip の他にもオープンソースのソフトフォンはありますが、CUIであり、デーモンとして動作させることが可能です。

つまり、状況によっては、PCの起動と同時にバックグラウンドで Baresip を動かしておいて、着信がきたら自動応答で通話を開始することができます。

プライバシーの点からすると好ましくありませんが、寝たきり状態や手の不自由な場合など、ハンディーキャップがあるに対してコミュニケーションの手段を提供することが出来ます。

ハードフォン(IP電話機)にも自動応答機能がついているものもあります*。電話専用でなく、他機能を含むデバイスに通話機能を持たせるなどには便利なソフトだと思います。

Baresip を自動応答にするには .baresip/accounts を以下のようにアカウントの後ろに “;answermode=auto” を付加します。

$ vi .baresip/accounts
<2001:1234@192.168.1.100>;answermode=auto

BaresipをUbuntuで使用する(その2)

前回は Ubuntu に Baresip を入れてアカウント設定までしました。

通話をするためにはオーディオの入出力が出来なければなりません。私の Ubuntu 10.04 には ALSA オーディオドライバーが入っていますので、それを使用するようにします。

もう1点、動作確認していて気づきました。Baresip は ALSA をサポートしますが、ビルド時に ALSA のヘッダーファイル等が入っていないと ALSA 用のオーディオ ドライバー モジュールをビルドしてくれません。そこで libasound2-dev パッケージをインストールしてから、Baresip をビルドする必要がありました。

$ sudo apt-get install libasound2-dev

この後に、前回の手順で Baresip をビルドしてインストールしてください。

1. .baresip/config の修正

ホームディレクトリに移動して、.baresip/config ファイルを開き、ALSA オーディオ ドライバー モジュールを使用するように構成を変えます。

$ vi .baresip/config
# Audio driver Modules
#module oss.so
module alsa.so
#module portaudio.so
#module gst.so

上記のように oss.so の行頭に # を挿入してコメントアウトして、alsa.so の行頭の # を取り除きます。 修正ができたら保存します。

2. alsamixer でオーディオの確認

使用するPCによってはマイク入力がミュートされている場合がありますので、alsamixer で確認しておきます。

$ alsamixer

「録音」が 0 になっていないことを確認してください。

3. 通話

これで通話ができる状態になりました。しかし、通話するには相手の電話機か、もしくはもう1台PCがなければなりません。

用意するのが面倒なので、Asterisk が持っている「エコーテスト」という機能で音声がとおるか確認しましょう。

ということで、次回へ続く。。

BaresipをUbuntuで使用する

Baresip – 「Baresip はポータブルで組み立て式のオーディオとビデオをサポートしたSIP ユーザーエージェントです」とサイトの英語を直訳してみました。

簡単にいうと SIP ソフトフォンで以下のモジュールで構成されています

  • libre – SIPスタック他リアルタイム コミュニケーションをサポートするライブラリ
  • librem – オーディオ・ビデオ サポートライブラリ
  • baresip – SIP ユーザーエージェント

通話の際にユーザーインターフェースとなるのは baresip です。インストール可能なパッケージはないので、ソースをダウンロードしてビルドする必要があります。

0. 準備

  • Asterisk サーバー
IP アドレス: 192.168.1.100
sip.conf (抜粋):
[2001]
context=default
defaultuser=2001
secret=1234
...省略...

参考: http://samples.northwind.mydns.jp/home/asterisk/asterisk5steps

1. ソースのダウンロード

上記3つのモジュールのソースを下記より取得してきます。

http://www.creytiv.com/pub/

$ wget http://www.creytiv.com/pub/baresip-0.4.1.tar.gz
$ wget http://www.creytiv.com/pub/re-0.4.1.tar.gz
$ wget http://www.creytiv.com/pub/rem-0.4.1.tar.gz

2. libre ライブラリのビルド

$ tar zxvf re-0.4.1.tar.gz
$ cd re-0.4.1
$ make
$ sudo make install
$ sudo ldconfig

3. librem ライブラリのビルド

 $ tar zxvf rem-0.4.1.tar.gz
$ cd rem-0.4.1
$ make
$ sudo make install
$ sudo ldconfig

4. baresip のビルド

$ tar zxvf baresip-0.4.1.tar.gz
$ cd baresip-0.4.1
$ make
$ sudo make install

ビルドとインストールは以上です。一度、動かしてみます。

5. baresip の実行

$ baresip
baresip v0.4.1 Copyright (C) 2010 - 2011 Alfred E. Heggestad
conf: creating config template /home/<user>/.baresip/config
auprec: PCMA 8000Hz 1ch
auprec: PCMU 8000Hz 1ch
ausrc: oss
auplay: oss
medianat: stun
medianat: turn
medianat: ice
Populated 2 audio precs
Populated 0 video precs
Populated 0 audio filters
Local IP address: IPv4=eth0:192.168.1.3 IPv6=:::1
dl: mod: /usr/local/lib/baresip/modules/uuid.so (/usr/local/lib/baresip/modules/uuid.so: cannot open shared object file: No such file or directory)
conf: module uuid.so: No such file or directory
uuid: uuid_load: No such file or directory
conf: creating configuration template /home/<user>/.baresip/accounts
ua:<user>@domain
Populated 1 account
conf: creating contacts template /home/<user>/.baresip/contacts
Populated 1 contact
ua:<user>@domain: Register: Destination address required

アカウントがないなどエラーが出てきます。キーボードの ‘Q’ をタイプすると終了します。

6. アカウントの設定

一度 baresip を実行すると、ホームディレクトリに accounts ファイルが作成されます。これにSIPアカウントとサーバーを設定します。

$vi /home/<user>/.baresip/accounts
# SIP accounts - one account per line
#
# Displayname ;addr-params
#
# uri-params:
# ;transport={udp,tcp,tls}
#
# addr-params:
# ;outbound=sip:primary.example.com
# ;regint=3600
# ;sipnat={outbound}
# ;auth_user=username
# ;medianat={stun,turn,ice}
# ;rtpkeep={zero,stun,dyna,rtcp}
# ;stunserver=stun:[user:pass]@host[:port]
# ;mediaenc={srtp,srtp-mand}
# ;answermode={manual,early,auto}
# ;ptime={10,20,30,40,...}
# ;audio_precs=speex/16000,pcma,...
# ;video_precs=h264,h263,...
#
# Examples:
#
# <sip:user:secret@domain.com;transport=tcp>
# <sip:user:secret@1.2.3.4;transport=tcp>
# <sip:user:secret@[2001:df8:0:16:216:6fff:fe91:614c]:5070;transport=tcp>
#
<sip:<user>:<user>@domain>

0. 準備 で用意した Asterisk サーバーのアカウント設定で、上記のファイルの最終行を以下のように編集します。

<sip:2001:1234@192.168.1.100>

ファイルを保存して、baresip を実行します。

$ baresip
baresip v0.4.1 Copyright (C) 2010 - 2011 Alfred E. Heggestad
auprec: PCMA 8000Hz 1ch
auprec: PCMU 8000Hz 1ch
ausrc: oss
auplay: oss
medianat: stun
medianat: turn
medianat: ice
Populated 2 audio precs
Populated 0 video precs
Populated 0 audio filters
Local IP address: IPv4=eth0:192.168.1.3 IPv6=:::1
dl: mod: /usr/local/lib/baresip/modules/uuid.so (/usr/local/lib/baresip/modules/uuid.so: cannot open shared object file: No such file or directory)
conf: module uuid.so: No such file or directory
uuid: uuid_load: No such file or directory
ua: 2001@192.168.1.100
Populated 1 account
Populated 1 contact
2001@192.168.1.100: 200 OK () [1 binding]
ui: All 1 useragents registered successfully! (77 ms)

これで、baresip の設定はとりあえず終わりです。
通話してみましょう。

次回へ続く。。。

Grandstream電話機とAsterisk

Grandstream の電話機を評価する機会があったので Asterisk と使用したときの雑記です。あくまでも個人の感想です。

左から:
GXP1400
GXP280
GXP2100

 

 

 

 

 

OLIO SPEC の GS-L11 に CentOS 5.7 と Asterisk 1.4.43 をインストールして動作させました。GS-L11 に CentOS と Asterisk のインストールは特に問題なく行えました。

それぞれの電話機に番号を割り当て Asterisk にレジストし内線通話の検証。

GXP280 は受話器を耳に当てたときに「さー」というノイズらしき音がすることにすぐ気づきました。 GXP2100 で確認するとこちらは気になる音はせず、GXP1400 はわずかに「さー」という音がはいってきます。

通話は会話がとぎれるような感じがときどきします。ぶちぶちと途切れるのわけではないのですが、ある程度しゃべり続けていると「すうっ」と無音になりそうな感じで、通話していて違和感を感じるときがありました。このあたりの感覚の説明がうまく表現できません。上記写真に白い電話機の1部分が写っているのは SANYO SIP-2100 です。同じ設定でもこちらの電話機ではまったく違和感を感じることはないのですが。

受話器を置いた感じが悪いです。受話器をおいたつもりでもフックされてないようなとき(通話がきれていない)があります。「ガチャッ」とすこし力を入れて受話器を置いたほうが確実です。

電話機のボタンは英語表記。液晶に表示される文字は日本語切り替えがありました。

天気、株価、通貨情報を取得する機能もついてました。定期的に情報を更新するようになっていました。

転送は「Transfer」ボタンではブラインド転送(アンアテンドモード転送?)になりますので、 Asterisk 側の設定で「#」をアテンドモード転送に設定しました。

着信するとスピーカーフォンで通話ができる「自動応答機能」もありました。Webブラウザからの管理画面で設定可能です。使用者の状況によってこの機能は便利です。