以前より、自宅の電話はひかり電話を使っています。 これ、IP電話なので、普通にスマホと接続したり転送したりすることができます。 そのまま使っても別段問題ないのですが、せっかくなので asterisk とつないで遊んでみます。
例によって例のごとく、環境は FreeBSD-12.2 Release 上に、qjail で 専用の jail を作って、そこに環境を構築します。 こうしておけば、バックアップも簡単に取れますし、バージョン上げるのも安心です。 Linux の場合は Docker でも使うといいんじゃないかな?
まずは asterisk 本体のインストール。 最近はパッケージから入れることが多くなりました。 設定ファイル書き換えるのに vim も入れておきます。これはコンソール版だけでいいよね。 そして日本語音源のインストール。これはパッケージがないのでportsから入れます。
[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:3@192.168.100.1 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:3@192.168.100.1 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=<asterisk の jail に割り振った IPアドレス> 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})
ひとまずここまでやったら保存して、asterisk を起動します
Endpoint: <Endpoint/CID……………………………….> <State…..> <Channels.>
I/OAuth: <AuthId/UserName…………………………………………………..>
Aor: <Aor……………………………………..> Contact: <Aor/ContactUri……………………..> <Hash….> <RTT(ms)..>
Transport: <TransportId……..> <BindAddress………………>
Identify: <Identify/Endpoint…………………………………………………>
Match: <criteria…………………….>
Channel: <ChannelId………………………………..> <State…..> <Time…..>
Exten: <DialedExten………..> CLCID: <ConnectedLineCID…….>
Endpoint: hikari-hgw Not in use 0 of inf OutAuth: hikari-hgw/0003 Aor: hikari-hgw 0 Contact: hikari-hgw/sip:3@192.168.100.1 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
<Registration/ServerURI…………………………> <Auth……….> <Status…….>
hikari-hgw/sip:192.168.100.1 hikari-hgw Registered
Objects found: 1
とりあえず、動くようになったのでいったんここまで。