匿名

差分

Asterisk pjsip

2,543 バイト追加, 2018年11月2日 (金) 15:23
Wizard
AsiteriskでチャネルにPjSIPを使用する際の設定方法など
==コンパイル==
Asterisk 13以前ではpjprojectを別個インストールするか、configureに13まではpjprojectを別個インストールするか、configureに--with-pjproject-bundledを付けて実行する必要がありましたが、Asterisk 16からはデフォルトでbundledインストールされるようになりました。<BR>
各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。<BR>
[[Asterisk 13]]<BR>
[[Asterisk 16]]<BR>
 
==変換ツール==
Asterisk 13以降であれば ソースディレクトリ/contrib/scripts/sip_to_pjsip の下にPythonのスクリプトがあります(複数)。sip.confのあるディレクトリでこれを実行するとpjsip.confに変換してくれます。#includeしている場合にはそれらも変換してくれますが、完璧ではないです。
==Asterisk 16における注意点==
PjSIPはres_statsd.soに依存します。このためres_statsdがloadされていないと、res_pjsipがloadされない問題が発生します。<BR>
(Asterisk 16ではモジュールの依存関係チェックが厳密化されています)<BR>
res_statsdモジュールはstatsd.confファイルが無いとloadされないため、statsd.confファイルが無いだけで、PjSIPが使えないという困った状態になります。ソースファイルに含まれる statsd.conf.sample を /etc/asterisk/statsd.conf にコピーしておいてください。もっとも、このファイルはコメントされた行だけなので要するに空なのですが。
==パラメータ一覧==[[Asterisk pjsip parameters]] ==基本設定(電話機:エンドポイント)==
*間違いやすいところ
:sip.confでは1wordだったのがアンダーバーが入る
:dtmfmode → dtmf_mode
:fromdomain → from_domain
===グローバル設定===
pjsip設定は基本としてはpjsip.confに書きます。基本で必要なものは以下です。confに書きます。<BR>*[[Asterisk_pjsip_parameters#GLOBAL]]<BR>グローバル設定を使用する場合にはtype=grobalのセクションを書きます。<BR> [grobal] type=grobal max_forwards = 50SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。<BR>*[[Asterisk_pjsip_parameters#SYSTEM]]<BR> ===インクルード===Asteriskの他の設定ファイル同様に#includeが使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかもしれません。例えば<BR>
[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5070
sip.confに書いていたものと同じですが、トランスポートはセクションで明示指定します。上の例では5070ポートにbindさせていますが、5060を使用する場合にはここを5060にします。<BR>
なお、他の設定ファイル同様に#includeは使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかもしれません。例えば<BR>
[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:507
#include pjsip_phones.conf
#include pjsip_trunk_hikari.conf
のようにファイルを分割し、includeすると管理が楽になります。
 
基本で必要なものは以下です。
 
===トランスポート===
[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5070
sip.confに書いていたものと同じですが、トランスポートはセクションで明示指定します。上の例では5070ポートにbindさせていますが、5060を使用する場合にはここを5060にします。<BR>
===ACL===
permit=192.168.0.0/16
permit=10.10.0.0/16
のように書きます。<BR>*[[Asterisk_pjsip_parameters#ACL.28res_pjsip_acl.29]]→[[Asterisk pjsip ACL]]
===エンドポイント認証情報(電話機Auth)===エンドポイントを設定する場合にはセクションが3つ必要です。エンドポイントそれ自体とaor,authの3つです。sip_confではピア(エンドポイント)の認証がわかりにくかったのですが、PjSIPでは別なセクションで(type=auth)認証情報を定義するようになりました。このため、認証情報がピア名(sip.confの[ ])に紐付かなくなりました。<BR>慣れないとわかりにくい感じがしますが、管理がより柔軟になります。例えば [phone1some-phone] type = aorendpoint max_contacts = 1. . . qualify_frequency auth = 30phone-auth authenticate_qualify outbound_auth = nophone-out-auth のようなendpointが定義されている場合には、2つのauthセクションが必要です。 [phone1phone-auth]
type = auth
username = phone3phone123 password = mysecretpasswordphonepassword このAuthは'[phone1some-phone]'エンドポイントに接続、すまり外からの"入り"の際の認証情報です。<BR> type = endpoint context = default transport=transport[phone-out-udp dtmf_mode = rfc4733 disallow = all allow = ulaw allow = alaw rtp_symmetric = yes force_rport = yes rewrite_contact = yes direct_media = no send_pai = yes inband_progress = yes call_group = 1 pickup_group = 1 language = ja device_state_busy_at = 1 auth = phone1 outbound_auth = phone1] aors = phone1エンドポイントにACLを使用する場合には acl=myhouseのように書きますが、この場合の名前付きACLは'''Asteriskの名前付きALC'''です。<BR>つまりacl.confに設定されている名前付きACLということです。pjsipのACLではないので注意してください。このAuthはoutbound_authで設定されているので、このエンドポイントからの"出"の際の認証情報です。<BR>
==電話機==
電話機の接続は [[Asterisk pjsip 電話機]] のページへ
==トランク==
回線接続側は [[Asterisk pjsip trunks]]のページへ
*Wizard用のファイル名はpjsip_wizard.conf
*共通化したテンプレート内で各セクションを指定するにはスラッシュ(/)で区切る
*Wizardは電話機でもトランクでも使用できる
:registration/を書くとregistrationセクションがつくられる
:例: endpoint/dtmf_mode
pjsip_wizard.confの記述例
*AORを表示するのは一覧ならpjsip show aorsでピアの情報を表示するのはpjsip show aor phone1のようにする
*それぞれの設定項目で何が設定されているかを確認するには pjsip show endpoint phone1 のようにすると phone1 の endpoint パラメータ一覧が表示される。aorを見たければ pjsip show aor phone1。これはトランクの場合も同様で pjsip show regstration hikari-hgw のようにするとregister関係のパラメータがみえる。
==挙動上の注意点==
===挙動そのもの===
chan_sipより制限が少し"きつい"です。SIPメッセージの中に少しおかしなものがあってもchan_sipでは制限が緩かったので、通っていたものがPjSIPでは通らないことがあります。CLI等で'syntax error'のようなメッセージが出る場合にはSIPメッセージにおかしなところがあるかもしれないので調べてください。
===AddHeader===
chan_sipの場合にはSIPAddHeaderでSIPヘッダを追加できましたが、PjSIPではファンクションPJSIP_HEDER()を使用します。ただしこのファンクションはextenの途中で使用しても効果がありません。Dial時にサブルーチンコールしてやる必要があります。<BR>
例えばAlert-Info: hogeを追加するにはまず以下のよなルーチンを定義します。
[add-alert]
exten => s,1,Set(PJSIP_HEADER(add,Alert-Info)=hoge)
exten => s,n,Return
Dial時に以下のようにしてコールします
exten => 201,1,Dial(PJSIP/201,,b(add-alert,s,1))
==設定変更の反映==
*module reload res_pjsip.soを実行すれば"だいたい"はいけそう
:wizardのaor/を変更しても反映されない場合がある
==PjSIPで拡張される機能==
[[pjsip_機能拡張]]