<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://www.voip-info.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hiroysato</id>
	<title>VoIP-Info.jp - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="http://www.voip-info.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hiroysato"/>
	<link rel="alternate" type="text/html" href="http://www.voip-info.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Hiroysato"/>
	<updated>2026-04-09T22:55:28Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://www.voip-info.jp/index.php?title=Asterisk_pjsip&amp;diff=11394</id>
		<title>Asterisk pjsip</title>
		<link rel="alternate" type="text/html" href="http://www.voip-info.jp/index.php?title=Asterisk_pjsip&amp;diff=11394"/>
		<updated>2020-12-22T13:07:39Z</updated>

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