では、設定していきましょう。コレも古めのページではsip.confをいじるみたいなのですが、Asterisk 16からはデフォルトでpjsip.confの様なので、こちらで設定してきます。切り替えのときには多分、大混乱が生じたんだろうなぁ。リプレースのときとか、設定が流用出来ないなんて、なんて地獄。。。特に、アスタが使える人が異動してたら、、、と、思うとゾッとしますよね。
スマホにIPアプリ電話をインストールして、確認!私は、AndroidではMizuDroid、iPhoneではAGEphoneを使っています。まぁ、使えれば何でも良いです。レジストするのだって、AsteriskのサーバIPとID/PWだけで出来ます。
が!しかし子機はコレでレジストできますが、通話はまだできません、、、流石はPBX。そこまで設定がいるのかよ!って思います。そうね、レジストと、呼をどこに落とすかって、設定は別だよね。でもまぁ。マジモンのビジホンよりはマシ。
と、出るので子機の登録がリアルタイムにわかります。6002の子機のIPは192.168.200.9ですが、これはDHCPで払い出してるのでなんでも良いはずです。また、
CLIから離脱するには quit です。これで、6001の子機から6002へダイヤルすると、6002の子機が鳴って、取ると会話ができます。IP電話の遅延とやらが理解できます。ココまでで、内線には使えますが、、、これじゃあ面白くないですよね!
★Asteriskの設定 ~ やっぱ、ひかり電話で発呼したい編 ~
まずは、ひかり電話の内線としてレジストできるように、ホームゲートウェイ(HGW)の設定をします。HGWにログオンして、電話設定→内線設定から設定します。
MACアドレスを登録ですが、私の環境では、NATをしている関係でHGWから見えるL3デバイスはルータですので、ルータのWAN側の口のMACアドレスを登録します。HGW直下にAsteriskサーバがある場合は、AsteriskサーバのNICのMACアドレスを登録します。また、MACアドレスを登録した内線番号とそれに付随する、ユーザIDとパスワードをメモしておきます。また、ここではHGWをのLAN側のIPを192.168.1.1、設定した内線番号を3とします。
まずは、レジストしないと話が始まらないので、pjsip.confをイジります。とりあえず、下記をpjsip.confの続きに追記してください。
vi /etc/asterisk/pjsip.conf
~~~ 追記中身 ~~~
[hikari-denwa]
type=registration
transport=transport-udp
outbound_auth=hikari-trunk
server_uri=sip:192.168.1.1 ;HGWのLAN側のIPアドレス
client_uri=sip:3@192.168.1.1 ;(内線番号)@HGWのLAN側のIPアドレス
retry_interval=60
[hikari-trunk]
type=auth
auth_type=userpass
password=(HGWで表示されるPW) ;(内線番号)の(ユーザID)のパスワード。流石に隠します。
username=0003 ;(内線番号)の(ユーザID)ここでは0003
[hikari-trunk]
type=aor
contact=sip:192.168.1.1 ;HGWのLAN側のIPアドレス
[hikari-trunk]
type=aor
contact=sip:192.168.1.1 ;HGWのLAN側のIPアドレス
[hikari-trunk]
type=endpoint
transport=transport-udp
context=from-hikari
disallow=all
allow=ulaw
outbound_auth=hikari-trunk
aors=hikari-trunk
direct_media=no
from_user=3 ;HGWの(内線番号)
from_domain=192.168.1.1 ;HGWのLAN側のIPアドレス
dtmf_mode=inband
[hikari-trunk]
type=identify
endpoint=hikari-trunk
match=192.168.1.1 ;HGWのLAN側のIPアドレス
~~~ 追記中身おわり ~~~
また、呼制御を行う必要がありますので、extensions.confをイジります。とりあえず、下記をextensions.confの続きに追記してください。
~~~ 追記中身 ~~~
exten => _0.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0.,n,Dial(PJSIP/${EXTEN}@hikari-trunk)
[from-hikari]
exten => s,1,Dial(PJSIP/6002,30,r)
~~~ 追記中身おわり ~~~
変更した設定を反映させるためにAsteriskを再起動して、起動を確認します。Active: active (running)となっていればOK!
sudo systemctl restart asterisk
sudo systemctl status asterisk
これで、人によってはひかり電話で発着信できます。、また、
exten => s,1,Dial(PJSIP/6002,30,r)
の、PJSIP/6002の部分の子機に呼がおちていきますので、PJSIP/6001&PJSIP/6002のように書けば、ひかり電話の着信を落とす子機を増やせます。
ここで、人によっては と、書きました。そう私の環境ではコレでは動きません。HGWみるとレジストできてるっぽいし、asteriskのCLIでも
これで、AsteriskのCLIを起動しておいて、
asterisk -rvvvvv
レジストを確認すると、
pjsip show registrations
<Registration/ServerURI..............................> <Auth..........> <Status.......>
==========================================================================================
hikari-denwa/sip:192.168.1.1 hikari-trunk Registered
Objects found: 1
と、表示されるんで、ひかり電話にはレジストできてるんですよ。でも、この状態で外線から、ひかり電話の局番に電話してもずっとリングバックトーンが流れるばかりで、内線子機側にはなにも表示されません。ちな、AsteriskのCLIにも何も表示されません。これ、パケットをキャプチャすると分かるんですが、このままだと。AsteriskのサーバのIPアドレスで登録されます。私の環境では、ルータがNATをしているため、AsteriskのサーバIPにHGWから通信を開始できないのです。だって、ルータのLAN側のIPアドレスなんてHGWしらないもん。と、言うわけで少し工夫をします。
NATを動的に行うのではなく、Asteriskサーバに関しては静的にマップする。
です。はい。そうすると、IPのレベルではHGWのLAN側のアドレスにAsteriskのサーバが見えるようになるため、動く・・・動かない。そう、これだけだと、IPヘッダは静的NATされてるんですが、データペイロードの中にあるレジストしたいIPが、元のAsteriskサーバのIPなので、HGWが通信を開始できないのは自明なのです。と、言うことはレジストするときから、データペイロードの中も偽装してしまえば良いのです。
いやぁ、こういう設定もできるんですねぇと、言うことでとりあえず、下記をpjsip.confの続きに追記してください。あ、ここで192.168.1.193っていうのが、ルータでNATした先のHGWのLAN側セグメントのアドレスで、192.168.200.0/24がAsteriskサーバが所属してるセグメントのアドレスです。下の追記を[transport-udp]のコンテクストの中に記載します。
vi /etc/asterisk/pjsip.conf
~~~ 追記中身 ~~~
external_media_address=192.168.1.193
external_signaling_address=192.168.1.193
local_net=192.168.200.0/24
local_net=127.0.0.1/32
~~~ 追記中身おわり ~~~
要は、下記の位置に書き込んでください。
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
external_media_address=192.168.1.193
external_signaling_address=192.168.1.193
local_net=192.168.200.0/24
local_net=127.0.0.1/32
変更した設定を反映させるためにAsteriskを再起動して、起動を確認します。Active: active (running)となっていればOK!
sudo systemctl restart asterisk
sudo systemctl status asterisk
これで、私の環境では、発着信OKです。会話もきちんとできます。もうツギハギだらけですが、動けば正義です。実は、発着信は出来るけど、会話はできない(音が出ない)パターンもあったのですが、なんか再現できなくなっちゃったので、割愛です。
ちなみに、extensions.confのなかの、
[from-hikari]
exten => s,1,Dial(PJSIP/6002,30,r)
を
#[from-hikari]
#exten => s,1,Dial(PJSIP/6002,30,r)
って、コメントアウトしておくと、子機に呼が降りてきません。静かです。私はこの環境で運用しています。なぜかって?それは、、、
家電なんて出る気がない。
からです。じゃあ、なんでひかり電話なんて維持してるんだよ!って、話ですが。いくつか理由があります。それはまた別のお話。
では、最後に設定を再掲して。さよーならー。
そうそう、設定変更したら必ず、sudo systemctl restart asterisk.service をお忘れなく。。。
夜中に電話がなります。
<今回設定した設定のまとめ>
(ただし、内線のPWは伏せておきます、また説明にはないですが6003の子機も運用してるため、設定があります)
・pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
external_media_address=192.168.1.193
external_signaling_address=192.168.1.193
local_net=192.168.200.0/24
local_net=127.0.0.1/32
[6001]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=6001
aors=6001
[6001]
type=auth
auth_type=userpass
password=6001
username=6001
[6001]
type=aor
max_contacts=1
[6002]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=6002
aors=6002
[6002]
type=auth
auth_type=userpass
password=6002
username=6002
[6002]
type=aor
max_contacts=10
[6003]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=6003
aors=6003
[6003]
type=auth
auth_type=userpass
password=6003
username=6003
[6003]
type=aor
max_contacts=10
[hikari-denwa]
type=registration
transport=transport-udp
outbound_auth=hikari-trunk
server_uri=sip:192.168.1.1
client_uri=sip:3@192.168.1.1
retry_interval=60
[hikari-trunk]
type=auth
auth_type=userpass
password=--------- ;内線のPWは伏せます。
username=0003
[hikari-trunk]
type=aor
contact=sip:192.168.1.1
[hikari-trunk]
type=endpoint
transport=transport-udp
context=from-hikari
disallow=all
allow=ulaw
outbound_auth=hikari-trunk
aors=hikari-trunk
direct_media=no
from_user=3
from_domain=192.168.1.1
dtmf_mode=inband
[hikari-trunk]
type=identify
endpoint=hikari-trunk
match=192.168.1.1
・extensions.conf
[general]
static=yes
writeprotect=no
[from-internal]
exten = 100,1,Answer()
same = n,Wait(1)
same = n,Playback(hello-world)
same = n,Hangup()
# 6001
exten = 6001,1,Dial(PJSIP/6001,30,r)
same = n.Hangup()
# 6002
exten = 6002,1,Dial(PJSIP/6002,30,r)
same = n.Hangup()
# 6003
exten = 6003,1,Dial(PJSIP/6003,30,r)
same = n.Hangup()
#Hikari-Denwa Dial-out Sample(PJSIP)
exten => _0.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0.,n,Dial(PJSIP/${EXTEN}@hikari-trunk)
[from-hikari]
exten => s,1,Dial(PJSIP/6002&PJSIP/6003,30,r)
コメント
コメントを投稿