AsteriskとはオープンソースのIP-PBX。SIPサーバとも言いますが、要は一般的な電話の機能を提供するソフトウェアです。
※厳密には空けなくてもよいポートもあるかもしれません。
起動したらSSHで接続します。
「su」で"root"ユーザーになって作業します。
以下のパッケージをインストールしておきます。
[root@localhost ~]# yum -y update |
[root@localhost ~]# yum -y groupinstall 'Development Tools' |
[root@localhost ~]# yum -y install ncurses-devel |
[root@localhost ~]# yum -y install libuuid-devel |
[root@localhost ~]# yum -y install sqlite-devel |
[root@localhost ~]# yum -y install libxml2-devel |
Asteriskをwgetでダウンロードします。
[root@localhost ~]# cd /usr/src |
[root@localhost ~]# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz |
[root@localhost ~]# tar xvfz asterisk-13-current.tar.gz |
これで13系の最新バージョンをとってきます。
tarを解凍すると私の場合は「asterisk-13.22.0」のディレクトリが展開されました。
タイミングによってマイナーバージョンは異なるので以後のディレクトリは環境によって読み替えてください。
Asterisk13系ではビルドで必要なパッケージを自動でとってくるスクリプトが用意されてます。(それでも結局configureでエラーが出て個別にパッケージいれる必要が出てきたりするのですが・・)
[root@localhost ~]# cd /usr/src/asterisk-13.22.0/contrib/scripts/ |
[root@localhost ~]# ./install_prereq install |
[root@localhost ~]# ./install_prereq install-unpackaged |
これで準備が整いました。
configureします。
[root@localhost ~]# cd /usr/src/asterisk-13.22.0/ |
[root@localhost ~]# ./configure |
以下のようなアスキーアートがでれば成功です。
configure: Menuselect build configuration successfully completed .$$$$$$$$$$$$$$$=.. .$7$7.. .7$$7:. .$$:. ,$7.7 .$7. 7$$$$ .$$77 ..$$. $$$$$ .$$$7 ..7$ .?. $$$$$ .?. 7$$$. $.$. .$$$7. $$$$7 .7$$$. .$$$. .777. .$$$$$$77$$$77$$$$$7. $$$, $$$~ .7$$$$$$$$$$$$$7. .$$$. .$$7 .7$$$$$$$7: ?$$$. $$$ ?7$$$$$$$$$$I .$$$7 $$$ .7$$$$$$$$$$$$$$$$ :$$$. $$$ $$$$$$7$$$$$$$$$$$$ .$$$. $$$ $$$ 7$$$7 .$$$ .$$$. $$$$ $$$$7 .$$$. 7$$$7 7$$$$ 7$$$ $$$$$ $$$ $$$$7. $$ (TM) $$$$$$$. .7$$$$$$ $$ $$$$$$$$$$$$7$$$$$$$$$.$$$$$$ $$$$$$$$$$$$$$$$.
configureでエラーが出る場合はパッケージが足りてない場合が多いです。内容をググって必要なパッケージを入れましょうよくあるエラーはAsteriskドキュメントのCommon Issuesにまとまってます。Amazon Linuxであれば上記リンクのCentOSを例にやれば大丈夫でしょう。
準備が整ったのでビルドします。結構時間かかります。
[root@localhost ~]# make |
以下のメッセージが出れば成功です
+--------- Asterisk Build Complete ---------+ + Asterisk has successfully been built, and + + can be installed by running: + + + + make install + +-------------------------------------------+
インストールします。
[root@localhost ~]# make install |
以下のメッセージが出れば成功です
+---- Asterisk Installation Complete -------+ + + + YOU MUST READ THE SECURITY DOCUMENT + + + + Asterisk has successfully been installed. + + If you would like to install the sample + + configuration files (overwriting any + + existing config files), run: + + + + For generic reference documentation: + + make samples + + + + For a sample basic PBX: + + make basic-pbx + + + + + +----------------- or ---------------------+ + + + You can go ahead and install the asterisk + + program documentation now or later run: + + + + make progdocs + + + + **Note** This requires that you have + + doxygen installed on your local system + +-------------------------------------------+
設定ファイルの設定と自動起動スクリプトの生成をします。EC2だとこのtouchが必要です。やらないとmake configが失敗します。
[root@localhost ~]# make samples |
[root@localhost ~]# touch /etc/redhat-release |
[root@localhost ~]# make config |
ここまでできたらAsteriskが起動できることと停止できることを確認します。
[root@localhost ~]# systemctl start asterisk |
[root@localhost ~]# systemctl stop asterisk |
Asteriskの設定で特に重要なものはsip.confとextensions.confの2つです。この2つを設定してあげる必要があります。
まずは2つのファイルをコピーして退避しておきましょう
[root@localhost ~]# cd /etc/asterisk/ |
[root@localhost asterisk]# cp -p sip.conf sip.conf.bak |
[root@localhost asterisk]# cp -p extensions.conf extensions.conf.bak |
内線番号3001と3002を使うことを例にサンプルを記載します。1.8系の設定ファイルをベースにしているので要らない設定もあるかもしれませんが、とりあえずバージョン13でも動くことは確認しました。
[root@localhost asterisk]# vi sip.conf |
[general] maxexpirey=3600 defaultexpirey=3600 context=default port=5060 bindaddr=0.0.0.0 srvlookup=yes allowguest=no disallow=all allow=ulaw allow=alaw allow=gsm language=ja nat=yes externip=xxx.xxx.xxx.xxx /ElasticIPで取得したグローバルIPを記載 localnet=172.xxx.xxx.xxx/255.255.255.0 /VPCのローカルサブネット範囲を記載 [3001] type=friend defaultuser=3001 secret=xxxxxxxx /パスワードを記載 canreinvite=no host=dynamic dtmfmode=rfc2833 context=default qualify=yes callgroup=1 pickupgroup=1 mailbox=3001 [3002] type=friend defaultuser=3002 secret=xxxxxxxx /パスワードを記載 canreinvite=no host=dynamic dtmfmode=rfc2833 context=default qualify=yes callgroup=1 pickupgroup=1 mailbox=3002 |
重要なのは"nat=yes"としているところとグローバルIPを指定しているところです。
これを設定しないとうまく動きません。
内線番号側に指定するパスワードはSIPクライアントから接続するときに使います。
こちらは内線30XXについて電話できるように設定します。defaultセクションにviなどで追記してください。
[root@localhost asterisk]# vi extensions.conf |
[default] ; Local SIP phones 3000-3099 exten => _30XX,1,GotoIf($["${USEVOICEMAIL}"="YES"]?use-vm) exten => _30XX,n,Dial(SIP/${EXTEN}) exten => _30XX,n,Hangup exten => _30XX,n(use-vm),Dial(SIP/${EXTEN},30) exten => _30XX,n,NoOp(${DIALSTATUS}) exten => _30XX,n,GotoIf($["${DIALSTATUS}"="BUSY"]?vm-rec) exten => _30XX,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?vm-rec) exten => _30XX,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?vm-rec) exten => _30XX,n,Hangup exten => _30XX,n(vm-rec),Answer() exten => _30XX,n,Wait(1) exten => _30XX,n,Voicemail(${EXTEN}) exten => _30XX,n,Hangup |
sip.confとextensions.confを再読込するために起動しましょう。
[root@localhost ~]# systemctl start asterisk |
以下のコマンドでCLIに入れます。
[root@localhost ~]# asteirsk -vvvr |
Asterisk 13.22.0, Copyright (C) 1999 - 2014, Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ============================================ Connected to Asterisk 13.22.0 currently running on ip-172-xxx-xxx-xxx (pid = xxxxx) ip-172-xxx-xxx-xxx*CLI> |
ちなみにオプションの「v」の数によってデバッグレベルが変わります。「-r」だとデバッグなし、「-vvvvvr」だと最大のデバッグレベルです。
この状態でコンソールを起動すると、SIPクライアント側でレジストや発信/着信が行われた場合に画面に表示されますのでデバッグでも使えます。
SIPクライアントは、Windows、Mac、Linux、iOS、Androidなどあらゆるプラットフォームで出てます。
メジャーどころで私が使ったことのあるものだと以下があります
また、電話のテストをするには2台必要です(自動応答だけなら1台でもいいですが)。上記のSIPクライアントどれかインストールしてみてください。
SIPクライアントによって設定項目の名前は異なりますが、以下の3つを入力すればよいです。
うまくいけばログインが成功している旨が出るはずです。Asterisk CLIにもメッセージが出ていると思います。 ダメならCLIのメッセージを見てみましょう。メッセージが表示されないならネットワーク的に到達できていないと思われます。
AndroidのZoiperでやった場合の設定例です。隠してあるところにはグローバルIPを入れましょう。
「Account is ready」となっているのが成功している証拠です。
3001から3002に電話をかけてみましょう。うまくいけばリンギングして、電話をとれば音声通話ができるはずです。ダメならメッセージを見てみましょう。ちなみに、うまくいかない場合はSIPクライアントを変えてみるのも手です。経験上SIPクライアントは相性問題があり、サーバの設定は問題なくてもSIPクライアントによって使えない場合があります。
※ はじめはZoiperでなくLinphoneでやってたのですが、Android版のLinphoneでは着信できるけど発信できないという事象に遭遇しました。