Asteriskとひかり電話で外線接続

Posted by joeartsea on 2009-03-26

AsteriskはIP-PBXなのでひかり電話とつなぐのは簡単です。ひかり電話のゲートウェイ、通常は光回線の終端装置&ルータにAsteriskをregisterすればすぐ使えるようになります。ルータ側の設定は機種やファームウェアのバージョンによって少し違うようです。うちの環境はPR-200NEという機種でファームウェアのバージョンは6.38でした。

まずAsteriskをひかり電話に対応させるにはパッチを当てる必要があります。基本的にはAsteriskのソースにパッチを当てて再コンパイルすればOKです。パッチを当てる具体的な手順は以下のようなやり方になります。なお設定ファイルが初期化されてしまうのでmake configは実行しないでください。

1
2
3
4
5
6
7
# cd asterisk-1.4.24
# wget ftp://ftp.voip-info.jp/asterisk/patch/local/1.4/channels/chan_sip.c.rt200ne.070417-02.patch
# patch -p0 < chan_sip.c.rt200ne.070417-02.patch ./channels/chan_sip.c
# ./configure
# make
# make install
# cd

ここでは話を単純にするためにmake installするように書きましたが実は再コンパイル後にchannels/chan_sip.soを/usr/lib/asterisk/modules/に上書きするだけでも構いません。

次にブラウザでPR-200NEの管理画面にアクセスして「電話設定」→「内線設定」で内線の設定を行います。とりあえず3番から空いていたので3番にAsteriskを登録することにします。ユーザーIDに「0003」とパスワードに「1234」としました。内線番号とニックネームはそのまま。端末属性は必ず「音声専用端末」を選択してください。古いバージョンでは「音声端末」という表記らしいです。

| |
| 送信者 Blog |

ではAsteriskをPR-200NEに登録します。登録はsip.confのgeneralセクションに記述します。同時にPR-200NEのセクションを追加します。ルータの機種名はPR-200NEですがパッチがRT-200NE用なのでセクション名は「rt200ne-1」としました。

ちなみにdefaultexpireyとmaxexpireyの記述がないと「423 Interval Too Brief」というエラーでレジストできないそうなので必ず記述してください。なお使用するルータのIPアドレスは192.168.1.1というケースでの記述になります。環境に合わせて書き換えてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# vi /etc/asterisk/sip.conf
#[general]セクションに以下を追加
[general]
maxexpirey=3600
defaultexpirey=3600
rt200ne=192.168.1.1
register => 3:1234:0003@rt200ne-1/6000
[rt200ne-1]
type=friend
secret=1234
username=0003
fromuser=3
fromdomain=192.168.1.1
host=192.168.1.1
context=default
insecure=very
dtmfmode=inband
canreinvite=no
disallow=all
allow=ulaw

登録されたかどうかの確認は以下のようにします。

1
2
3
4
# asterisk -vvvvvr
asterisk*CLI> ←Asterisk CLIが起動する
asterisk*CLI> sip show registry
rt200ne-1:5060 3 3585 Registered Fri, 26 Mar 2009 10:00:10

さらにusers.confに6000をユーザとして記述します。また電話機側のユーザとして7000も追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# vi /etc/asterisk/users.conf
#以下を追加
[6000]
type=friend
username=6000
secret=1234
canreinvite=no
host=dynamic
[7000]
type=friend
username=7000
secret=1234
canreinvite=no
host=dynamic

あとはextension.confで外線の発着信設定を記述するだけです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# vi /etc/asterisk/extensions.conf
#[default]セクションに以下を追加
[default]
;;7000番台内線着信
exten = _70XX,1,Dial(SIP/${EXTEN},,tT)
exten = _70XX,n,GotoIf($["${DIALSTATUS}"="BUSY"]?busy)
exten = _70XX,n,GotoIf($["${DIALSTATUS}"="CONGESTION"]?busy)
exten = _70XX,n,Hangup
exten = _70XX,n(busy),Playback(vm-nobodyavail)
exten = _70XX,n,WaitExten(90)
;;外線着信
exten = 6000,1,Dial(SIP/7000,,tT)
exten = 6000,n,Hangup
;;外線発信
exten = _1XX,1,Dial(SIP/${EXTEN}@rt200ne-1,,tT)
exten = _1XX,n,Hangup
exten = _0.,1,Dial(SIP/${EXTEN}@rt200ne-1,,tT)
exten = _0.,n,Hangup
exten = _[3456]XXXXXXX,1,Dial(SIP/${EXTEN}@rt200ne-1,,tT)
exten = _[3456]XXXXXXX,n,Hangup

外線着信はregisterで6000番が呼ばれるように設定したので6000に対してextenを記述します。ちなみに_1XXが117(時報)とか177(天気予報)などの特番、_0.はゼロ発信なので市外局番から押した番号全て、[3456]XXXXXXXは東京を市内通話でかけられる感覚で3、4、5、6で始まる番号は東京とみなして発信する設定です。