#author("2018-09-10T09:13:39+09:00","","") #author("2018-09-10T09:15:13+09:00","","") [[CentOS7]] *Asterisk13をインストール [#r98970b1] AsteriskとはオープンソースのIP-PBX。SIPサーバとも言いますが、要は一般的な電話の機能を提供するソフトウェアです。 *利用ポート(デフォルト) [#r15a17a9] -UDP 10000~20000 -UDP 5060 -UDP 4569 -TCP 5060~5061 &color(red){※厳密には空けなくてもよいポートもあるかもしれません。}; *Asteriskの導入 [#w2327fcb] 起動したらSSHで接続します。 「su」で"root"ユーザーになって作業します。 *Asteriskインストールの前準備 [#m65d3276] 以下のパッケージをインストールしておきます。 |BGCOLOR(black):COLOR(white):|c |[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| *Asterisk13のダウンロード [#l45f7fe4] Asteriskをwgetでダウンロードします。 |BGCOLOR(black):COLOR(white):|c |[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」のディレクトリが展開されました。 タイミングによってマイナーバージョンは異なるので以後のディレクトリは環境によって読み替えてください。 *さらに前準備 [#t01c6cca] Asterisk13系ではビルドで必要なパッケージを自動でとってくるスクリプトが用意されてます。(それでも結局configureでエラーが出て個別にパッケージいれる必要が出てきたりするのですが・・) |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# cd /usr/src/asterisk-13.22.0/contrib/scripts/| |[root@localhost ~]# ./install_prereq install| |[root@localhost ~]# ./install_prereq install-unpackaged| これで準備が整いました。 *configureする [#r2c60ebc] configureします。 |BGCOLOR(black):COLOR(white):|c |[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$$$$$$$$$.$$$$$$ $$$$$$$$$$$$$$$$. **ちなみに [#y9f56f04] configureでエラーが出る場合はパッケージが足りてない場合が多いです。内容をググって必要なパッケージを入れましょうよくあるエラーは[[AsteriskドキュメントのCommon Issues>http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/Installing_id294543.html]]にまとまってます。Amazon Linuxであれば上記リンクのCentOSを例にやれば大丈夫でしょう。 *makeする [#g57e7b87] 準備が整ったのでビルドします。結構時間かかります。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# make| 以下のメッセージが出れば成功です +--------- Asterisk Build Complete ---------+ + Asterisk has successfully been built, and + + can be installed by running: + + + + make install + +-------------------------------------------+ *make installする [#o878ce12] インストールします。 |BGCOLOR(black):COLOR(white):|c |[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 + +-------------------------------------------+ *起動設定 [#acde3a86] 設定ファイルの設定と自動起動スクリプトの生成をします。EC2だとこのtouchが必要です。やらないとmake configが失敗します。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# make samples| |[root@localhost ~]# touch /etc/redhat-release| |[root@localhost ~]# make config| *起動・停止の確認 [#a26756b1] ここまでできたらAsteriskが起動できることと停止できることを確認します。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# systemctl start asterisk| |[root@localhost ~]# systemctl stop asterisk| *Asteriskの初期設定 [#s7437c23] Asteriskの設定で特に重要なものはsip.confとextensions.confの2つです。この2つを設定してあげる必要があります。 -sip.conf --SIPサーバとしての設定を記載する --電話番号ごとの設定(内線番号、ログインパスワードなど)もここに記載する -extensions.conf --電話番号ごとの振る舞いを記載する。(電話を鳴らすとか、留守電に転送するとか) *元のファイルの退避 [#g9075fbe] まずは2つのファイルをコピーして退避しておきましょう |BGCOLOR(black):COLOR(white):|c |[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| *sip.confの設定 [#vff70481] 内線番号3001と3002を使うことを例にサンプルを記載します。1.8系の設定ファイルをベースにしているので要らない設定もあるかもしれませんが、とりあえずバージョン13でも動くことは確認しました。 |BGCOLOR(black):COLOR(white):|c |[root@localhost asterisk]# vi sip.conf| |[general] &br; maxexpirey=3600 &br; defaultexpirey=3600 &br; context=default &br; port=5060 &br; bindaddr=0.0.0.0 &br; srvlookup=yes &br; allowguest=no &br; disallow=all &br; allow=ulaw &br; allow=alaw &br; allow=gsm &br; language=ja &br; nat=yes &br; externip=xxx.xxx.xxx.xxx &color(lime){/ElasticIPで取得したグローバルIPを記載}; &br; localnet=172.xxx.xxx.xxx/255.255.255.0 &color(lime){/VPCのローカルサブネット範囲を記載}; &br; &br; [3001] &br; type=friend &br; defaultuser=3001 &br; secret=xxxxxxxx &color(lime){/パスワードを記載}; &br; canreinvite=no &br; host=dynamic &br; dtmfmode=rfc2833 &br; context=default &br; qualify=yes &br; callgroup=1 &br; pickupgroup=1 &br; mailbox=3001 &br; &br; [3002] &br; type=friend &br; defaultuser=3002 &br; secret=xxxxxxxx &color(lime){/パスワードを記載}; &br; canreinvite=no &br; host=dynamic &br; dtmfmode=rfc2833 &br; context=default &br; qualify=yes &br; callgroup=1 &br; pickupgroup=1 &br; mailbox=3002 &br; | 重要なのは"nat=yes"としているところとグローバルIPを指定しているところです。 これを設定しないとうまく動きません。 内線番号側に指定するパスワードはSIPクライアントから接続するときに使います。 *extensions.confの設定 [#tc10b2de] こちらは内線30XXについて電話できるように設定します。defaultセクションにviなどで追記してください。 |BGCOLOR(black):COLOR(white):|c |[root@localhost asterisk]# vi extensions.conf| |[default] &br; ; Local SIP phones 3000-3099 &br; exten => _30XX,1,GotoIf($["${USEVOICEMAIL}"="YES"]?use-vm) &br; exten => _30XX,n,Dial(SIP/${EXTEN}) &br; exten => _30XX,n,Hangup &br; exten => _30XX,n(use-vm),Dial(SIP/${EXTEN},30) &br; exten => _30XX,n,NoOp(${DIALSTATUS}) &br; exten => _30XX,n,GotoIf($["${DIALSTATUS}"="BUSY"]?vm-rec) &br; exten => _30XX,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?vm-rec) &br; exten => _30XX,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?vm-rec) &br; exten => _30XX,n,Hangup &br; exten => _30XX,n(vm-rec),Answer() &br; exten => _30XX,n,Wait(1) &br; exten => _30XX,n,Voicemail(${EXTEN}) &br; exten => _30XX,n,Hangup &br; | *Asteriskを起動 [#c4f0bbd7] sip.confとextensions.confを再読込するために起動しましょう。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# systemctl start asterisk| *Asterisk CLIに入る [#jdd38857] 以下のコマンドでCLIに入れます。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# asteirsk -vvvr| |Asterisk 13.22.0, Copyright (C) 1999 - 2014, Digium, Inc. and others. &br; Created by Mark Spencer <markster@digium.com> &br; Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. &br; This is free software, with components licensed under the GNU General Public &br; License version 2 and other licenses; you are welcome to redistribute it under &br; certain conditions. Type 'core show license' for details. &br; ============================================ &br; Connected to Asterisk 13.22.0 currently running on ip-172-xxx-xxx-xxx (pid = xxxxx) &br; ip-172-xxx-xxx-xxx*CLI> &br; | ちなみにオプションの「v」の数によってデバッグレベルが変わります。「-r」だとデバッグなし、「-vvvvvr」だと最大のデバッグレベルです。 この状態でコンソールを起動すると、SIPクライアント側でレジストや発信/着信が行われた場合に画面に表示されますのでデバッグでも使えます。 *SIPクライアントから通話してみる [#r8d88481] **SIPクライアントの選定 [#d640acad] SIPクライアントは、Windows、Mac、Linux、iOS、Androidなどあらゆるプラットフォームで出てます。 メジャーどころで私が使ったことのあるものだと以下があります -Zoiper -Linphone -CSipSimple -Sipdroid -X-Lite また、電話のテストをするには2台必要です(自動応答だけなら1台でもいいですが)。上記のSIPクライアントどれかインストールしてみてください。 *SIPクライアントの設定 [#m4fc8b37] SIPクライアントによって設定項目の名前は異なりますが、以下の3つを入力すればよいです。 -username(内線番号) --3001、3002 -password --sip.confで設定した内線番号ごとのパスワード -Domain、Host --サーバに付与されているグローバルIPアドレス うまくいけばログインが成功している旨が出るはずです。Asterisk CLIにもメッセージが出ていると思います。 ダメならCLIのメッセージを見てみましょう。メッセージが表示されないならネットワーク的に到達できていないと思われます。 *Zoiperの設定例 [#a59c6802] AndroidのZoiperでやった場合の設定例です。隠してあるところにはグローバルIPを入れましょう。 &ref(01.jpg); &ref(02.jpg); &ref(03.jpg); &ref(04.jpg); 「Account is ready」となっているのが成功している証拠です。 &ref(05.jpg); *電話をかけてみる [#y0b6bf8f] 3001から3002に電話をかけてみましょう。うまくいけばリンギングして、電話をとれば音声通話ができるはずです。ダメならメッセージを見てみましょう。ちなみに、うまくいかない場合はSIPクライアントを変えてみるのも手です。経験上SIPクライアントは相性問題があり、サーバの設定は問題なくてもSIPクライアントによって使えない場合があります。※ はじめはZoiperでなくLinphoneでやってたのですが、Android版のLinphoneでは着信できるけど発信できないという事象に遭遇しました。 3001から3002に電話をかけてみましょう。うまくいけばリンギングして、電話をとれば音声通話ができるはずです。ダメならメッセージを見てみましょう。ちなみに、うまくいかない場合はSIPクライアントを変えてみるのも手です。経験上SIPクライアントは相性問題があり、サーバの設定は問題なくてもSIPクライアントによって使えない場合があります。 ※ はじめはZoiperでなくLinphoneでやってたのですが、Android版のLinphoneでは着信できるけど発信できないという事象に遭遇しました。