「Asterisk pjsip」の版間の差分
(同じ利用者による、間の18版が非表示) | |||
4行目: | 4行目: | ||
AsiteriskでチャネルにPjSIPを使用する際の設定方法など | AsiteriskでチャネルにPjSIPを使用する際の設定方法など | ||
==コンパイル== | ==コンパイル== | ||
Asterisk | Asterisk 13まではpjprojectを別個インストールするか、configureに--with-pjproject-bundledを付けて実行する必要がありましたが、Asterisk 16からはデフォルトでbundledインストールされるようになりました。<BR> | ||
各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。<BR> | 各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。<BR> | ||
[[Asterisk 13]]<BR> | [[Asterisk 13]]<BR> | ||
[[Asterisk 16]]<BR> | [[Asterisk 16]]<BR> | ||
==変換ツール== | ==変換ツール== | ||
Asterisk 13以降であれば ソースディレクトリ/contrib/scripts/sip_to_pjsip の下にPythonのスクリプトがあります(複数)。sip.confのあるディレクトリでこれを実行するとpjsip.confに変換してくれます。#includeしている場合にはそれらも変換してくれますが、完璧ではないです。 | 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だったのがアンダーバーが入る | :sip.confでは1wordだったのがアンダーバーが入る | ||
:dtmfmode → dtmf_mode | :dtmfmode → dtmf_mode | ||
:fromdomain → from_domain | |||
===グローバル設定=== | ===グローバル設定=== | ||
設定は基本としてはpjsip.confに書きます。<BR> | 設定は基本としてはpjsip.confに書きます。<BR> | ||
22行目: | 31行目: | ||
type=grobal | type=grobal | ||
max_forwards = 50 | max_forwards = 50 | ||
SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。 | SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。<BR> | ||
*[[Asterisk_pjsip_parameters#SYSTEM]]<BR> | *[[Asterisk_pjsip_parameters#SYSTEM]]<BR> | ||
71行目: | 80行目: | ||
のように書きます。<BR> | のように書きます。<BR> | ||
*[[Asterisk_pjsip_parameters#ACL.28res_pjsip_acl.29]] | *[[Asterisk_pjsip_parameters#ACL.28res_pjsip_acl.29]] | ||
→[[Asterisk pjsip ACL]] | |||
=== | ===認証情報(Auth)=== | ||
sip_confではピア(エンドポイント)の認証がわかりにくかったのですが、PjSIPでは別なセクションで(type=auth)認証情報を定義するようになりました。このため、認証情報がピア名(sip.confの[ ])に紐付かなくなりました。<BR> | |||
[ | 慣れないとわかりにくい感じがしますが、管理がより柔軟になります。例えば | ||
type = | [some-phone] | ||
type = endpoint | |||
. | |||
. | |||
. | |||
[ | auth = phone-auth | ||
outbound_auth = phone-out-auth | |||
のようなendpointが定義されている場合には、2つのauthセクションが必要です。 | |||
[phone-auth] | |||
type = auth | type = auth | ||
username = | username = phone123 | ||
password = | password = phonepassword | ||
このAuthは'[some-phone]'エンドポイントに接続、すまり外からの"入り"の際の認証情報です。<BR> | |||
[phone-out-auth] | |||
略 | |||
このAuthはoutbound_authで設定されているので、このエンドポイントからの"出"の際の認証情報です。<BR> | |||
==電話機== | |||
電話機の接続は [[Asterisk pjsip 電話機]] のページへ | |||
==トランク== | ==トランク== | ||
回線接続側は [[Asterisk pjsip trunks]]のページへ | 回線接続側は [[Asterisk pjsip trunks]]のページへ | ||
120行目: | 113行目: | ||
*Wizard用のファイル名はpjsip_wizard.conf | *Wizard用のファイル名はpjsip_wizard.conf | ||
*共通化したテンプレート内で各セクションを指定するにはスラッシュ(/)で区切る | *共通化したテンプレート内で各セクションを指定するにはスラッシュ(/)で区切る | ||
*Wizardは電話機でもトランクでも使用できる | |||
:registration/を書くとregistrationセクションがつくられる | |||
:例: endpoint/dtmf_mode | :例: endpoint/dtmf_mode | ||
pjsip_wizard.confの記述例 | pjsip_wizard.confの記述例 | ||
160行目: | 155行目: | ||
*AORを表示するのは一覧ならpjsip show aorsでピアの情報を表示するのはpjsip show aor phone1のようにする | *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関係のパラメータがみえる。 | *それぞれの設定項目で何が設定されているかを確認するには 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)) | |||
==設定変更の反映== | ==設定変更の反映== | ||
165行目: | 171行目: | ||
*module reload res_pjsip.soを実行すれば"だいたい"はいけそう | *module reload res_pjsip.soを実行すれば"だいたい"はいけそう | ||
:wizardのaor/を変更しても反映されない場合がある | :wizardのaor/を変更しても反映されない場合がある | ||
==PjSIPで拡張される機能== | |||
[[pjsip_機能拡張]] |
2018年11月2日 (金) 15:23時点における版
AsiteriskでチャネルにPjSIPを使用する際の設定方法など
コンパイル
Asterisk 13まではpjprojectを別個インストールするか、configureに--with-pjproject-bundledを付けて実行する必要がありましたが、Asterisk 16からはデフォルトでbundledインストールされるようになりました。
各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。
Asterisk 13
Asterisk 16
変換ツール
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されない問題が発生します。
(Asterisk 16ではモジュールの依存関係チェックが厳密化されています)
res_statsdモジュールはstatsd.confファイルが無いとloadされないため、statsd.confファイルが無いだけで、PjSIPが使えないという困った状態になります。ソースファイルに含まれる statsd.conf.sample を /etc/asterisk/statsd.conf にコピーしておいてください。もっとも、このファイルはコメントされた行だけなので要するに空なのですが。
パラメータ一覧
基本設定
- 間違いやすいところ
- sip.confでは1wordだったのがアンダーバーが入る
- dtmfmode → dtmf_mode
- fromdomain → from_domain
グローバル設定
設定は基本としてはpjsip.confに書きます。
グローバル設定を使用する場合にはtype=grobalのセクションを書きます。
[grobal] type=grobal max_forwards = 50
SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。
インクルード
Asteriskの他の設定ファイル同様に#includeが使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかもしれません。例えば
[transport-udp] type = transport protocol = udp bind = 0.0.0.0:5070 #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にします。
ACL
ACLの例は次の通りです。
[acl] type=acl deny=0.0.0.0/0.0.0.0 permit=192.168.0.0/16
※deny,permitはこの順でないとpermitしてdenyしてしまう模様で、逆に書くと誰も使えなくなります。
pjsip.confに複数のACL(type=acl)を書くとそのセクション名にかかわらず後ろにあるACLの方が勝つ模様。
[acl] type=acl deny=0.0.0.0/0.0.0.0 permit=192.168.0.0/16 [acl-my] type=acl deny=0.0.0.0/0.0.0.0 permit=10.10.0.0/16
と、書くとacl-myが勝つので要注意です。複数を許可したい場合には1セクションで
[acl] type=acl deny=0.0.0.0/0.0.0.0 permit=192.168.0.0/16 permit=10.10.0.0/16
のように書きます。
認証情報(Auth)
sip_confではピア(エンドポイント)の認証がわかりにくかったのですが、PjSIPでは別なセクションで(type=auth)認証情報を定義するようになりました。このため、認証情報がピア名(sip.confの[ ])に紐付かなくなりました。
慣れないとわかりにくい感じがしますが、管理がより柔軟になります。例えば
[some-phone] type = endpoint . . . auth = phone-auth outbound_auth = phone-out-auth
のようなendpointが定義されている場合には、2つのauthセクションが必要です。
[phone-auth] type = auth username = phone123 password = phonepassword
このAuthは'[some-phone]'エンドポイントに接続、すまり外からの"入り"の際の認証情報です。
[phone-out-auth] 略
このAuthはoutbound_authで設定されているので、このエンドポイントからの"出"の際の認証情報です。
電話機
電話機の接続は Asterisk pjsip 電話機 のページへ
トランク
回線接続側は Asterisk pjsip trunksのページへ
Wizard
Asteriskにはpjsip_wizardが組み込まれており、PjSIPの設定を簡素化することができます。使う場合の条件は以下の通りです。
- 基本の設定はpjsip.confに書く
- transportなどの情報はpjsip.confに書く必要があります
- Wizard用のファイル名はpjsip_wizard.conf
- 共通化したテンプレート内で各セクションを指定するにはスラッシュ(/)で区切る
- Wizardは電話機でもトランクでも使用できる
- registration/を書くとregistrationセクションがつくられる
- 例: endpoint/dtmf_mode
pjsip_wizard.confの記述例
;電話機用テンプレート(共通設定) [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 endpoint/transport = transport-udp aor/max_contacts = 1 aor/qualify_frequency = 30 aor/authenticate_qualify = no ;各電話機個別設定 [phone1](phone-defaults) inbound_auth/username = phone1 inbound_auth/password = mypasswordishere
CLIコマンド
- sip show peersに対応するのはpjsip show endpoints
- sip show peer phone1などピア情報を表示するのはpjsip show endpoint phone1
- 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時にサブルーチンコールしてやる必要があります。
例えば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/を変更しても反映されない場合がある