【Debian】Asteriskで内線電話環境構築

とりあえず実験。

スポンサーリンク

Asteriskのインストール

Raspberry Pi をPBX化します。
RasPBXという専用のディストリもあるみたいですが、現在内向きDNSとして稼働中なのでRaspbianのままPBX化します。
せっかくAsteriskがパッケージ化されてるのでそれを使います。

$sudo aptitude install asterisk

インストール中に ITU-T telephone code をきかれます。いわゆる国別割り当て番号で、国際電話の時に頭につける2桁の番号ですね。日本は 81 になります。
タイトルに【Debian】とかついてますが、Debianっぽいのはここまで。

Astersikの設定

/etc/asterisk 見たら *.confがなんかいっぱいあって困った。
使いこなすのは結構大変そう。

どうも sip.conf と extensions.conf をいじるみたいです。
で、開いてみたところ。

; Note: Please read the security documentation for Asterisk in order to
; understand the risks of installing Asterisk with the sample
; configuration. If your Asterisk is installed on a public
; IP address connected to the Internet, you will want to learn
; about the various security settings BEFORE you start
; Asterisk.

きちんと読んでセキュリティちゃんとしないとダメよ。と書いてあります。ごもっとも。
で、このファイルだけで 1300行超。。。めんどくさ。

sip.confの設定

ごちゃごちゃしてるので全部消して書き直しました。

generalセクション

まずは全体設定になります。

[general]
context=default
port=5060
binaddr=0.0.0.0
disallow=all
allow=ulaw
allow=alaw
allow=gsm

context=default
extensions.conf 内に定義されるコンテキストと関連付いてます。

port=5060
SIPサーバで使うudpポートです。
デフォルト5060なので、特に理由がなければそのままにしておきます。

binaddr=0.0.0.0
レジストを受け付けるアドレスです。デフォルト 0.0.0.0 (any) になっているので、特に理由がなければそのままにしておきます。
たとえば 192.168.0.0/24 のみに絞りたければ、
binaddr=192.168.0.0/255.255.255.0
みたいに書くようです。

disallow=all
allow=ulaw
allow=alaw
allow=gsm

コーデックの設定になります。最初にすべて無効にしてから、使うコーデックを並べます。

各番号の設定

[01]
type=friend
username=01
secret=pass
canreinvite=no
host=dynamic

[02]
type=friend
username=02
secret=pass
canreinvite=no
host=dynamic

[03]
type=friend
username=03
secret=pass
canreinvite=no
host=dynamic

内線番号 01-03 を設定しています。

type=friend
user -> 発信専用
peer -> 着信専用
friend -> 発着信

username
SIPクライアントがSIPサーバに接続する際に使用するユーザ名です。別になんでもいいと思いますが、番号にしておきます。

secret=pass
SIPクライアントがSIPサーバに接続する際に使用するパスワードです。

canreinvite
Asteriskが音声ストリーム(RTPパケット)を中継するかどうかを指定します。

host
内線番号に対するIPアドレス(ホスト名)を指定します。我が家の無線LANはDHCP割り当てになっているので、dynamicにしました。

ということで、sip.conf は以下のようになります。

[general]
context=default
port=5060
binaddr=0.0.0.0
disallow=all
allow=ulaw
allow=alaw
allow=gsm

[01]
type=friend
username=01
secret=pass
canreinvite=no
host=dynamic

[02]
type=friend
username=02
secret=pass
canreinvite=no
host=dynamic

[03]
type=friend
username=03
secret=pass
canreinvite=no
host=dynamic

extension.confの設定

extensions.conf では発着信時の動作を定義します。この発着信時の動作はダイヤルプランと呼ばれています。

general セクションの設定

[general]
static=yes
writeprotect=no
clearglobalvars=no

static=yes
writeprotect=no
この設定をしておくと、コマンドラインインタフェースから”dialplan save”コマンドを実行した場合に、ダイアルプランの上書き保存ができるようです。インストール時のデフォルトで明示的に設定されていますので、そのまま残しておくことにします。

clearglobalvars=no
yesにしておくと、asteriskまたはextensionをreloadした際に、グローバル変数がクリアされ、元の値に戻ってしまうようです。インストール時のデフォルトで明示的に設定されていますので、そのまま残しておくことにします。

globals セクションの設定

[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2
TRUNKMSD=1

グローバル変数の設定みたいです。ここも基本的にはインストール時のデフォルトで設定されているものをそのまま残しています。設定値の意味などは後で調べます。

コンテキストの設定

[default]
exten => 01,1,Dial(SIP/01,60)
exten => 01,2,Congestion

exten => 02,1,Dial(SIP/02,60)
exten => 02,2,Congestion

exten => 03,1,Dial(SIP/03,60)
exten => 03,2,Congestion

sip.conf で context= に設定した値と紐付いています。実際の発着信時の制御はここに記述します。
ワイルドカードなども使えますが、それぞれの内線番号に対して、動作を定義しました。
exten => 番号, プライオリティ, 動作
という記述方法になっています。

この設定では、着信があった場合まずプライオリティ値1の動作をします。

exten => 03,1,Dial(SIP/03,60)
SIP端末(ここでは内線番号03)を60秒間鳴らします。もしこの間に電話を取った場合は、そのまま通話が可能になります。
60秒経過後、誰も電話をとらない場合は、プライオリティ値2の動作に移ります。

exten => 03,2,Congestion
Congestion は発信側が切るのを待ちます。発信側が切るまでは、切断音が流れます。

Busy とか Voicemail とか、色々できるようなので、少しづつ設定増やしていく予定です。

ここまでの設定をまとめると、extensions.confはこんな感じになります。

[general]
static=yes
writeprotect=no
clearglobalvars=no

[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2
TRUNKMSD=1

[default]
exten => 01,1,Dial(SIP/01,60)
exten => 01,2,Congestion

exten => 02,1,Dial(SIP/02,60)
exten => 02,2,Congestion

exten => 03,1,Dial(SIP/01,60)
exten => 03,2,Congestion

ここまでで、ネットワーク内のPCにSIPクライアントをインストールするなどすればPC同士で音声通話ができるようになるはずです。

$asterisk -vvvr

で Asterisk のCLIに入れます。v オプションで verbosity を制御します。
つまりオプションに v を重ねるとデバッグログがたくさん出るようになります。

とりあえず SIP クライアントが接続できることを確認するには v 3つです。

CLIに入ったらまず設定を反映させるため、reload コマンドを発行します。
sip show users コマンドで、ユーザ名 01~03 が表示されたのでとりあえずOK。

Username                   Secret           Accountcode      Def.Context      ACL  ForcerPort
01                         pass                              default          No   Yes
03                         pass                              default          No   Yes
02                         pass                              default          No   Yes

SIPクライアントを登録すると、
-- Registered SIP '01' at 192.168.xxx.xxx:5060
みたいなログが出力されます。

ちなみに、このRasPiは内向きDNSのほかに、外から乗り込んできて各種PCにマジックパケットを投げてWOLで起動させたりとか、トラフィックの計測とか、色々役目があったので別セグメントにいたのですが、セグメントが違うとSIPサーバーにレジストできなかったので、とりあえず同じセグメントに移設しました。

とはいえ、色々弊害が出てしまうので別セグメントからでもSIPサーバーに登録できるようにごにょごにょしてみる予定です。

つーか色々やらせすぎなので、cuBoxかBeagleBoneかRasPi買い足してもいいかもですね。

※NetattestとかInfobloxも触ってみたいのですが

スポンサーリンク

フォローする