Asterisk pjsipのソースを表示
←
Asterisk pjsip
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます: メール確認された利用者、
管理者
。
このページのソースの閲覧やコピーができます。
[[カテゴリ:Asterisk]] [[カテゴリ:pjsip]] [[カテゴリ:SIP]] AsiteriskでチャネルにPjSIPを使用する際の設定方法など<br> <strong>注意!:Asterisk 22(LTS)ではchan_sipは提供されません。完全に削除されていますので早急にpjsipへの移行を進めてください。</strong><br> Asterisk 18ベースでパラメータ表を作成していますが、21,22で項目が追加されているものもあるため気付いた方は編集をお願いします。 ==コンパイル== Asterisk 13まではpjprojectを別個インストールするか、configureに--with-pjproject-bundledを付けて実行する必要がありましたが、Asterisk 16からはデフォルトでbundledインストールされるようになりました(個別インストール、明示指定してのコンパイル必要なし)。<BR> 各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。<BR> [[Asterisk 13]]<BR> [[Asterisk 16]]<BR> ※Asterisk 16以降ではデフォルトでコンパイルされるためasteriskをmakeするだけです。Asterisk 18,20,22では特に気にせずともPjSIPがコンパイルされます。<br> [[Asterisk 22]]ではchan_sipが完全削除され、SIPチャネルはPjSIPのみになっています。 ==変換ツール== 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]] ==基本設定== *「呼び方」のちがい :chan_sipではピア(peer)と呼んでいたものはエンドポイント(endpoint) *間違いやすいところ :sip.confでは1wordだったのがアンダーバーが入る :dtmfmode → dtmf_mode :fromdomain → from_domain ===セクション名と種別=== [ここはあくまでも"名前"] type=ここがそのセクションの種別 例: [myitsp] type = registration このセクションは"myitsp"に対するREGISTERの情報 [myitsp] type = endpoint このセクションはmyitspのエンドポイント情報 ===グローバル設定=== 設定は基本としてはpjsip.confに書きます。<BR> *[[Asterisk_pjsip_parameters#GLOBAL]]<BR> グローバル設定を使用する場合にはtype=globalのセクションを書きます。<BR> <nowiki>[global] type=global max_forwards = 50</nowiki> SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。<BR> *[[Asterisk_pjsip_parameters#SYSTEM]]<BR> ===インクルード=== Asteriskの他の設定ファイル同様に#includeが使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかもしれません。例えば<BR> [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にします。<BR> ===ACL=== ACLの例は次の通りです。 [acl] type=acl deny=0.0.0.0/0.0.0.0 permit=192.168.0.0/16 ※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.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 のように書きます。<BR> *[[Asterisk_pjsip_parameters#ACL.28res_pjsip_acl.29]] →[[Asterisk pjsip ACL]] ===認証情報(Auth)=== sip_confではピア(エンドポイント)の認証がわかりにくかったのですが、PjSIPでは別なセクションで(type=auth)認証情報を定義するようになりました。このため、認証情報がピア名(sip.confの[ ])に紐付かなくなりました。<BR> 慣れないとわかりにくい感じがしますが、管理がより柔軟になります。例えば [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]'エンドポイントに接続、つまり外からの"入り"の際の認証情報です。<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/context=mycontext :endpoint/dtmf_mode=inband :aor/max_contacts = 1 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 [phone2](phone-defaults) inbound_auth/username = phone2 inbound_auth/password = anotherpasswordishere [phone3](phone-defaults) inbound_auth/username = phone3 inbound_auth/password = yetanotherpasswordishere ==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 registration hikari-hgw のようにするとregister関係のパラメータがみえる。 ===デバッグ=== chan_sipのsip debug代わりに使えるのは、pjsip debug history。SIPメッセージの確認はこちらの方が簡単かも。 ヒストリをクリア *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 ===== ========== ============================== =================================== 00047 1620781794 * <== 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 00054 1620781795 * ==> 192.168.254.4:5060 OPTIONS sip:phone6@192.168.254.4:5060 SIP/2.0 00055 1620781795 * <== 192.168.254.4:5060 SIP/2.0 200 OK 00056 1620781796 * <== 192.168.254.3:5060 SIP/2.0 180 Ringing 00057 1620781796 * ==> 192.168.254.10:5060 SIP/2.0 183 Session Progress 00058 1620781797 * <== 192.168.254.3:5060 SIP/2.0 200 OK 00059 1620781797 * ==> 192.168.254.3:5060 ACK sip:phone1@192.168.254.3:5060 SIP/2.0 00060 1620781797 * ==> 192.168.254.10:5060 SIP/2.0 200 OK 00061 1620781797 * <== 192.168.254.10:5060 ACK sip:192.168.254.234:5070 SIP/2.0 00062 1620781799 * <== 192.168.254.3:5060 BYE sip:asterisk@192.168.254.234:5070 SIP/2.0 00063 1620781799 * ==> 192.168.254.3:5060 SIP/2.0 200 OK 00064 1620781799 * ==> 192.168.254.10:5060 BYE sip:phone3@192.168.254.10:5060 SIP/2.0 00065 1620781799 * <== 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 Via: SIP/2.0/UDP 192.168.254.234:5070;rport=5070;received=192.168.254.234;branch=z Call-ID: fd5b758b-06e4-48cf-97e9-c815623ba9af From: "203" <sip:203@192.168.254.234>;tag=bedf1400-19fc-4c8d-80c2-f7a280ca9978 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) exten => s,n,Return Dial時に以下のようにしてコールします exten => 201,1,Dial(PJSIP/201,,b(add-alert,s,1)) ===エンドポイントの識別=== エンドポイントを識別する際に例えば同一IPアドレスから複数のユーザ名でREGISTERあるいはINVITEしてくるような場合、ユーザ名が正しく識別されないことがあります。これはエンドポイントを識別する際の判断要素の問題で、endpoint_identifier_order で決まります。<br> グローバル設定の endpoint_identifier_order は、デフォルトでip,username,anonymous,header,auth_usernameの順で識別するため、IPアドレスが同一だと同一エンドポイントであると評価してしまいます。このためユーザ名で識別したいような場合には endpoint_identifier_order = username,ip のようにipより前にusernameを指定します。<br> 現在の状態を確認するにはCLIから pjsip show identifiers を実行します。 *CLI> pjsip show identifiers Identifier Names: name not specified ip username anonymous auth_username header request_uri ==設定変更の反映== *モジュール数が多すぎて一発リロードする方法がよくわからない ** [[Asterisk CLI]]で <pre>core reload</pre> を行えば、その他のモジュールといっしょにリロードできます(Asterisk 16と20で確認)。 *module reload res_pjsip.soを実行すれば"だいたい"はいけそう :wizardのaor/を変更しても反映されない場合がある *[[Asterisk 22]]から(21から)はpjsip_res_config_wizard.soが個別リロードに対応 ==PjSIPで拡張される機能== [[pjsip_機能拡張]]
Asterisk pjsip
に戻る。
ナビゲーション メニュー
個人用ツール
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
ヘルプ
広告
サイトコンテンツ
コミュニティ
Asterisk
Asterisk 18
Asterisk 20
Asterisk 22
IP電話機
購入情報
導入事例
回線接続
ベンダー
ひかり電話
セキュリティ
イベント情報
スペシャル
Asterisk pjsip
ABS
黒電話 ハック
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報