行151: | 行151: | ||
</pre> | </pre> | ||
+ | この後に、「context=public」の行があるので、;でコメントアウトしましょう。 | ||
<pre>[hikari-denwa] | <pre>[hikari-denwa] |
2016年11月5日 (土) 11:28時点における版
Asterisk(ひかり電話対応)の設定
普通に使っている分には、光ルーターがその役目を負っています。
5端末以内であれば、直接接続した方が早いです。
それ以上端末が増えた場合や、例えば、非通知着信を無視したい場合などに使うと良いでしょう。
なお、AsteriskはIP PBXと思えばまぁOK。
電話機の交換機みたいなもんです。
インストール
CentOS 7でやっていますが、今回はソースコードからインストールしていますので、どれでも一緒でしょう。
まずは、Asterisk のページからソースをダウンロードしてきます。
今回は、(パッチの絡みもあるので)この辺からasterisk-13.11.2.tar.gzをチョイス。
コンパイル等は、~/asteriskでやります。
まず、ソースの入手
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13.11.2.tar.gz
次に、ひかり電話HGWパッチ - VOIP-Info.jp Wikiをダウンロードします。
wget http://ftp.voip-info.jp/asterisk/patch/local/13/chan_sip_hikarihgw.141202-01.patch
次に、asterisk本体を展開。
tar xvzf asterisk-13.11.2.tar.gz
で、パッチをインストールします。
cd asterisk-13.11.2 cp ../chan_sip_hikarihgw.141202-01.patch . patch -p0 < chan_sip_hikarihgw.141202-01.patch
エラー無く終われば前設定は完了。
お約束となっている、configureを実行します。
その前に、入ってないパッケージを入れます。
yum install gcc libtermcap libtermcap-devel newt newt-devel ncurses ncurses-devel libuuid-devel jansson-devel libxml2-devel sqlite-devel
termcapとuuidとJSONとlibxml2とSQLite3がどうとかいうエラーはこれで解決できます。
さて、本題。
make make install make samples make config
最後の行はもしかしたらいらないかも。
これでインストールは終了です。
設定
まず、ユーザー権限で走らせることにするので、ユーザーとグループを作ります。
adduser asterisk
systemd用のサービスファイルを作ります。
/etc/systemd/system/asterisk.service
[Unit] Description=Asterisk PBX And Telephony Daemon After=network.target [Service] User=asterisk Group=asterisk Environment=HOME=/var/lib/asterisk WorkingDirectory=/var/lib/asterisk ExecStart=/usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf -U asterisk -G asterisk ExecStop=/usr/sbin/asterisk -rx 'core stop now' ExecReload=/usr/sbin/asterisk -rx 'core reload' [Install] WantedBy=multi-user.target
何かおかしいと思ったら、/etc/rc.d/init.d/asteriskを参考しちゃうのね。
と言う訳で、このファイルを削除(mv /etc/rc.d/init.d/asterisk /etc/rc.d/init.d/.asterisk)。
次に、パーミッションの設定をして回ります。
chown -R asterisk:asterisk /var/log/asterisk chown -R asterisk:asterisk /var/spool/asterisk chown -R asterisk:asterisk /var/lib/asterisk
次に、/var/run/asteriskを作っておく方法です。
CentOS 7になってから、/var/runは再起動すると勝手に消えます。
このため、消えないように、/usr/lib/tmpfiles.dにそのための設定ファイルを作る必要があります。
書式はこんな感じ
[d:ディレクトリ] [作成するディレクトリ] [4桁パーミッション] [所有ユーザ] [所有グループ] [-:最後に付ける]
これに従うと、/usr/lib/tmpfiles.d/asterisk.confというファイルを作って
d /var/run/asterisk 0750 asterisk asterisk -
と書いておく必要があります。
また、ライブラリのリロードがいるので、ldconfigを入力しておきましょう。
この辺で一度再起動しておくと良いカモ。
次に、コンフィグファイルを弄ります。以下、/etc/asterisk以下で作業。
まずは、sip.confを弄ります。
こんな感じで追加していきます。
まずはひかり電話の設定。
[general]に次のように追加します。
[general] ; for Hikari Denwa 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=jp localnet=ネットワーク/ネットマスク(192.168.1.1の場合、192.168.1.0/255.255.255.0と記述) hikarihgw=ひかりルーターのIP tcpenable=yes transport=udp,tcp register => 光ルーターにレジストする番号:パスワード:ユーザー名@hikari-denwa/5000 ; end for Hikari Denwa
この後に、「context=public」の行があるので、;でコメントアウトしましょう。
[hikari-denwa] type=friend secret=光ルーターに設定したパスワード port=5060 username=光ルーターに設定したユーザー名 defaultuser=光ルーターに設定したユーザー名 fromuser=光ルーターに設定したユーザー host=光ルーターのIPアドレス fromdomain=光ルーターのIPアドレス context=default insecure=invite,port dtmfmode=inband canreinvite=no disallow=all allow=ulaw callgroup=1 picupgroup=1
次に、光ルーターに接続するクライアント(仮に201番号とします)の設定
[201] ; 内線201番の設定 type=friend username=内線番号 defaultuser=内線番号 secret=パスワード canreinvite=no host=dynamic nat=yes directmedia=no qualify=5000 dtmfmode=rfc2833 callgroup=1 pickupgroup=1
クライアントは好きな番号で好きなだけ増やして下さい。
この状態で、仮起動してみます。
/usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf -U asrisk -G asterisk
別のコンソールから
asterisk -r
として、sip show registryとして、hikari-denwa:5060とかいう行があればOKです。
あとは、このサーバーに適当なSIPクライアントから接続しましょう。
おっと。
systemctl start asterisk
systemctl enable asterisk
を忘れないように。
外からの電話を制限したり
extensions.confにこんなのを書きましょう。
[general] autofallthrough=yes writeprotect=no priorityjumping=no [globals] MYNUMBER=自分の電話番号 [default]exten => 5000,1,GotoIf($["${CALLERID(NUM)}" = "anonymous"]?10:2) exten => 5000,2,Dial(SIP/内線番号1&SIP/内線番号2&SIP/内線番号3) exten => 5000,3,Hungup exten => 5000,10,playback(ss-noservice) exten => 5000,11,Hungup
これで、列挙した内線番号には非通知では着信しなくなります。
さらに続き
exten => _0.,1,Set(CALLERID(num)=${MYNUMBER}) exten => _0.,2,Set(CALLERID(name)=${MYNUMBER}) ; 国際電話判定(001で始まる番号は発信不可) exten => _0.,3,GotoIf($[${EXTEN:0:2} = 00]?international) ; その他の番号では発信可 exten => _0.,n,Dial(SIP/${EXTEN}@hikari-denwa,120,T) ; 拒否 exten => _0.,n(international),Hangup()
これで、001で始まる番号からの発信が出来なくなります。