Comment connecter deux instances Asterisk en trunk avec PJSIP

Dans le monde de la voix sur IP (VoIP), interconnecter des sites, bureaux, filiales ou encore des

Dans le monde de la communication VoIP, l’interconnexion de serveurs Asterisk est un vrai game-changer pour les petits FAI et les entreprises qui ont plusieurs bureaux et souhaitent avoir un système de téléphonie évolutif.

Que vous fournissiez des trunks SIP à vos clients ou que vous souhaitiez relier des bureaux annexes de manière fluide, ce guide vous explique comment configurer Asterisk avec PJSIP et le plan de numérotation (dialplan) à mettre en œuvre pour créer des interconnexions fiables.

Nous couvrirons les bases, la configuration pratique, le trunking VoIP et la gestion des endpoints SIP (utilisateurs).

Présentation d’Asterisk

Asterisk est le logiciel open-source pour la construction d’applications de communication. Il offre une multitude de fonctionnalités. Du simple soft switch de téléphonie à une gestion complexe des médias dans un SBC, Asterisk est très puissant.

Développé par Digium (désormais partie de Sangoma), il propulse des entreprises avec des PBX simples mais aussi centres d’appels plus complexes.

En somme, Asterisk gère les appels vocaux, la vidéo et les messages sur IP, ce qui le rend idéal comme plateforme de communication unifiée.

Asterisk a de nombreux avantages. En premier lieu, il est gratuit, hautement personnalisable et il prend en charge des protocoles comme SIP (avec le pilote PJSIP), XMPP ou encore SMTP (pour l’envoi de mails).

Dans un scénario de petit FAI, Asterisk vous permet d’agir comme un hub central, acheminant les appels entre les endpoints (clients) mais aussi vers les lignes de téléphonie classique (PSTN).

Comprendre les trunks

En téléphonie, un trunk désigne un chemin de communication capable de gérer plusieurs appels simultanés – comme une autoroute pour les appels téléphoniques.

Historiquement, les trunks étaient des lignes physiques bien spécifiques (en E1 en Europe ou T1 aux États-Unis), gérées par des géants des télécoms tels que France Télécom ou encore AT&T. Ces lignes pouvaient transporter des dizaines de canaux, formant le cœur des réseaux traditionnels de téléphonie fixe.

Avec l’essor d’internet, la VoIP les trunks ont évolués vers des connexions virtuelles utilisant des protocoles IP, permettant la démocratisation en entreprise de ce genre de liaisons.

Dans la configuration de trunk Asterisk, un trunk est essentiellement un lien logique entre votre serveur et un autre endpoint qui peut être un opérateur ou un PBX distant.

Avantages clés pour le trunking VoIP :

  • Économies de coûts : Pas besoin de matériel coûteux ; juste un accès à Internet.
  • Scalabilité : Gérer 10 ou 10 000 appels en ajoutant des ressources serveur. Parfait pour les centres d’appels.
  • Flexibilité : Acheminer les appels selon des règles, comme l’heure ou l’ID de l’appelant.

Qu’est-ce que SIP ? Le protocole qui alimente la VoIP moderne

SIP, ou Session Initiation Protocol, est la norme (RFC 3261) pour initier, maintenir et terminer des sessions en temps réel en VoIP. SIP gère la signalisation — pensez aux invitations, acceptations des appels ou encore clôture.

Remarque : les données vocales, la voix en tant que telle est gérée par un autre protocole.

Qu’est-ce que le média ? Gérer l’audio dans vos appels

Comme expliqué précédemment, SIP est un protocole de signalisation et ne gère pas les médias (voix, vidéo, etc.). Asterisk peut gérer les médias en concordance avec SIP. Alors que SIP gère le « qui » et le « quand » d’un appel, le média est le contenu réel — les flux voix, vidéo, le son, etc. En VoIP, les médias voyagent via RTP (Real-time Transport Protocol) sur UDP, séparément de la signalisation SIP. Des codecs comme G.711 ou Opus compressent et transmettent ces données.

Dans la gestion des médias Asterisk, vous pouvez choisir les codecs autorisés.

Configurer un trunk dans Asterisk pour les interconnexions

Nous configurerons deux serveurs Asterisk : Serveur A (votre hub principal FAI, agissant comme endpoint distant) et Serveur B (PBX client ou bureau annexe).

Ce tutoriel de trunk PJSIP suppose Asterisk 16+ avec PJSIP activé (vérifiez via module show like pjsip en CLI).

Prérequis pour une configuration réussie

  • Les deux serveurs sur des réseaux stables avec IP publiques ou STUN/TURN pour NAT.
  • Ports pare-feu ouverts : 5060 UDP/TCP (SIP), 10000-20000 UDP (médias RTP).
  • Installer Asterisk : dnf install asterisk (CentOS) ou sudo apt install asterisk (Ubuntu).
  • Sauvegarder les configs : cp /etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf.bak.

Recharger après modifications : asterisk -rx "pjsip reload".

Serveur A : Configuration de l’endpoint distant (côté FAI)

Sur le Serveur A (ex. IP : 192.0.2.1), créez un trunk pour accepter les connexions du Serveur B. Éditez /etc/asterisk/pjsip.conf :

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

[trunk-customer-b]
type=endpoint
transport=transport-udp
context=from-trunk  ; Dialplan context for incoming calls
disallow=all
allow=ulaw,alaw,gsm  ; Supported codecs for VoIP quality
auth=trunk-customer-b-auth
aors=trunk-customer-bdirect_media=no  ; Force media through server for recording/security

[trunk-customer-b-auth]
type=auth
auth_type=userpass
username=trunkuser  ; Shared secret with Server B
password=strongpass123
realm=192.0.2.1

[trunk-customer-b-aor]
type=aorcontact=sip:192.0.2.2:5060  ; Server B's IP

Cela configure le Serveur A comme un fournisseur de trunk SIP sécurisé. La section auth impose un nom d’utilisateur/mot de passe pour l’authentification PJSIP dans Asterisk, empêchant l’accès non autorisé.

Ajoutez maintenant des règles de plan de numérotation dans /etc/asterisk/extensions.conf pour acheminer les appels du trunk :

[from-trunk]
exten => _X.,1,NoOp(Incoming from trunk) 
same => n,Dial(PJSIP/${EXTEN}@local-extension)  ; Route to internal users same => n,Hangup()

Cela gère les appels entrants, les redirigeant vers les extensions locales. Pour les appels sortants vers le Serveur B, nous le verrons dans la section suivante.

Serveur B : Configuration de l’endpoint client (côté bureau annexe)

Sur le Serveur B (ex. IP : 192.0.2.2), enregistrez-vous auprès du Serveur A comme client trunk. Dans /etc/asterisk/pjsip.conf :

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
local_net=192.168.0.0/16  ; Your internal network for NAT

[trunk-isp-a]
type=endpoint
transport=transport-udp
context=from-isp  ; Context for calls from Server A
disallow=all
allow=ulaw,alaw,gsm
auth=trunk-isp-a-auth
aors=trunk-isp-a-aor
outbound_auth=trunk-isp-a-auth
from_user=trunkuser
from_domain=192.0.2.1

[trunk-isp-a-auth]
type=auth
auth_type=userpass
username=trunkuser
password=strongpass123realm=192.0.2.1

[trunk-isp-a-aor]
type=aor
contact=sip:192.0.2.1:5060

Ici, le Serveur B s’authentifie auprès du Serveur A, activant un trunking VoIP bidirectionnel. Pour les appels sortants vers le trunk FAI :

Dans /etc/asterisk/extensions.conf :

[from-internal]
exten => _9NXXNXXXXXX,1,NoOp(Outbound to ISP) 
same => n,Set(CALLERID(num)=${CALLERID(num)})  ; Preserve caller ID 
same => n,Dial(PJSIP/${EXTEN:1}@trunk-isp-a)  ; Strip 9 prefix, dial via trunk 
same => n,Hangup()

[from-isp] 
exten => _X.,1,NoOp(Incoming from ISP trunk) 
same => n,Dial(Local/${EXTEN}@internal-extensions)  ; Route to local users same => n,Hangup()

Testez la configuration : Depuis le Serveur B, appelez une extension sur le Serveur A (ex. Dial(PJSIP/100@trunk-isp-a)). Utilisez pjsip show endpoints en CLI Asterisk pour vérifier l’enregistrement.

Dépannage des problèmes courants dans les interconnexions Asterisk PJSIP

  • Audio unidirectionnel : Activez direct_media=yes ou vérifiez les ports RTP/pare-feu.
  • Échec d’enregistrement : Vérifiez que les identifiants d’authentification et les realms correspondent.
  • Incompatibilité de codecs : Alignez allow/disallow des deux côtés.

Pour un dépannage avancé d’Asterisk, activez les logs de débogage : pjsip set logger on.

Meilleures pratiques pour des trunks VoIP sécurisés et évolutifs

  • Utilisez TLS pour SIP (ajoutez protocol=tls dans les transports) pour chiffrer la signalisation.
  • Implémentez des ACL dans pjsip.conf pour restreindre les IP.
  • Surveillez avec des outils comme sngrep pour l’analyse du trafic SIP.
  • Évoluez avec plusieurs trunks pour l’équilibrage de charge dans les environnements multi-Asterisk.

En suivant ce guide d’interconnexion Asterisk PJSIP, vous aurez un trunk VoIP robuste opérationnel.

Comprendre et utiliser Kamailio partie 1

Il y a quelques semaines de cela je me suis lancé dans un projet de créer un SBC (Session Border Controller) avec des logiciels open source pour le fun et le profit; Dans l’espoir de pouvoir commercialiser des offres de téléphonie mais aussi plus largement pour apprendre et surtout comprendre le fonctionnement de la téléphonie (fixe dans un premier temps).

Dans cette séries d’articles, je vais vous présenter les outils qui affèrent à la VoIP (Voice over IP) et