提供: いつきメモ
移動: 案内検索
行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で始まる番号からの発信が出来なくなります。