差分

移動先: 案内検索

Asterisk pjsip

9,274 バイト追加, 2021年5月27日 (木) 13:15
デバッグ
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=globalのセクションを書きます。<BR> <nowiki>[global]type=globalmax_forwards = 50</nowiki>SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。<BR>*[[generalAsterisk_pjsip_parameters#SYSTEM]]<BR> ===インクルード===Asteriskの他の設定ファイル同様に#includeが使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかもしれません。例えば<BR> maxexpirey [transport-udp] type = 3600transport protocol = udp bind = 0.0.0.0:5070
#include pjsip_phones.conf
#include pjsip_trunk_hikari.conf
のようにファイルを分割し、includeすると管理が楽になります。
 
基本で必要なものは以下です。
 
===トランスポート===
[transport-udp]
type = transport
bind = 0.0.0.0:5070
sip.confに書いていたものと同じですが、トランスポートはセクションで明示指定します。上の例では5070ポートにbindさせていますが、5060を使用する場合にはここを5060にします。<BR>
なお、他の設定ファイル同様に#includeは使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかも。<BR>
Wizardおよびテンプレート(!)も使えます。
===ACL===
ACLの例は次の通りです。
[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/25516※deny,permitはこの順でないとpermitしてdenyしてしまう模様で、逆に書くと誰も使えなくなります。<BR><BR>pjsip.confに複数のACL(type=acl)を書くとそのセクション名にかかわらず後ろにあるACLの方が勝つ模様。<BR> [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.2550 permit=10.10.0.0/16※deny,permitはこの順でないとpermitしてdenyしてしまう模様で、逆に書くと誰も使えなくなります。と、書くと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のように書きます。<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は'[some-phone]'エンドポイントに接続、つまり外からの"入り"の際の認証情報です。<BR> [phone-out-auth]このAuthはoutbound_authで設定されているので、このエンドポイントからの"出"の際の認証情報です。<BR> ==電話機==電話機の接続は [[Asterisk pjsip 電話機]] のページへ==トランク==回線接続側は [[Asterisk pjsip trunks]]のページへ ==Wizard==Asteriskにはpjsip_wizardが組み込まれており、PjSIPの設定を簡素化することができます。使う場合の条件は以下の通りです。*基本の設定はpjsip.confに書く:transportなどの情報はpjsip.confに書く必要があります*Wizard用のファイル名はpjsip_wizard.conf*共通化したテンプレート内で各セクションを指定するにはスラッシュ(/)で区切る*Wizardは電話機でもトランクでも使用できる:registration/を書くとregistrationセクションがつくられる:例: endpoint/dtmf_modepjsip_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 type inbound_auth/password = mypasswordishere ==CLIコマンド==*sip show peersに対応するのはpjsip show endpoints*sip show peer phone1などピア情報を表示するのはpjsip show endpointphone1*AORを表示するのは一覧ならpjsip show aorsでピアの情報を表示するのはpjsip show aor phone1のようにする*それぞれの設定項目で何が設定されているかを確認するには pjsip show endpoint phone1 のようにすると phone1 の endpoint パラメータ一覧が表示される。aorを見たければ pjsip show aor phone1。これはトランクの場合も同様で pjsip show registration hikari-hgw のようにするとregister関係のパラメータがみえる。===デバッグ===chan_sipのsip debug代わりに使えるのは、pjsip debug history。SIPメッセージの確認はこちらの方が簡単かも。 ヒストリをクリア context *CLI> pjsip set history clear PJSIP History cleared ヒストリをONに設定 *CLI> pjsip set history on PJSIP History enable なんかやる ヒストリをOFFに設定 *CLI> pjsip set history off PJSIP History disabled ヒストリをみる *CLI> pjsip show history No. Timestamp (Dir) Address SIP Message ===== ========== ============================== =================================== default transport00047 1620781794 * <=transport-udp= 192.168.254.10:5060 INVITE sip:201@192.168.254.234:5070 SIP/2.0 00048 1620781794 * ==> 192.168.254.10:5060 SIP/2.0 401 Unauthorized 00049 1620781794 * <== 192.168.254.10:5060 ACK sip:201@192.168.254.234:5070 SIP/2.0 00050 1620781794 * <== 192.168.254.10:5060 INVITE sip:201@192.168.254.234:5070 SIP/2.0 00051 1620781794 * ==> 192.168.254.10:5060 SIP/2.0 100 Trying 00052 1620781794 * ==> 192.168.254.3:5060 INVITE sip:phone1@192.168.254.3:5060 SIP/2.0 00053 1620781794 * <== 192.168.254.3:5060 SIP/2.0 100 Trying dtmf_mode 00054 1620781795 * = rfc4733=> 192.168.254.4:5060 OPTIONS sip:phone6@192.168.254.4:5060 SIP/2.0 disallow 00055 1620781795 * <= all= 192.168.254.4:5060 SIP/2.0 200 OK allow 00056 1620781796 * <= ulaw= 192.168.254.3:5060 SIP/2.0 180 Ringing allow 00057 1620781796 * = alaw=> 192.168.254.10:5060 SIP/2.0 183 Session Progress rtp_symmetric 00058 1620781797 * <= yes= 192.168.254.3:5060 SIP/2.0 200 OK force_rport 00059 1620781797 * == yes> 192.168.254.3:5060 ACK sip:phone1@192.168.254.3:5060 SIP/2.0 rewrite_contact 00060 1620781797 * == yes> 192.168.254.10:5060 SIP/2.0 200 OK direct_media 00061 1620781797 * <== no192.168.254.10:5060 ACK sip:192.168.254.234:5070 SIP/2.0 send_pai 00062 1620781799 * <= yes= 192.168.254.3:5060 BYE sip:asterisk@192.168.254.234:5070 SIP/2.0 inband_progress 00063 1620781799 * = yes=> 192.168.254.3:5060 SIP/2.0 200 OK call_group 00064 1620781799 * = 1=> 192.168.254.10:5060 BYE sip:phone3@192.168.254.10:5060 SIP/2.0 pickup_group 00065 1620781799 * <= 1= 192.168.254.10:5060 SIP/2.0 200 OK 特定のメッセージを確認する *CLI> pjsip show history entry 56 <--- History Entry 56 Received from 192.168.254.3:5060 at 1620781796 ---> SIP/2.0 180 Ringing language Via: SIP/2.0/UDP 192.168.254.234:5070;rport= ja5070;received=192.168.254.234;branch=z Call-ID: fd5b758b-06e4-48cf-97e9-c815623ba9af device_state_busy_at From: "203" <sip:203@192.168.254.234>;tag= 1bedf1400-19fc-4c8d-80c2-f7a280ca9978 auth To: <sip:phone1@192.168.254.3>;tag= 1946423440 CSeq: 4197 INVITE Allow: INVITE, ACK, CANCEL, BYE, INFO, UPDATE, OPTIONS, MESSAGE, NOTIFY, REFER Contact: <sip:phone1@192.168.254.3:5060> Server: Panasonic-KX-HDV330N/02.504 (bcc3423c1e0c) Content-Length: 0 Content-Length: 0 chan_sipのようにダラダラ出したい場合は *CLI> pjsip set logger on ==挙動上の注意点=====挙動そのもの===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) outbound_auth exten = phone1> s,n,ReturnDial時に以下のようにしてコールします aors exten => 201,1,Dial(PJSIP/201,,b(add-alert,s,1)) ==設定変更の反映==*モジュール数が多すぎて一発リロードする方法がよくわからない*module reload res_pjsip.soを実行すれば"だいたい"はいけそう:wizardのaor/を変更しても反映されない場合がある== phone1PjSIPで拡張される機能==[[pjsip_機能拡張]]

案内メニュー

VoIp-Info.jp

HP Directplus -HP公式オンラインストア-