IP PBXを入れてみる

Asteriskを入れる

「ひかり電話」の料金の話の次にいきなりですが、IP PBXのAsteriskを入れます。
「やっぱりその話か」と思った人は半分アタリで半分ハズレです。(たぶん)

とりあえず今回の企画ではAsteriskが要になります。
アスタリスクというのは「*」のことです。2chのAAとかでケツの穴によく使われていることでお馴染みの記号です。
って、怒られそうなのでこちらです。

Asterisk Logo

Asteriskは2012年10月31日に次のLTS (2017年10月迄)となるAsterisk11がリリースされました。その前のLTS (2015年10月迄)は1.8系でStandard版(2013年12月迄)のAsterisk10系がリリースされています。
2012年11月現在でサポートされるのはこの3系統だけとなります。

では早速インストール。

FreeBSDでは2012年11月18日現在、Asterisk11のportsは未だありません。(2012年11月末net/asterisk11として公開されました。 )
1.8系がメインで10系が別に用意されています。サポート終了の1.4系のportsもなぜか残っていますが、こちらは流石にこれからインストールすることは無いと思われます。
Asteriskはメジャーバージョンが変わると設定項目のオプションや書き方が変わるなどして過去の情報や設定サンプル、スクリプトが役に立たなくなる部分があるのであまり最新を追いすぎない方が良いかもしれません。
今回はAsterisk1.8をインストールします。

AsteriskをSIPトランクのみで使う場合はDAHDIを入れる必要は無いと思います。例えばINS回線のトランクボードとか使う場合はDAHDIが要るかと思います。

DAHDIを入れる場合はAsteriskの前にDAHDIをインストールする必要があります。
入れるportsは/usr/ports/misc/dahdi-kmodになります。ただし、普通のportsのようにそのままmake isntallするとfatal errors encounteredとかになってコケるので前準備が要ります。(/usr/srcにFreeBSDのソースが展開されていることが前提となります)

まず、/usr/objを綺麗にします。
# cd /usr/obj
# chflags -R noschg *
# rm -rf *

次に/usr/share/mkをインストールします。
# cd /usr/src/share/mk
# make install

DAHDIをインストールします。
# cd /usr/ports/misc/dahdi-kmod
# make install

Asterisk1.8をインストールします。
# cd /usr/ports/net/asterisk
# make install

Asteriskの構成オプションを尋ねられるのでCURL,DAHDI(インストールしたなら),GSM,MYSQL(入れなくても可)あたりを選択するのが常識的な範囲での最小構成で後は欲しいなら足せば良いかと。

IVR(「○○なら[1]を△△なら[2]を押して下さい」みたいなメッセージ応答メニューのようなもの)も使ってみたいということであれば非常にありがたいことに日本語音声データが用意されているのでインストールします。

# cd /usr/ports/japanese/net/asterisk-sounds
# make install

/etc/rc.confに以下の2行を追記します。

dahdi_enable="YES"
asterisk_enable="YES"

Asterisk11のports公開と合わせて一部のportsが変更になっています。
これからAsteriskを導入する場合はAsterisk用のPerlモジュール(ports: misc/p5-Asterisk)も合わせてインストールすると良いでしょう。
ネット上で配布されているAGI(Asterisk Gateway Interface)のPerlスクリプトはこれがあること前提なのが多いので。

cd /usr/ports/misc/p5-Asterisk
make install

/usr/local/etc/asteriskに設定ファイルが入っています。
先ず、*-distとなっているファイルを退けます。(後で参照することもあるので)

# cd /usr/local/etc/asterisk
# mkdir dist
# mv ./*-dist ./dist/

設定ファイルの数が多いのと一つ一つのファイルが結構大きいので途方に暮れるかもしれません。
私の場合は取り敢えず*.confを全部消してvoip-info.jpさんから設定ファイルのサンプルを貰ってきて参考にしながら一つずつ書いていく方法を取りました。面倒だったらvoip-info.jpさんの設定ファイルに置き換えるだけで良いかもしれません。(試していません)

voip-info.jpさんの記事はLinux用ですがFreeBSDとLinuxはファイルの構成が違うのでasterisk.confだけはvoip-info.jpさんのサンプル設定上書きではなくFreeBSDのportsで入ったasterisk.confのPath設定を残した方が良いです。

/usr/local/etc/asterisk/asterisk.conf
astetcdir => /usr/local/etc/asterisk
astmoddir => /usr/local/lib/asterisk/modules
astvarlibdir => /usr/local/share/asterisk
astdbdir => /var/db/asterisk
astkeydir => /usr/local/share/asterisk
astdatadir => /usr/local/share/asterisk
astagidir => /usr/local/share/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
astsbindir => /usr/local/sbin

/usr/local/etc/asterisk/sip.conf
[general]
maxexpirey=3600
defaultexpirey=3600
registertimeout=300
context=default
dtmfmode=auto
udpbindaddr=0.0.0.0:5060
;tcpenable=yes
;tcpbindaddr=0.0.0.0:5060
;tlsenable=yes
;tlsbindaddr=0.0.0.0:5061
;tlscertfile=/usr/local/share/asterisk/keys/server.crt
;tlscafile=/usr/local/share/asterisk/keys/ca.crt
;tlscipher=ALL
;tlsclientmethod=tlsv1
srvlookup=yes
allowguest=no
disallow=all
allow=ulaw
allow=alaw
allow=gsm
language=ja
localnet=219.***.***.***/255.255.255.248 ;グローバルIPセグメント
localnet=192.168.0.0/255.255.255.0 ;プライベートIPセグメント
fromdomain = example.com

上の例のtcpenableの項目からのコメント8行は予備で後々TLSなどでセキュリティを強化する場合にコメントアウトします。
所有しているグローバルIPアドレスが少ない場合(上の例だと/29で8個)だとIPアドレスの割り振りがキツいことが多いので家庭内の内線電話やひかり電話ルーターはプライベートIPアドレスのネットワーク上でIPアドレスを割り振ってAsteriskのサーバーにNICを一枚追加してネットワークゲートウェイとして接続します。この構成はインターネット上の内線電話も繋げられます。(下図)

ネットワーク構成

Asteriskの起動

とりあえずOSを再起動すればDAHDI(インストールした場合)とAsteriskが立ち上がります。

OSを再起動するのが嫌でAsteriskのportsインストール後に手動でAsteriskを起動したいなら

# rehash     (初回のみ念の為に実行)
# /usr/local/etc/rc.d/dahdi start (DAHDIをインストールした場合)
# /usr/local/etc/rc.d/asterisk start

次はAsteriskの設定です。