asteriskでWebRTCサーバーを設定する。
目的:sip_uaを使用するためにまずはサーバーを準備する。
サーバーはAsteriskを使用する。
sip_uaはjsSipを使用しているので、必然的にWebRTCを設定していくことになる。
WebRTCサーバーとして設定する際はソースからインストールする。(必須なスクリプトなどがあるため)
ソースをダウンロードして解凍する。
まずはソースを落とす。こちらから落とす。
展開するディレクトリに移動し、 右クリック→リンクをコピーで好きなやつを落とす。
/usr/local/src
に移動して落とした。
asterisk-**-current.tar.gz
で好きなバージョンをwgetする。
cd /usr/local/src
sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
Asteriskの解凍とprerequirement scriptの実行
Asterisk18の最新が18.15.0
のためこのようになる。
sudo tar -zxvf asterisk-18-current.tar.gz
cd asterisk-18.15.0
prerequirement scriptの実行(結構時間かかる)
cd ./contrib/scripts
sudo ./install_prereq install
configure → make menuselect
cd ../../
sudo ./configure
sudo make menuselect
これでopusを選ぶ。
こちらがXXX
となり選べないときはその下に必要なライブラリが出てくるのでそちらをインストールして./configure
する。
私の場合はxmlstarlet
が足りなかったため、そちらをsudo apt install xmlstarlet
した。
また、以下のresorceにチェックがあるか、なければチェックをする。
- res_crypto
- res_http_websocket
- res_pjsip_transport_websocket
make → make install →コンフィグスクリプト→サービス起動
sudo make
sudo make install
sudo make config
sudo service asterisk start
SSL/TLS証明書の作成
次にSSL/TLS証明書を取得する。本当はLet's Encryptなどで取得するべきらしいが、自社鯖なんかで利用するくらいだったら自己署名でもOKかもしれない。
その場合はソースのScriptを利用する。
pbx.example.com
はサーバーのIPアドレス、"My Organization"
は自分とこの名前に置き換える。
途中でパスフレーズの入力があるので適宜入力していく。
cd /usr/local/src/asterisk-18.15.0
sudo mkdir /etc/asterisk/keys
sudo contrib/scripts/ast_tls_cert -C pbx.example.com -O "My Organization" -b 2048 -d /etc/asterisk/keys
ここからは
の通りに設定していく
http.confの設定と確認
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/asterisk.crt
tlsprivatekey=/etc/asterisk/keys/asterisk.key
Asteriskのチェック
raspberrypi*CLI> http show status
HTTP Server Status:
Prefix:
Server: Asterisk
Server Enabled and Bound to 0.0.0.0:8088
HTTPS Server Enabled and Bound to 0.0.0.0:8089
HTTPS Server Enabled and Bound to 0.0.0.0:8089
が出たらOK。
pjsip.confとextensions.confの設定
pjsip.conf
とextensions.conf
は下記より拝借する。
;=========== General settings ===========
[global]
type=global
user_agent=Asterisk PBX
debug=yes
;externip = 192.168.1.6
;localnet=172.17.0.0/255.255.0.0
nat=yes
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
[transport-tcp]
type=transport
protocol=tcp
bind=0.0.0.0
[transport-ws]
type=transport
protocol=ws
bind=0.0.0.0
;=========== Extension 300 ===========
[300]
type=endpoint
context=from-internal
disallow=all
allow=alaw,ulaw
allow=h264,vp8
auth=300
aors=300
callerid=300
identify_by=username,auth_username
;media_address=192.168.1.6
[300]
type=auth
auth_type=userpass
password=300
username=300
[300]
type=aor
max_contacts=1
[400]
type=aor
max_contacts=5
remove_existing=yes
[400]
type=auth
auth_type=userpass
username=400
password=400
[400]
type=endpoint
aors=400
auth=400
callerid=400
dtls_auto_generate_cert=yes
webrtc=yes
; Setting webrtc=yes is a shortcut for setting the following options:
use_avpf=yes
; media_encryption=dtls
; dtls_verify=fingerprint
; dtls_setup=actpass
; ice_support=yes
media_use_received_transport=yes
rtcp_mux=yes
context=from-internal
disallow=all
allow=alaw,ulaw
allow=h264,vp8
identify_by=username,auth_username
[500]
type=aor
max_contacts=5
remove_existing=yes
[500]
type=auth
auth_type=userpass
username=500
password=500
[500]
type=endpoint
aors=500
auth=500
callerid=500
dtls_auto_generate_cert=yes
webrtc=yes
; Setting webrtc=yes is a shortcut for setting the following options:
use_avpf=yes
; media_encryption=dtls
; dtls_verify=fingerprint
; dtls_setup=actpass
; ice_support=yes
media_use_received_transport=yes
rtcp_mux=yes
context=from-internal
disallow=all
allow=alaw,ulaw
allow=h264,vp8
identify_by=username,auth_username
[from-internal]
exten => 100,1,Answer()
same => n,Wait(1)
same => n,Playback(hello-world)
same => n,Echo()
same => n,Hangup()
exten => _XXX,1,Dial(PJSIP/${EXTEN})
same => n,Hangup()
以上。
Discussion