22(LTS)ではchan_sipは提供されません。完全に削除されていますので早急にpjsipへの移行を進めてください。18ベースでパラメータ表を作成していますが、21,22で項目が追加されているものもあるため気付いた方は編集をお願いします。16からはデフォルトでbundledインストールされるようになりました(個別インストール、明示指定してのコンパイル必要なし)。各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。16以降ではデフォルトでコンパイルされるためasteriskをmakeするだけです。18,20,22では特に気にせずともPjSIPがコンパイルされます。22ではchan_sipが完全削除され、SIPチャネルはPjSIPのみになっています。下にPythonのスクリプトがあります(複数)。sip.confのあるディレクトリでこれを実行するとpjsip.confに変換してくれます。#includeしている場合にはそれらも変換してくれますが、完璧ではないです。16以降における注意点PjSIPはres_statsd.soに依存します。このためres_statsdがloadされていないと、res_pjsipがloadされない問題が発生します。16以降ではモジュールの依存関係チェックが厳密化されています)res_statsdモジュールはstatsd.confファイルが無いとloadされないため、statsd.confファイルが無いだけで、PjSIPが使えないという困った状態になります。コピーしておいてください。このファイルはコメントされた行だけなので要するに空なのですが。設定は基本としてはpjsip.confに書きます。Asterisk_pjsip_parameters#GLOBALグローバル設定を使用する場合にはtype=globalのセクションを書きます。50SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。Asterisk_pjsip_parameters#SYSTEMインクルードAsteriskの他の設定ファイル同様に#includeが使えます。電話機と回線は別ファイルにした方が見通しは良いかもしれません。pjsip_trunk_hikari.confのようにファイルを分割し、includeすると管理が楽になります。基本で必要なものは以下です。0.0.0.0:5070sip.confに書いていたものと同じですが、トランスポートはセクションで明示指定します。上の例では5070ポートにbindさせていますが、5060を使用する場合にはここを5060にします。ACLACLの例は次の通りです。[acl]type=acldeny=0.0.0.0/0.0.0.0permit=192.168.0.0/16※deny,permitはこの順でないとpermitしてdenyしてしまう模様で、逆に書くと誰も使えなくなります。pjsip.confに複数のACL(type=acl)を書くとそのセクション名にかかわらず後ろにあるACLの方が勝つ模様。[acl]type=acldeny=0.0.0.0/0.0.0.0permit=192.168.0.0/16[acl-my]type=acldeny=0.0.0.0/0.0.0.0permit=10.10.0.0/16と、書くとacl-myが勝つので要注意です。複数を許可したい場合には1セクションで[acl]type=acldeny=0.0.0.0/0.0.0.0permit=192.168.0.0/16permit=10.10.0.0/16のように書きます。ACL認証情報(Auth)sip_confではピア(エンドポイント)の認証がわかりにくかったのですが、PjSIPでは別なセクションで(type=auth)認証情報を定義するようになりました。])に紐付かなくなりました。慣れないとわかりにくい感じがしますが、管理がより柔軟になります。phone-out-authのようなendpointが定義されている場合には、2つのauthセクションが必要です。phonepasswordこのAuthは'[some-phone]'エンドポイントに接続、つまり外からの"入り"の際の認証情報です。[phone-out-auth]略このAuthはoutbound_authで設定されているので、このエンドポイントからの"出"の際の認証情報です。trunksのページへWizardAsteriskにはpjsip_wizardが組み込まれており、PjSIPの設定を簡素化することができます。使う場合の条件は以下の通りです。パラメータ一覧が表示される。ようにするとregister関係のパラメータがみえる。SIPメッセージの確認はこちらの方が簡単かも。挙動そのものchan_sipより制限が少し"きつい"です。SIPメッセージの中に少しおかしなものがあってもchan_sipでは制限が緩かったので、通っていたものがPjSIPでは通らないことがあります。error'のようなメッセージが出る場合にはSIPメッセージにおかしなところがあるかもしれないので調べてください。AddHeaderchan_sipの場合にはSIPAddHeaderでSIPヘッダを追加できましたが、PjSIPではファンクションPJSIP_HEDER()を使用します。このファンクションはextenの途中で使用しても効果がありません。Dial時にサブルーチンコールしてやる必要があります。hogeを追加するにはまず以下のよなルーチンを定義します。201,1,Dial(PJSIP/201,,b(add-alert,s,1))エンドポイントの識別エンドポイントを識別する際に例えば同一IPアドレスから複数のユーザ名でREGISTERあるいはINVITEしてくるような場合、ユーザ名が正しく識別されないことがあります。デフォルトでip,username,anonymous,header,auth_usernameの順で識別するため、IPアドレスが同一だと同一エンドポイントであると評価してしまいます。ようにipより前にusernameを指定します。