以前より、自宅の電話はひかり電話を使っています。
これ、IP電話なので、普通にスマホと接続したり転送したりすることができます。
そのまま使っても別段問題ないのですが、せっかくなので asterisk とつないで遊んでみます。
例によって例のごとく、環境は FreeBSD-12.2 Release 上に、qjail で 専用の jail を作って、そこに環境を構築します。
こうしておけば、バックアップも簡単に取れますし、バージョン上げるのも安心です。
Linux の場合は Docker でも使うといいんじゃないかな?
まずは asterisk 本体のインストール。
最近はパッケージから入れることが多くなりました。
設定ファイル書き換えるのに vim も入れておきます。これはコンソール版だけでいいよね。
そして日本語音源のインストール。これはパッケージがないのでportsから入れます。
さっくり。
あとは自動起動するように /et/rc.conf を変更します。
あとは設定です。
まずはひかり電話との接続です。
以前は chan_sip をごりごり書いたのですが、最近では pjsip というのが主流になっています。
この辺は asterisk の日本語の情報が集まっている、voip-info.jp に詳しく乗っていますので
ありがたく参考にします。
https://www.voip-info.jp/index.php/Asterisk_pjsip
https://www.voip-info.jp/index.php/%E3%81%B2%E3%81%8B%E3%82%8A%E9%9B%BB%...
ありがたやありがたや。
[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/16
;ひかり電話HGW
[hikari-hgw]
type = aor
; sip:内線番号@HGWのIPアドレス
contact = sip:[email protected]
qualify_frequency = 30
authenticate_qualify = no
[hikari-hgw]
type = auth
auth_type = userpass
;内線のユーザ名(4桁数字)
username = 0003
;内線のパスワード
password = <ひかり電話の内線番号3のパスワード>
[hikari-hgw]
type = identify
endpoint = hikari-hgw
;HGWのIPアドレス
match = 192.168.100.1
[hikari-hgw]
type = registration
transport = transport-udp
outbound_auth = hikari-hgw
; sip:HGWのIPアドレス
server_uri = sip:192.168.100.1
; sip:内線番号@HGWのIPアドレス
client_uri = sip:[email protected]
retry_interval = 60
[hikari-hgw]
type = endpoint
transport = transport-udp
context = from-hikari-hgw
dtmf_mode = inband
disallow = all
allow = ulaw
direct_media = no
send_pai = yes
inband_progress = yes
; HGWの内線番号
from_user = 3
; HGWのIPアドレス
from_domain = 192.168.100.1
language = ja
outbound_auth = hikari-hgw
aors = hikari-hgw
これでつながります。あとは子機の設定とダイヤルプランです。
この辺は好みの問題もあるのですが、うちの運用方針としては子機は IAX2 プロトコルで接続するようにして、基本的にSIPでは
つなぎません。Android のクライアントは zoipher 一択です。
[general]
bindport=4569
bindaddr=
iaxcompat=yes
language=ja
bandwidth=medium
disallow=all
allow=ulaw
allow=gsm
allow=speex
jitterbuffer=no
;dropcount=2
;maxjitterbuffer=500
;maxexcessbuffer=80
;minexcessbuffer=10
;jittershrinkrate=1
;tos=lowdelay
;mailboxdetail=yes
calltokenoptional=0.0.0.0/0.0.0.0
minregexpire = 300
maxregexpire = 300
[201]
type=friend
username=201
secret=<秘密のパスワード>
host=dynamic
callgroup=1
pickupgroup=1
mailbox=201
[201] 以降のエントリを適当に増やしてあげると、無限に子機をぶら下げられます。まあ逸般の誤家庭ではそんなに台数無いとおもうけど、二桁程度はいっても大丈夫。
そして最後にダイヤルプラン。ここはいろいろ凝りだすときりがないので、まずは最低限の電話を受けて、かけられるとこまで。
[from-hikari-hgw]
exten => s,1, Dial(${ALLMEMBERS},12,Tt)
exten => s,n, Hangup
[default]
exten => _0.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0.,n,Dial(PJSIP/${EXTEN}@hikari-hgw)
exten => _0.,n,Hangup
; local IAX2 phone
exten => _2XZ, 1, Dial(IAX2/${EXTEN},5, Ttr)
exten => _2XZ, n, NoOp(${DIALSTATUS})
exten => _2XZ, n, NoOp(${EXTEN})
これで、ひかり電話でかかってきた電話をうけて、0で始まる番号でかけたら外線にかけて、20x番にかけると個別に呼び出せます。
ひとまずここまでやったら保存して、asterisk を起動します
これで、asterisk の cui が起動しますので、いろいろ確かめてみましょう
Endpoint:
I/OAuth:
Aor:
Contact:
Transport:
Identify:
Match:
Channel:
Exten:
==========================================================================================
Endpoint: hikari-hgw Not in use 0 of inf
OutAuth: hikari-hgw/0003
Aor: hikari-hgw 0
Contact: hikari-hgw/sip:[email protected] 7ae9714816 Avail 1.967
Transport: transport-udp udp 0 0 0.0.0.0:5070
Identify: hikari-hgw/hikari-hgw
Match: 192.168.100.1/32
Objects found: 1
*CLI> pjsip show registrations
==========================================================================================
hikari-hgw/sip:192.168.100.1 hikari-hgw Registered
Objects found: 1
ちゃんと、ひかり電話とつながってますね。めでたしめでたし。
同様にして、子機ともつながっているか確認します。
おけおけ。ばっちり。
あとは電話をかけたりうけたりを実際にしてみましょう。問題なければひとまずはおっけーです。
これでスマホを自宅で子機にして使うことができるようになりました。
ここでいったん環境を保存しておきましょう。jail の外で作業します。
自動でasterisk が起動して、スマホがつながっていることを確認してください。
とりあえず、動くようになったのでいったんここまで。