Di bagian pertama dan kedua dari rangkaian artikel, kami menemukan cara menginstal IP-PBX (IP-PBX) pada VPS dari RuVDS yang menjalankan Ubuntu dan mengkonfigurasi fungsi dasar menggunakan channel driver chan_sip. Pendekatan ini tidak digunakan lagi dan dukungan chan_sip akan dihentikan di Asterisk versi mendatang. Lebih baik menggunakan pustaka multimedia PjSIP sumber terbuka. Terlepas dari perbedaan dramatis dalam file konfigurasi, transisinya tidak sesulit yang terlihat pada pandangan pertama.
Apa itu PjSIP?
Penting untuk dipahami bahwa PjSIP bukanlah protokol baru, tetapi keseluruhan perpustakaan untuk bekerja dengan setumpuk protokol yang menyediakan komunikasi suara: SIP, RTP, SDP, STUN, dll. Ini adalah sejumlah besar modul, yang tercermin dalam file konfigurasi pjsip.conf (menggantikan sip.conf tradisional). File tersebut dibagi menjadi beberapa bagian, dan modul res_pjsip terutama bekerja dengannya, dengan setiap bagian menentukan konfigurasi beberapa objek. Nama bagian biasanya diapit dalam tanda kurung siku, dan bagian harus berisi konstruksi "type =" yang menentukan tipenya.
Jenis bagian dapat berupa sebagai berikut:
ENDPOINT - analog peer di sip.conf, yang mendefinisikan opsi untuk protokol SIP dan interaksi dengan AOR, AUTH dan TRANSPORT. Harus ditautkan ke setidaknya satu bagian AOR;
AOR- menjelaskan cara menghubungi ENDPOINT;
TRANSPORT - Bagian ini menjelaskan pengaturan protokol lapisan transport, websockets dan metode enkripsi (seperti yang umum di sip.conf). Bisa satu untuk ENDPOINT berbeda atau unik untuk satu titik;
REGISTRASI - bertanggung jawab untuk registrasi keluar, misalnya trunk ke provider;
AUTH - Berisi opsi dan otoritas untuk pendaftaran masuk dan keluar. Terkait dengannya adalah ENDPOINT dan REGISTRATIONS;
IDENTIFIKASI - di sini Anda dapat mengatur IP sumber untuk ENDPOINT;
ACL - digunakan oleh res_pjsip untuk mengontrol koneksi masuk, tidak terikat ke ENDPOINT;
DOMAIN_ALIAS - alias domain;
KONTAK- diperlukan untuk tidak secara eksplisit menentukan SIP URI dalam Dialplan;
Sistem - opsi sistem;
Global - opsi global;
Nama bagian dapat berubah-ubah dalam banyak kasus, tetapi, misalnya, ENDPOINT dan AOR harus diberi nama yang identik dengan header SIP URI.
Bantuan kami hampir tidak bisa disebut lengkap, karena ada banyak chip menarik yang tertinggal di belakang layar, seperti Wizard Konfigurasi PjSIP: sementara kita berbicara tentang migrasi ke perpustakaan baru dengan sedikit darah. Anda dapat menangani nuansa dan kehalusannya nanti.
Ubah sip.conf menjadi pjsip.conf
Karena modularitas, struktur file konfigurasi pjsip.conf tersebar dalam lapisan tipis di banyak bagian - ini jauh lebih kompleks daripada sip.conf lama yang baik. Pengembang Asterisk memikirkan admin sederhana dan membuat skrip untuk dikonversi. Itu ditulis dengan Python, dan jika Anda membangun perangkat lunak dari sumber, itu sudah ada dalam distribusi: di direktori contrib / scripts / sip_to_pjsip / . Kami menginstal Asterisk dari paket biner yang termasuk dalam repositori Ubuntu, jadi skrip harus diunduh dari GitHub.
Meskipun format file konfigurasi untuk berbagai versi IP-PBX tidak banyak berubah, lebih baik memilih skrip dari versi Asterisk yang telah Anda instal daripada default terbaru - dalam kasus kami 16.2.

Versi Asterisk dapat dilihat di konsol IP-PBX menggunakan perintah core show version
Anda memerlukan semua file Python dari direktori ontrib / scripts / sip_to_pjsip / dalam repositori di GitHub. Mereka perlu ditambahkan ke direktori lokal, masuk ke direktori dengan konfigurasi Asterisk (biasanya / etc / asterisk) dan jalankan skrip sip_to_pjsip.py dengan hak superuser. Tugas utamanya adalah membaca file masukan sip.conf dan membuat pjsip.conf baru (lihat wiki Asterisk untuk detailnya).

Skrip akan membuat pjsip.conf, dan kemudian Anda harus memolesnya secara manual. Jika Anda menginstal Asterisk menurut artikel kami, Anda juga harus mengkonfigurasi pemuatan modul di /etc/asterisk/modules.conf dan mengubah panggilan ke aplikasi Dial di Dialplan ( /etc/asterisk/extensions.conf ).
File /etc/asterisk/pjsip.conf yang dibuat oleh konverter ternyata tidak berfungsi dalam praktiknya:
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
Sintaksnya sangat mudah, detailnya dapat ditemukan di wiki Asterisk . Ini akan membutuhkan pengeditan manual untuk membersihkan file konfigurasi.
Dikoreksi /etc/asterisk/pjsip.conf (seperti dalam sip.conf, template dapat digunakan di dalamnya):
/Etc/asterisk/pjsip.conf diperbaiki
;===============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)
Dengan template, ada lebih sedikit dokumen, tetapi ada juga cara yang lebih menarik untuk menyederhanakan kehidupan admin - Wizard Konfigurasi. Mungkin ini adalah salah satu trik PjSIP paling nyaman, yang akan kita bahas di artikel berikutnya.
Menulis ulang Dialplan
Bagian paling sederhana: cukup mengganti SIP dengan PJSIP di aplikasi panggilan Dial. Meskipun kami telah sedikit memodifikasi Dialplan pengujian yang paling sederhana dari artikel sebelumnya , kami akan membahas hal-hal yang lebih rumit nanti.
File konfigurasi /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]
;
Transisi dari chan_sip ke PjSIP ternyata tidak terlalu sulit, tetapi membutuhkan banyak pekerjaan manual. Kami gagal mengonversi konfigurasi secara otomatis: skrip menghasilkan versi yang tidak dapat dioperasikan, yang harus ditulis ulang secara manual. Pada artikel berikutnya, kita akan melihat Wizard Konfigurasi dan akhirnya memperpanjang dialplan untuk menerima panggilan masuk, mengatur konferensi, dan menyelesaikan tugas perutean panggilan lainnya.
