提供: いつきメモ
移動: 案内検索
(ページの作成:「== Asterisk(ひかり電話対応)の設定 == 普通に使っている分には、光ルーターがその役目を負っています。 5端末以内であれば、...」)
 
 
(同じ利用者による、間の7版が非表示)
行48: 行48:
  
 
termcapとuuidとJSONとlibxml2とSQLite3がどうとかいうエラーはこれで解決できます。
 
termcapとuuidとJSONとlibxml2とSQLite3がどうとかいうエラーはこれで解決できます。
 +
 +
さて、本題。
 +
 +
<pre>make
 +
make install
 +
make samples
 +
make config</pre>
 +
 +
最後の行はもしかしたらいらないかも。
 +
 +
これでインストールは終了です。
 +
 +
 +
== 設定 ==
 +
 +
まず、ユーザー権限で走らせることにするので、ユーザーとグループを作ります。
 +
 +
<pre>adduser asterisk</pre>
 +
 +
systemd用のサービスファイルを作ります。
 +
 +
/etc/systemd/system/asterisk.service
 +
 +
<pre>[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
 +
</pre>
 +
 +
何かおかしいと思ったら、/etc/rc.d/init.d/asteriskを参考しちゃうのね。
 +
 +
と言う訳で、このファイルを削除(mv /etc/rc.d/init.d/asterisk /etc/rc.d/init.d/.asterisk)。
 +
 +
次に、パーミッションの設定をして回ります。
 +
 +
<pre>chown -R asterisk:asterisk /var/log/asterisk
 +
chown -R asterisk:asterisk /var/spool/asterisk
 +
chown -R asterisk:asterisk /var/lib/asterisk</pre>
 +
 +
次に、/var/run/asteriskを作っておく方法です。
 +
 +
CentOS 7になってから、/var/runは再起動すると勝手に消えます。
 +
 +
このため、消えないように、/usr/lib/tmpfiles.dにそのための設定ファイルを作る必要があります。
 +
 +
書式はこんな感じ
 +
 +
<pre>[d:ディレクトリ] [作成するディレクトリ] [4桁パーミッション] [所有ユーザ] [所有グループ] [-:最後に付ける]</pre>
 +
 +
これに従うと、/usr/lib/tmpfiles.d/asterisk.confというファイルを作って
 +
 +
<pre>d /var/run/asterisk 0750 asterisk asterisk -</pre>
 +
 +
と書いておく必要があります。
 +
 +
また、ライブラリのリロードがいるので、ldconfigを入力しておきましょう。
 +
 +
この辺で一度再起動しておくと良いカモ。
 +
 +
次に、コンフィグファイルを弄ります。以下、/etc/asterisk以下で作業。
 +
 +
まずは、sip.confを弄ります。
 +
 +
こんな感じで追加していきます。
 +
 +
まずはひかり電話の設定。
 +
 +
[general]に次のように追加します。
 +
 +
※@hikari-denwa/5000は、hikari-denwaを使う事と、内線番号(?)が5000番である事を設定しています
 +
 +
<pre>[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
 +
</pre>
 +
 +
この後に、「context=public」の行があるので、;でコメントアウトしましょう。
 +
 +
<pre>[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
 +
</pre>
 +
 +
次に、光ルーターに接続するクライアント(仮に201番号とします)の設定
 +
 +
<pre>[201]
 +
; 内線201番の設定
 +
type=friend
 +
username=内線番号
 +
defaultuser=内線番号
 +
secret=パスワード
 +
canreinvite=no
 +
host=dynamic
 +
nat=yes
 +
directmedia=no
 +
qualify=5000
 +
dtmfmode=rfc2833
 +
callgroup=1
 +
pickupgroup=1
 +
</pre>
 +
 +
クライアントは好きな番号で好きなだけ増やして下さい。
 +
 +
この状態で、仮起動してみます。
 +
 +
<pre>/usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf -U asrisk -G asterisk</pre>
 +
 +
別のコンソールから
 +
 +
<pre>asterisk -r</pre>
 +
 +
として、sip show registryとして、hikari-denwa:5060とかいう行があればOKです。
 +
 +
あとは、このサーバーに適当なSIPクライアントから接続しましょう。
 +
 +
おっと。
 +
 +
systemctl start asterisk
 +
 +
systemctl enable asterisk
 +
 +
を忘れないように。
 +
 +
=== 外からの電話を制限したり ===
 +
 +
extensions.confにこんなのを書きましょう。
 +
 +
<pre>[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
 +
</pre>
 +
これで、列挙した内線番号には非通知では着信しなくなります。
 +
 +
さらに続き
 +
<pre>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()
 +
</pre>
 +
これで、001で始まる番号からの発信が出来なくなります。

2016年11月5日 (土) 12:22時点における最新版

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]に次のように追加します。

※@hikari-denwa/5000は、hikari-denwaを使う事と、内線番号(?)が5000番である事を設定しています

[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で始まる番号からの発信が出来なくなります。