仮想PBX。パート3:不要なジェスチャーなしでAsteriskをPjSIPに変換します





では最初一連の記事の一部を、我々はchan_sipチャネルドライバを使用してUbuntuを使用してRuVDSと設定の基本的な機能から、VPS上のIP-PBX(IP-PBX)をインストールする方法を考え出しました。このアプローチは非推奨であり、chan_sipのサポートはAsteriskの将来のバージョンで廃止される予定です。代わりに、オープンソースのPjSIPマルチメディアライブラリを使用することをお勧めします。構成ファイルの劇的な違いにもかかわらず、移行は一見したほど難しくはありません。



PjSIPとは何ですか?



PjSIPは新しいプロトコルではなく、音声通信を提供するプロトコルのスタック(SIP、RTP、SDP、STUNなど)を操作するためのライブラリ全体であることを理解することが重要です。これは一連のモジュールであり、pjsip.conf構成ファイルに反映されます(従来のsip.confに置き換わるものです)。ファイルはセクションに分割されており、res_pjsipモジュールは主にファイルを操作し、各セクションがオブジェクトの構成を定義します。セクション名は従来、角括弧で囲まれており、セクションにはそのタイプを定義する「type =」構造が含まれている必要があります。



セクションのタイプは次のとおりです



。ENDPOINT - sip.conf内のピアのアナログ。SIPプロトコルのオプションとAOR、AUTH、およびTRANSPORTとの相互作用を定義します。少なくとも1つのAORセクションにリンクする必要があります。

AOR-ENDPOINTへの連絡方法について説明します。

トランスポート-このセクションでは、トランスポートレイヤーのプロトコル設定、Webソケット、および暗号化方法(sip.confの一般的な方法など)について説明します。異なるエンドポイント用に1つにすることも、ポイントごとに一意にすることもできます

登録-プロバイダーへのトランクなど、発信登録を担当します。

AUTH-インバウンドおよびアウトバウンド登録のオプションと権限が含まれています。これに関連付けられているのは、ENDPOINTとREGISTRATIONSです。

IDENTIFY-ここで、ENDPOINTのソースIPを設定できます。

ACL -エンドポイントに関連付けられていない、着信接続を制御するためにres_pjsipによって使用されます。

DOMAIN_ALIAS-ドメインエイリアス。

連絡先-DialplanでSIPURIを明示的に指定しない必要があります。

システム-システムオプション;

グローバル-グローバルオプション。



ほとんどの場合、セクション名は任意ですが、たとえば、ENDPOINTとAORはSIPURIヘッダーと同じ名前にする必要があります。



PjSIP構成ウィザードのように、多くの興味深いチップが舞台裏に残されているため、私たちの支援は網羅的とは言えません。血の少ない新しいライブラリへの移行について話している間です。微妙なニュアンスは後で処理できます。



sip.confをpjsip.confに変換します



モジュール性のため、pjsip.conf構成ファイルの構造は、多くのセクションに薄い層で分散されています。これは、古き良きsip.confよりもはるかに複雑です。アスタリスクの開発者は、単純な管理者について考え、変換するスクリプトを作成しました。これはPythonで記述されており、ソースからソフトウェアをビルドする場合は、既にディストリビューションにあります:contrib / scripts / sip_to_pjsip /ディレクトリ。 Ubuntuリポジトリに含まれているバイナリパッケージからAsteriskをインストールしたため、スクリプトをGitHubからダウンロード する必要がありました。



さまざまなバージョンのIP-PBXの構成ファイルの形式はあまり変更されていませんが、最新のデフォルト(この場合は16.2)ではなく、インストールしたAsteriskのバージョンからスクリプトを選択することをお勧めします。





アスタリスクバージョンは、core showversionコマンドを使用してIP-PBXコンソールで表示



できます。GitHubのリポジトリにあるontrib / scripts / sip_to_pjsip /ディレクトリあるすべてのPythonファイルが必要になります。これらはローカルディレクトリに追加する必要があり、Asterisk構成(通常は/ etc / asterisk)のあるディレクトリに移動し、スーパーユーザー権限でsip_to_pjsip.pyスクリプト実行します。その主なタスクは、入力sip.confファイルを読み取り、新しいpjsip.confを作成することです(詳細については、 Asterisk wikiを参照してください)。





スクリプトはpjsip.confを作成し、手動でそれを磨く必要があります。記事に従ってAsteriskをインストールした場合は、/ etc / asterisk / modules.confでモジュールのロードを構成し、Dialplan(/etc/asterisk/extensions.confDialアプリケーションへの呼び出しを変更する必要もあります。



コンバーターによって作成されたファイル/etc/asterisk/pjsip.conf、実際には機能しないことが判明しました。



pjsip.conf
;--
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Non mapped elements start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[general]
allowoverlap = no

[office]
call-limit = 2

[sipnet]
remotesecret = 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Non mapped elements end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
--;


[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0

[sipnet]
type = aor
contact = sip:@sipnet.ru

[sipnet]
type = identify
endpoint = sipnet
match = sipnet.ru

[sipnet]
type = endpoint
context = sipnet-trunk
dtmf_mode = rfc4733
disallow = all
allow = alaw,ulaw
direct_media = no
from_user = 
from_domain = sipnet.ru
aors = sipnet

[1001]
type = aor
max_contacts = 1

[1001]
type = auth
username = 1001
password = 

[1001]
type = endpoint
context = homeoffice
dtmf_mode = rfc4733
disallow = all
allow = ulaw
allow = alaw
allow = g729
allow = g723
allow = g726
allow = h261
allow = h263
allow = h264
allow = h263p
callerid =  <1001>
auth = 1001
outbound_auth = 1001
aors = 1001

[acl]
type = acl
permit = XXX.XXX.XXX.XXX
deny = 0.0.0.0/0.0.0.0

[1002]
type = aor
max_contacts = 1

[1002]
type = auth
username = 1002
password = 

[1002]
type = endpoint
context = homeoffice
dtmf_mode = rfc4733
disallow = all
allow = ulaw
allow = alaw
allow = g729
allow = g723
allow = g726
allow = h261
allow = h263
allow = h264
allow = h263p
callerid =  <1002>
auth = 1002
outbound_auth = 1002
aors = 1002




その構文は単純です。詳細はAsteriskwikiにあります構成ファイルをクリーンにするには、手動で編集する必要があります。



修正さ/etc/asterisk/pjsip.conf(sip.confのように、テンプレートはそれで使用することができます):



/etc/asterisk/pjsip.confを修正しました
;===============TRANSPORT

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0

;===============ACL

[acl]
type = acl
deny = 0.0.0.0/0.0.0.0
permit = XXX.XXX.XXX.XXX

;===============SIPNET TRUNK

[sipnet]
type = registration
transport = transport-udp
outbound_auth = sipnet
server_uri = sip:sipnet.ru
client_uri = sip:@sipnet.ru
retry_interval = 60

[sipnet]
type = auth
auth_type = userpass
password = 
username = 

[sipnet]
type = aor
contact = sip:@sipnet.ru

[sipnet]
type = endpoint
transport = transport-udp
;      Dialplan
context = sipnet-trunk
dtmf_mode = rfc4733
disallow = all
allow = alaw,ulaw
direct_media = no
from_user = 
from_domain = sipnet.ru
outbound_auth=sipnet
aors = sipnet
 
[sipnet]
type = identify
endpoint = sipnet
match = sipnet.ru

;===============USER TEMPLATES
 
[endpoint-template](!)
type = endpoint
transport = transport-udp
context = homeoffice
dtmf_mode = rfc4733
disallow = all
allow = ulaw
allow = alaw
allow = g729
allow = g723
allow = g726
allow = h261
allow = h263
allow = h264
allow = h263p
 
[auth-template-userpass](!)
type = auth
auth_type = userpass
 
[aor-template-single-reg](!)
type = aor
; PjSIP       
max_contacts = 1

;===============User 1001

[1001](endpoint-template)
auth = auth1001
aors = 1001
callerid =  <1001>

[auth1001](auth-template-userpass)
username = 1001
password = 
 
[1001](aor-template-single-reg)

;===============User 1002

[1002](endpoint-template)
auth = auth1002
aors= 1002
callerid =  <1002>

[auth1002](auth-template-userpass)
username = 1002
password = 
 
[1002](aor-template-single-reg)




テンプレートを使用すると、事務処理が少なくなりますが、管理者の作業を簡素化するためのより興味深い方法である構成ウィザードもあります。おそらく、これは最も便利なPjSIPトリックの1つであり、次の記事で扱います。



ダイヤルプランの書き直し



最も単純な部分:Dialアプリケーションの呼び出しでSIPをPJSIPに置き換えるだけで十分です。前回の記事から最も単純なテストDialplanを少し変更しましたが、後でより複雑なものを扱います。



構成ファイル/etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no
priorityjumping=no
autofallthrough=yes
clearglobalvars=no

;         
[default]
exten => _X.,1,NoOp()
same => n,Busy()
same => n,HangUp()

;   homeoffice
[homeoffice]
;   
exten => _1XXX,1,Dial(PJSIP/${EXTEN})
;      SIPNET
exten => _.7XXXXXXXXXX,1,Dial(PJSIP/${EXTEN:1}@sipnet)

;   sipnet-trunk,     SIPNET
[sipnet-trunk]
;      


chan_sipからPjSIPへの移行は特に難しいことではありませんが、かなりの手作業が必要です。構成を自動的に変換できませんでした。スクリプトによって操作不能なバージョンが生成され、手動で書き直す必要がありました。次の記事では、構成ウィザードを確認し、最後にダイヤルプランを拡張して、着信コールの受信、会議の整理、およびその他のコールルーティングタスクの解決を行います。










All Articles