妄想日記 by 妄想エンジン


令和3年度最新版 asterisk で電話であそぶ(その1)

以前より、自宅の電話はひかり電話を使っています。
これ、IP電話なので、普通にスマホと接続したり転送したりすることができます。
そのまま使っても別段問題ないのですが、せっかくなので asterisk とつないで遊んでみます。

例によって例のごとく、環境は FreeBSD-12.2 Release 上に、qjail で 専用の jail を作って、そこに環境を構築します。
こうしておけば、バックアップも簡単に取れますし、バージョン上げるのも安心です。
Linux の場合は Docker でも使うといいんじゃないかな?

まずは asterisk 本体のインストール。
最近はパッケージから入れることが多くなりました。
設定ファイル書き換えるのに vim も入れておきます。これはコンソール版だけでいいよね。
そして日本語音源のインストール。これはパッケージがないのでportsから入れます。

# pkg install asterisk18 vim-tiny
# cd /usr/ports/japanese/asterisk-sounds/
# make install clean

さっくり。
あとは自動起動するように /et/rc.conf を変更します。

# sysrc asterisk_enable="YES"

あとは設定です。
まずはひかり電話との接続です。
以前は 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%...
ありがたやありがたや。

# vim pjsip.conf
[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5070
local_net = 192.168.0.0/16

[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 一択です。

# vim iax.conf

[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] 以降のエントリを適当に増やしてあげると、無限に子機をぶら下げられます。まあ逸般の誤家庭ではそんなに台数無いとおもうけど、二桁程度はいっても大丈夫。
そして最後にダイヤルプラン。ここはいろいろ凝りだすときりがないので、まずは最低限の電話を受けて、かけられるとこまで。

# vim extensions.conf
[globals]
MYNUMBER=03xxxxxxxx
ALLMEMBERS=IAX2/201&IAX2/212
;ALLMEMBERS=IAX2/212

[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 を起動します

# service asterisk start
# asterisk -vvvvr

これで、asterisk の cui が起動しますので、いろいろ確かめてみましょう

*CLI> pjsip show endpoints

Endpoint:
I/OAuth:
Aor:
Contact:
Transport:
Identify:
Match:
Channel:
Exten: CLCID:
==========================================================================================

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

ちゃんと、ひかり電話とつながってますね。めでたしめでたし。
同様にして、子機ともつながっているか確認します。

*CLI> iax2 show peers
Name/Username Host Mask Port Status Description
201/201 192.168.100.106 (D) (null) 59928 Unmonitored
212/212 192.168.100.209 (D) (null) 57341 Unmonitored
2 iax2 peers [0 online, 0 offline, 2 unmonitored]

おけおけ。ばっちり。
あとは電話をかけたりうけたりを実際にしてみましょう。問題なければひとまずはおっけーです。
これでスマホを自宅で子機にして使うことができるようになりました。
ここでいったん環境を保存しておきましょう。jail の外で作業します。

> sudo qjail stop phone
> sudo qjail archive phone
> sudo qjail start phone

自動でasterisk が起動して、スマホがつながっていることを確認してください。

とりあえず、動くようになったのでいったんここまで。

ツイート
|top |アフィリエイト |windowsネタ |料理メモ |コンタクト |twitter |
さわやかなエロスを目指す--妄想エンジン ©1996-2022
コンテンツ配信