Asterisk 20 サンプル設定ファイル 解説 pjsip
PJSIPの設定は基本がpjsip.confですが可読性を上げるため複数のファイルに分けて#includeしています。
PJSIPの各種パラーメータは Asterisk_pjsip_parameters を参照してください。
pjsip.conf
[system] type = system disable_rport = yes [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 ;ITSP/IP電話によってはpermitを指定する必要あり ;SIPメッセージ上で『見える』IPアドレスに注意 ;ブラウザフォン用トランスポート(Websocket) ;使う場合にはコメントを外す ;#include "pjsip_wsstransport.conf" ;外線接続用例 ;#include "pjsip_trunk_hgw.conf" ;#include "pjsip_trunk_hikari-rtx.conf"
pjsip.conf には基本の設定を記述しています。トランスポートは基本はUDPでポートを5070としています。SIPのデフォルトである5060ではなく5070な点に注意してください。
外線接続時はACLの設定に注意してください。ACLで引っ掛かるとCLIに出ますのでメッセージを確認し所定のアドレスに許可を与えるようにします。
WSS(Websocket)トランスポートはブラウザフォン用です。使用する場合にはコメントを外します。
pjsip_wizard.conf
電話機の収容設定はpjsip_wizard.confで行っています。ただしサンプル設定ファイルのセットではpjsip_wizard.confはスクリプト、pj_phonegen.shで生成できるようにしてあります。
電話機の基本設定は共通部分はテンプレート化してあります。
;電話機用テンプレート(共通設定) [phone-defaults](!) type=wizard transport = transport-udp accepts_registrations = yes sends_registrations = no accepts_auth = yes sends_auth = no endpoint/context = default endpoint/dtmf_mode = rfc4733 endpoint/call_group = 1 endpoint/pickup_group = 1 endpoint/language = ja endpoint/disallow = all endpoint/allow = ulaw endpoint/rtp_symmetric = yes endpoint/force_rport = yes endpoint/direct_media = no endpoint/send_pai = yes endpoint/send_rpid = yes endpoint/rewrite_contact = yes endpoint/inband_progress = yes endpoint/allow_subscribe = yes aor/max_contacts = 2 aor/qualify_frequency = 30 aor/authenticate_qualify = no aor/remove_existing = yes
各パラーメータの意味と内容は Asterisk_pjsip_parameters を参照してください。スラッシュ(/)で区切られているものはそれぞれのセクションに記述すべき内容のことで、例えば endpoint/context= は endpoint セクションに書く context= の意味です。テンプレートは普通の電話機用とブラウザフォン用の2つが用意されています。
各電話機部分は基本、認証情報のみです。
[phone1](phone-defaults) inbound_auth/username = phone1 inbound_auth/password = f0064c965a91e513fec766ac0d658ed8
phone1はテンプレートにphone-defaultsを使用し、認証情報はusernameとpasswordで行います。
参考:電話機に対してQualifyした際に認証エラーが出る場合(GS電話機など)には電話機に対して認証付きでQualifyを投げます。その際の認証情報は以下のように記述します。
[phone1](phone-defaults) inbound_auth/username = phone1 inbound_auth/password = f0064c965a91e513fec766ac0d658ed8 outbound_auth/username = phone1 outbound_auth/password = f0064c965a91e513fec766ac0d658ed8
outbound_authも入れるようにシェルスクリプトを修正するのもアリです。
内線の抽象化
今回のサンプル設定ファイルからは少し"難しく"してあり、内線を抽象化しています。これは何かというとPJSIPのエンドポイントと内線番号を"紐付けない"方針です。
従来のサンプル設定ファイルでは次のようにしていました。
まずPJSIPの設定では
[201] type=endpoint . . [201] type=auth . .
のようにPJSIPのエンドポイントとして内線番号を使っていました。こうすることによりextensions.confでは
exten _2XX,1,Dial(PJSIP/${EXTEN})
のようにDial()することでエンドポイントを呼び出すことができました。この方法はとても簡単であり、かつわかりやすいという特徴を持ちます。
ところが内線番号の『付け替え』等の際にはエンドポイントの設定を書き換える必要があり、電話機の設定も書き換える必要があります。
今回のサンプル設定ファイルではこの「紐付け」をやめ、エンドポイントと内線番号は切り離しています。
phone1 => 内線201
このような紐付けはAsteriskのAstDBで行っています。このため、ある電話機、例えば自分の机の上の電話機の内線番号を201から301に変更したい、というような場合にはAsterisk側の設定(DBコマンドの投入)だけで行え、PJSIPのエンドポイント設定は触る必要がありません。触る必要がないのでAsteriskのリロードも不要です。
唯一問題があるとすれば電話機の液晶表示等が内線番号ではなくphone1のようなエンドポイント名になることですが、これは電話機設定で表示を変更できるものは変更するだけですし、液晶以外にテプラ貼ってたりしませんか?
抽象化の実装方法についてはextensionsの内容をみてください。
rtp.conf
ついでにrtp.confの内容も説明しておきましょう。
[general] rtpstart=10000 rtpend=11000 rtcpinterval=5000
SIPは呼制御を行うだけですので、実際の音声(メディア)はRTPを使ってやりとりされます。このRTPでAsterisk側が使うポート範囲を指定します。サンプル設定ファイルでRTPは10000~11000の範囲を使います。
RTCPはブラウザフォンの一部がこの設定が必要となっていたため入れてあります。rtcpintervalはRTCPを投げる間隔をミリ秒で指定するので5秒間隔という設定になります。
udplt.conf
DTLSでUDPを使う場合の設定です。
[general] udptlstart=4000 udptlend=4999 udptlfecentries = 3 udptlfecspan = 3 ;use_even_ports = no
DTLSでUDPを使う場合のAsterisk側のポートが4000~4999を使います。
udptlfecentriesはUDPLパケット内のエラー訂正エントリの数を、udptlfecspanはUDPLパケット内のFECでどのパーティが計算されるかのスパンを指定します。
こちらもブラウザフォン等でDTLSを使用する場合の相手にあわせて設定を調整します。