Asteriskを利用するとIP電話内線網構築といった数十万する初期費用をぐぐっと安く抑えることができます、中小や零細向けオフィスにフィットします。
※このページの内容について機器メーカーに問い合わせるのは控えて下さい。
もくじ
前提条件
クラウドIPBXプロバイダ
- Cloco Cloud SIPトランク2契約済
パークコール
- パークプラン:700
- パークエリア:701~702
SIPトランクサーバ
- AWSのEC2にて設置
SIPサーバポート番号
- 15060
実際の利用ではセキュリティ上変更すると良いかと思います。
設計
代表子機
2つの外線電話番号があり、
- 042xxx2807
- 042xxx2769
「20」, 「21」, 「22」, 「23」, 「40番」の事務所にある代表子機が着信する、外線の発信もできる。
客室子機
「30」, 「31」の客室子機は内線専用、代表子機と客室子機といったすべての子機と内線通話が出来る。
外線の発信は出来ない。
セキュリティ対策
- ポート番号変更
- Fail2ban
- IP制限
拠点利用のみの場合 - 海外通話制限
国内のみの通話利用の場合、海外に通話できないようにする。 Cloco Cloud管理画面で制御可能
今回の記事では紹介していませんが、セキュリティ対策は必須です。
サーバへの設定
必要なライブラリを追加
yum install -y libuuid-devel ncurses-devel sqlite sqlite-devel json-c-devel.x86_64 json-c-devel.x86_64 yum groupinstall -y 'Development Tools' 'base' yum install -y gcc gcc-c++ pcre-devel zlib-devel make wget openssl-devel libxml2 libxml2-devel libxslt-devel libxslt libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools-devel flex yum install -y gcc-c++ kernel-devel zlib-devel openssl-devel ncurses-devel newt-devel slang-devel compat-libtermcap
更新します。
# yum update
kernelとkernel-develのバージョンがこれで合う。
jansson-2.5
jansson-2.5をインストールします。
# cd /usr/src/ && wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz # tar -zxvf jansson-2.5.tar.gz # cd jansson* # ./configure --prefix=/usr/ && make clean && make && make install && ldconfig
再起動して読み込ませます。
# reboot now
Asterisk12.8.2のダウンロードとインストール
ダウンロードを行いますよ!
# cd /usr/local/src # wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-12.8.2.tar.gz # tar xzvf asterisk-12.8.2.tar.gz
Asterisk12.8.2コンフィギュア
# cd asterisk-12.8.2 asterisk-12.8.2]# ./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: Package configured for: configure: OS type : linux-gnu configure: Host CPU : x86_64 configure: build-cpu:vendor:os: x86_64 : unknown : linux-gnu : configure: host-cpu:vendor:os: x86_64 : unknown : linux-gnu :
ロゴマークが出てきたらOK!です
インストール
asterisk-12.8.2]# make install make[1]: ディレクトリ `/usr/local/src/asterisk-12.8.2/sounds' に入ります make[1]: ディレクトリ `/usr/local/src/asterisk-12.8.2/sounds' から出ます find rest-api -name "*.json" | while read x; do \ /usr/bin/install -c -m 644 $x "/var/lib/asterisk/rest-api" ; \ done +---- 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: + + + + make samples + + + +----------------- 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 + +-------------------------------------------+
コンフィグサンプルファイルインストール
# make samples # make config
ライブラリの読み込み
# ldconfig
動かしてみよう
# systemctl enable asterisk # systemctl restart asterisk # systemctl status asterisk
DADHIドライバのインストール
DADHIのソースコードをダウンロードします。
# cd /usr/local/src # wget https://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.11.1+2.11.1.tar.gz
# tar -zxvf dahdi-linux-complete-2.11.1+2.11.1.tar.gz # cd dahdi-linux-complete-*
インストールします。
# make
# make install
# make config
# cp /etc/dahdi/modules.sample /etc/dahdi/modules
# vi /etc/dahdi/modules # Xorcom Astribank Devices xpp_usb 最終行に以下を追加 # DAHDI Dummy dahdi_dummy
libpriのインストール
# cd /usr/local/src # wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.6.0.tar.gz # tar xzvf libpri-*.tar.gz
インストール
# cd libpri-* # make && make install install -m 644 libpri.h /usr/include install -m 755 libpri.so.1.4 /usr/lib #if [ -x /usr/sbin/sestatus ] && ( /usr/sbin/sestatus | grep "SELinux status:" | grep -q "enabled"); then /sbin/restorecon -v /usr/lib/libpri.so.1.4; fi ( cd /usr/lib ; ln -sf libpri.so.1.4 libpri.so) install -m 644 libpri.a /usr/lib if test $(id -u) = 0; then /sbin/ldconfig -n /usr/lib; fi
ライブラリの読み込み
# ldconfig
Asterisk設定
# cp -a /etc/asterisk/rtp.conf /etc/asterisk/rtp.conf.org
通話用のポート設定
# vi /etc/asterisk/rtp.conf rtpstart=10000 rtpend=20000 ↓変更 ;rtpstart=10000 ;rtpend=20000 rtpstart=30000 rtpend=31023
ログ設定
# vi /etc/asterisk/logger.conf [general] ; ; Customize the display of debug message time stamps ; this example is the ISO 8601 date format (yyyy-mm-dd HH:MM:SS) ; ; see strftime(3) Linux manual for format specifiers. Note that there is also ; a fractional second parameter which may be used in this field. Use %1q ; for tenths, %2q for hundredths, etc. ; ;dateformat=%F %T ; ISO 8601 date format ;dateformat=%F %T.%3q ; with milliseconds dateformat=%F %T ←追加
extensions.conf
SIPトランクサーバや子機との接続、発着信時の挙動を設定します。
# cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.org
# vi /etc/asterisk/extensions.conf [general] writeprotect=no priorityjumping=yes [inbound] exten => 042xxx2807, 1, Dial(SIP/20&SIP/21&SIP/22&SIP/23&SIP/40,120,t) exten => 042xxx2807, 2,Congestion exten => 042xxx2807, 102,Busy exten => 042xxx2769, 1, Dial(SIP/20&SIP/21&SIP/22&SIP/23&SIP/40,120,t) exten => 042xxx2769, 2,Congestion exten => 042xxx2769, 102,Busy [outbound-Daihyou] exten => _0., 1,Set(CALLERID(num)= 042xxx2807) exten => _0., 2,Dial(SIP/${EXTEN}@siptr,120,T) exten => _0., 3,Congestion exten => _0.,104,Busy exten => _1., 1,Set(CALLERID(num)= 042xxx2807) exten => _1., 2,Dial(SIP/${EXTEN}@siptr,120,T) exten => _1., 3,Congestion exten => _1.,104,Busy ;117等の特番へ外線発信する設定です exten => _XX, 1,Dial(SIP/${EXTEN},120,T) exten => _XX, 2,Congestion exten => _XX, 102,Busy ;xxは内線桁数を表します(=2桁) 桁数が異なる場合は調整して下さい ;パーク保留設定 include => parkedcalls exten => 701,hint,park:701@parkedcalls exten => 702,hint,park:702@parkedcalls [outbound-Kyakusitu] exten => _XX, 1,Dial(SIP/${EXTEN},120,T) exten => _XX, 2,Congestion exten => _XX, 102,Busy ;xxは内線桁数を表します(=2桁) 桁数が異なる場合は調整して下さい
# cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.org
sip.conf
「Asterisk」に眠る様々な機能を覚醒させる。子機のアカウントや個別設定もここで行うよ!
勝てるかどうかはランナー次第。
https://wiki.asterisk.org/wiki/display/AST/Core+Configuration
# cat /etc/asterisk/sip.conf [general] enabled = yes allowguest=no maxexpirey=3600 defaultexpirey=3600 port=15060 bindport=15060 bindaddr=0.0.0.0 tcpenable=yes udpbindaddr=0.0.0.0:15060 tcpbindaddr=0.0.0.0:15060 srvlookup=yes disallow=all allow=ulaw language=jp nat=force_rport,comedia ;BLF パーク保留で光らせる callcounter=yes busylevel=1 directmedia=yes register => 0000xxxx:<パスワード>@siptr ;SIP behind NAT ;externhost=sip1.sys-guard.com externip=150.xxx.xxx.27 ;←●ConoHa Asteriskサーバを指定 localnet=150.xxx.xxx.27/255.255.254.0 ;ConoHa ネットワーク [siptr] type=friend username=0000xxxx secret=<パスワード> context=inbound canreinvite=no host=trunk2.cldpbx.com insecure=port,invite disallow=all allow=ulaw directmedia=yes qualify=yes nat=force_rport,comedia ;====================================================================== ; クライアント子機設定 ;===================================================================== ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 代表用子機 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [20] type=friend username=20 secret=<パスワード> host=dynamic context=outbound-Daihyou qualify=yes nat=force_rport,comedia sendrpid=pai subscribecontext=outbound-Daihyou [21] type=friend username=21 secret=<パスワード> host=dynamic context=outbound-Daihyou qualify=yes nat=force_rport,comedia sendrpid=pai subscribecontext=outbound-Daihyou [22] type=friend username=22 secret=<パスワード> host=dynamic context=outbound-Daihyou qualify=yes nat=force_rport,comedia sendrpid=pai subscribecontext=outbound-Daihyou [23] type=friend username=23 secret=<パスワード> host=dynamic context=outbound-Daihyou qualify=yes nat=force_rport,comedia sendrpid=pai subscribecontext=outbound-Daihyou ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 代表用子機 ここまで ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 客室用子機 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [30] type=friend username=30 secret=<パスワード> host=dynamic context=outbound-Kyakusitu qualify=yes nat=force_rport,comedia [31] type=friend username=31 secret=<パスワード> host=dynamic context=outbound-Kyakusitu qualify=yes nat=force_rport,comedia
パーク保留設定
# cat /etc/asterisk/features.conf [general] parkext => 700 parkpos => 701-702 context => parkedcalls parkingtime => 300 transferdigittimeout => 3 parkinghints => yes
Asteriskに設定を反映させようね。
# systemctl enable asterisk # systemctl restart asterisk # systemctl status asterisk
子機の設定
GUIである程度設定できますが、パーク保留などで右側の便利ボタンを有効活用するにはプロビジョニングが有効です。
またIP電話機器の納入は十数台超えます、一つ一つ設定するのは大変なのでファイル管理した方が効率的ですし、コンフィグ設定のバージョン管理もできるといった様々なメリットがあります。
コールパークの動作
Panasonic KX-UT136用プロビジョニング
WEBサーバ側にあらかじめ設定ファイルを設置しておきます。
注意
- 1行目に”Panasonic~”のコメント
- 最後に必ず1行の空行が必要
特に最後の空行が忘れがちなので気を付けましょ~!バッドノウハウ炸裂!
# vi /var/www/html/KX-UT136N-21.cfg
# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE! # 回線1 ディスプレイネーム DISPLAY_NAME_1="21" ## SIP1設定 PHONE_NUMBER_1="<電話番号1>" SIP_AUTHID_1="21" SIP_URI_1="21" SIP_PASS_1="<SIPサーバパスワード>" SIP_PRSNC_ADDR_1="<SIPサーバIP>" SIP_RGSTR_ADDR_1="<SIPサーバIP>" SIP_PRXY_ADDR_1="<SIPサーバIP>" SIP_OUTPROXY_ADDR_1="<SIPサーバIP>" SIP_SVCDOMAIN_1="<SIPサーバIP>" # SIP1ポート SIP_RGSTR_PORT_1="15060" SIP_PRXY_PORT_1="15060" SIP_PRSNC_PORT_1="15060" SIP_OUTPROXY_PORT_1="15060" SIP_SRC_PORT_1="15060" # SIP1 NATキープアライブ秒数 PORT_PUNCH_INTVL_1="20" # SIP1 インバウンド設定 トーン信号はRTPストリームにエンコードされる OUTBANDDTMF_1="N" #HTTPD 設定 常に起動 HTTPD_PORTOPEN_AUTO="Y" ## ボタン確認音 無音 KEY_PAD_TONE="N" ## NTP設定 NTP_ADDR="ntp.jst.mfeed.ad.jp" TIME_ZONE="540" ## パーク保留設定 CALLPARK_KEY_ENABLE="Y" CALLPARK_AREAKEY_ENABLE="Y" CALLPARK_METHOD="2" # 子機からSUBSCRIBEをサーバへ送信 60秒 SIP_SUBS_EXPIRE_1="60" NUM_PLAN_PARKING="700" NUM_PLAN_PARK_AREA="701" NUM_PLAN_PARK_AREA="702" FLEX_BUTTON_FACILITY_ACT21="X_PANASONIC_IPTEL_CONTACT" FLEX_BUTTON_FACILITY_ARG21="701" FLEX_BUTTON_FACILITY_ACT22="X_PANASONIC_IPTEL_CONTACT" FLEX_BUTTON_FACILITY_ARG22="702" FLEX_BUTTON_FACILITY_ACT23="X_PANASONIC_IPTEL_CONTACT"
※最終行に空の1行が必要
子機側を設定します
子機電話機を初期化します
- 子機の【設定】→ #136 → 【工場出荷状態】→ 【決定】→ 【はい】→【決定】→ 【はい】
初期化と再起動が行われます。
IPアドレスの固定化と確認
- 【設定】→ 【ネットワーク設定】 → 【ネットワーク】→ 【アドレス自動取得】
IPアドレスを取得できます。
- 【設定】→ 【インフォメーション表示】→ ▼ボタンを一度押す → IPアドレスを確認
子機WEBサーバの起動
- 【設定】→ 【ネットワーク設定】 → 【内臓WEB】→ 【オープン】
子機のWEBサーバが起動される
アクセスします。
http://子機IP
- 初期ユーザ:admin
- 初期パスワード:adminpass
プロビショニング
- 【保守】>> 【プロビジョニング保守】>> 【スタンダードファイルURL】項目にプロビショニングファイルのアドレスを入力する
例)http://WEBサーバIP/KX-UT136N-21.cfg
を入力して、【登録】をクリックして10秒程度で子機に再起動が行われれば成功です。
パーク保留で光るよ!
受話器を取るとパーク保留ボタンが出現!
仕様上の注意点
Asteriskサービスを再起動させると子機の赤いランプが点灯しなくなります。その場合は子機もリスタートさせると良いです。