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

 第20回第21回とAsteriskのインストールを解説した。当然だがインストールしただけの状態ではAsteriskはIP電話機のサーバーとして使うことはできない。そこで,AsteriskをIP電話のサーバーとして使うための最低限の設定を今回は説明する。

 これまで何度かAsteriskの設定についても解説してきたが,最も多い質問は「どこから始めればよいか分からない」というものである。今回は順を追って,Asteriskを一から立ち上げて実際に稼働させる方法を解説する。なお前回と前々回のインストール作業は終了されているものとして話を進めるので,まだの方はまずはインストールを。

どこから手をつければよいのか?

 Asteriskは設定ファイルの数がかなり多い。これは各機能やモジュールなどの各単位で設定ファイルを持っているためだ。ならば逆に考えてみよう。“設定ファイルがなければどうなるのか?”。試す方法は実に「簡単」である。設定ファイルを全て削除して起動してみればよい。

# cd /etc
# mv asterisk asterisk.bak
# mkdir asterisk

 これでAsteriskの設定ファイルは一切,なくなったことになる。この状態でAsteriskをフォアグランド起動してみれば何が起こるかを確認することができる。

# asterisk -U asterisk -G asterisk -vvvvvc
~略~
[Wait]
== Registered application 'Wait'
[WaitExten]
== Registered application 'WaitExten'
== Manager registered action DBGet
== Manager registered action DBPut
Asterisk Dynamic Loader Starting:
[Jun 24 22:12:53] WARNING[6177]: loader.c:750 load_modules: No 'modules.conf' found, no modules will be loaded.
Asterisk Ready.
*CLI>

 おやおや。ちゃんと起動してしまった。ではこれは使えるのかというと一切使えない。「Asterisk Ready.」の上に出ているメッセージ「WARNING[6177]: loader.c:750 load_modules: No 'modules.conf' found, no modules will be loaded.」に注目すると分かるが,「modules.conf」ファイルがないので一切のモジュールが読み込まれていない。確認してみよう。

*CLI> module show
Module   Description   Use Count
0 modules loaded

 ご覧の通り何のモジュールも読み込まれていない。Asteriskはモジュール化構造をとっており,各種機能はモジュールをロードすることで始めて提供される。モジュールを読み込むための設定ファイルである「module.conf」が存在しない場合,モジュールを一切読み込まれない。Asteriskは何の機能も使えないことになる。ただし,PBXコアに組み込み済みの機能は使用することができるため,下のようなメッセージが表示される。

[Wait]
== Registered application 'Wait'

この「Registered application」の一覧はコマンド・ライン・インタフェース(CLI)の core show applicationsというコマンドを使って確認することができる。それを表示したのが下記である。

*CLI> core show applications
-= Registered Asterisk Applications =-

Answer:Answer a channel if ringing
BackGround:Play an audio file while waiting for digits of an extension to go to.
Busy:Indicate the Busy condition
Congestion:Indicate the Congestion condition
ExecIfTime:Conditional application execution based on the current time
Goto:Jump to a particular priority, extension, or context
GotoIf:Conditional goto
GotoIfTime:Conditional Goto based on the current time
Hangup:Hang up the calling channel
ImportVar:Import a variable from a channel into a new variable
NoOp:Do Nothing
Progress:Indicate progress
ResetCDR:Resets the Call Data Record
Ringing:Indicate ringing tone
SayAlpha:Say Alpha
SayDigits:Say Digits
SayNumber:Say Number
SayPhonetic:Say Phonetic
Set:Set channel variable(s) or function value(s)
SetAMAFlags:Set the AMA Flags
SetGlobalVar:Set a global variable to a given value
Wait:Waits for some time
WaitExten:Waits for an extension to be entered
-= 23 Applications Registered =-

 ここに表示される23のアプリケーションはモジュールを読み込まなくても使えることになる。とはいえ,電話機を接続するためのモジュールや回線の定義が読み込まれていないため,このままではAsteriskはIP電話サーバーの用をなさない。

 電話機を接続するためには,sip.confやiax.confが必要となる。これらが存在しないためチャネル・ドライバが一切読み込まれていない。この状態では電話機を接続することができないという困った状況になっている。

 例えば呼制御プロトコルであるSIP(session initiation prptpcol)は「chan_sip.so」というモジュールによって提供されるが,このモジュールを強制読み込みさせようとすると次のようにエラーが発生する。

*CLI> module load chan_sip.so
[Jun 24 22:20:39] NOTICE[6177]: chan_sip.c:16385 reload_config: Unable to load config sip.conf

 SIPの設定ファイルsip.confが無いのでchan_sipがロードできない。

 さて,ここまで挙動を確認したので一旦,STOP NOWコマンドでAsteriskを停止させてみよう。

*CLI> STOP NOW
Beginning asterisk shutdown....
Executing last minute cleanups
Asterisk cleanly ending (0).