PBX virtuel. Partie 3: Nous traduisons Asterisk en PjSIP sans gestes inutiles





Dans les première et deuxième parties d'une série d'articles, nous avons compris comment installer un IP-PBX (IP-PBX) sur un VPS de RuVDS exécutant Ubuntu et configurer les fonctions de base à l'aide du pilote de canal chan_sip. Cette approche est obsolète et la prise en charge de chan_sip sera abandonnée dans les futures versions d'Asterisk. Il est préférable d'utiliser la bibliothèque multimédia open source PjSIP à la place. Malgré les différences dramatiques dans les fichiers de configuration, la transition n'est pas aussi difficile que cela puisse paraître à première vue.



Qu'est-ce que PjSIP?



Il est important de comprendre que PjSIP n'est pas un nouveau protocole, mais une bibliothèque entière pour travailler avec une pile de protocoles qui fournissent une communication vocale: SIP, RTP, SDP, STUN, etc. C'est tout un tas de modules, qui se reflète dans le fichier de configuration pjsip.conf (il remplace le traditionnel sip.conf). Le fichier est divisé en sections, et le module res_pjsip fonctionne principalement avec lui, chaque section définissant la configuration d'un objet. Les noms de section sont traditionnellement placés entre crochets et une section doit contenir la construction "type =" qui définit son type.



Les types de sections peuvent être les suivants:



ENDPOINT - analogue du pair dans sip.conf, qui définit les options pour le protocole SIP et l'interaction avec AOR, AUTH et TRANSPORT. Nécessairement lié à au moins une section AOR;

AOR- décrit comment contacter ENDPOINT;

TRANSPORT - Cette section décrit les paramètres du protocole de la couche de transport, les Websockets et les méthodes de chiffrement (comme le général dans sip.conf). Peut être un pour différents ENDPOINT ou unique pour un point;

ENREGISTREMENT - responsable des enregistrements sortants, par exemple, des troncs vers les fournisseurs;

AUTH - Contient les options et les autorités pour les enregistrements entrants et sortants. Associé avec lui sont ENDPOINT et ENREGISTREMENTS;

IDENTIFY - ici vous pouvez définir l'IP source pour ENDPOINT;

ACL - utilisé par res_pjsip pour contrôler les connexions entrantes, non lié à ENDPOINT;

DOMAIN_ALIAS - alias de domaine;

CONTACT- nécessaire de ne pas spécifier explicitement l'URI SIP dans Dialplan;

Système - options du système;

Global - options globales;



Les noms de section peuvent être arbitraires dans la plupart des cas, mais, par exemple, ENDPOINT et AOR doivent être nommés de la même manière que l'en-tête URI SIP.



Notre aide peut difficilement être qualifiée d'exhaustive, car de nombreuses puces intéressantes restent dans les coulisses, comme l'assistant de configuration PjSIP: alors que nous parlons de migration vers une nouvelle bibliothèque avec peu de sang. Vous pouvez gérer les nuances et les subtilités plus tard.



Convertir sip.conf en pjsip.conf



En raison de sa modularité, la structure du fichier de configuration pjsip.conf est étalée sur de nombreuses sections - elle est beaucoup plus complexe que le bon vieux sip.conf. Les développeurs d'Asterisk ont ​​pensé à des administrateurs simples et ont créé un script à convertir. Il est écrit en Python, et si vous construisez un logiciel à partir des sources, il est déjà dans la distribution: dans le répertoire contrib / scripts / sip_to_pjsip / . Nous avons installé Asterisk à partir d'un package binaire inclus dans le référentiel Ubuntu, les scripts ont donc dû être téléchargés depuis GitHub.



Bien que le format des fichiers de configuration des différentes versions d'IP-PBX n'ait pas beaucoup changé, il est préférable de choisir des scripts de la version d'Asterisk que vous avez installée au lieu de la dernière version par défaut - dans notre cas 16.2.





La version d'Asterisk peut être visualisée dans la console IP-PBX à l'aide de la commande core show version.



Vous aurez besoin de tous les fichiers Python du répertoire ontrib / scripts / sip_to_pjsip / dans le référentiel sur GitHub. Ils doivent être ajoutés à un répertoire local, aller dans le répertoire avec les configurations Asterisk (généralement / etc / asterisk ) et exécuter le script sip_to_pjsip.py avec les privilèges de superutilisateur. Sa tâche principale est de lire le fichier d'entrée sip.conf et de créer un nouveau pjsip.conf (voir le wiki Asterisk pour plus de détails).





Le script créera pjsip.conf, puis vous devrez le polir manuellement. Si vous avez installé Asterisk selon nos articles, vous devrez également configurer le chargement des modules dans /etc/asterisk/modules.conf et changer l' appel à l'application Dial dans Dialplan ( /etc/asterisk/extensions.conf ).



Le fichier /etc/asterisk/pjsip.conf créé par le convertisseur s'est avéré inopérant en pratique:



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




Sa syntaxe est simple, les détails peuvent être trouvés dans le wiki Asterisk . Il faudra une édition manuelle pour nettoyer le fichier de configuration.



Corrigé /etc/asterisk/pjsip.conf (comme dans sip.conf, des modèles peuvent être utilisés):



Correction de /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)




Avec les modèles, il y a moins de paperasse, mais il existe également un moyen plus intéressant de simplifier la vie de l'administrateur: l'assistant de configuration. C'est peut-être l'une des astuces PjSIP les plus pratiques, que nous traiterons dans le prochain article.



Réécriture du plan de dialogue



Le plus simple: il suffit de remplacer SIP par PJSIP lors de l'appel à l'application Dial. Bien que nous ayons légèrement modifié le Dialplan de test le plus simple de l' article précédent , nous aborderons des choses plus complexes plus tard.



Fichier de configuration /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]
;      


La transition de chan_sip à PjSIP ne s'est pas avérée particulièrement difficile, mais elle nécessite une bonne quantité de travail manuel. Nous n'avons pas réussi à convertir la configuration automatiquement: le script a produit une version inutilisable, qui a dû être réécrite manuellement. Dans le prochain article, nous allons jeter un œil à l'assistant de configuration et enfin étendre le plan de numérotation pour recevoir des appels entrants, organiser des conférences et résoudre d'autres tâches de routage d'appels.










All Articles