Configuration d’un trunk SFR IMS sur FreePBX 16 / Asterisk PJSIPBonjour à tous,
Je partage ici une configuration fonctionnelle permettant d’utiliser une ligne fixe SFR IMS directement sur FreePBX, sans passer par la gateway/box opérateur pour la partie voix.
Configuration validée sur :
- FreePBX : 16.0.45
- Asterisk : 15.7.4
- Trunk : PJSIP
- Transport : UDP
- Appels sortants : OK
- Appels entrants : OK
- Audio bidirectionnel : OK
Attention :Cette configuration suppose que vous avez récupéré les vrais identifiants SIP/IMS de votre ligne. Sans le mot de passe SIP IMS réel, la configuration ne pourra pas s’enregistrer.
Les informations personnelles sont volontairement anonymisées dans ce tutoriel.
----------------------------------------
1. Informations nécessaires côté opérateurIl faut disposer au minimum des éléments suivants :
Numéro public au format E.164 : +33XXXXXXXXX
Numéro national : 0XXXXXXXXX
Identifiant IMS / Auth User : NDI0XXXXXXXX.ALL.THD@sfr.fr
Mot de passe SIP : ***************
Domaine IMS / Realm : ims.mnc010.mcc208.3gppnetwork.org
P-CSCF / Outbound Proxy :
trappes.p-cscf.sfr.net:5062
mitry.p-cscf.sfr.net:5062
corbas.p-cscf.sfr.net:5062
Dans la suite du tutoriel, j’utilise les variables suivantes :
<NUMERO_E164> = +33XXXXXXXXX
<NUMERO_NATIONAL> = 0XXXXXXXXX
<AUTH_USERNAME_IMS> = NDI0XXXXXXXX.ALL.THD@sfr.fr
<SIP_PASSWORD> = mot de passe SIP IMS
<DOMAIN_IMS> = ims.mnc010.mcc208.3gppnetwork.org
----------------------------------------
2. Préparation FreePBXAvant de modifier quoi que ce soit :
- Faire un backup FreePBX.
- Faire un snapshot de la VM si FreePBX est virtualisé.
- Vérifier que PJSIP est actif.
- Vérifier que le port PJSIP UDP utilisé est bien 5060.
Dans FreePBX :
Settings > Asterisk SIP Settings
Dans la partie NAT, renseigner :
External Address : votre IP publique ou votre FQDN public
Local Networks : vos réseaux LAN/VLAN internes
Exemple :
External Address : X.X.X.X
Local Networks : 192.168.1.0/24
192.168.2.0/24
Vérifier également que le transport UDP est bien actif :
Transport : 0.0.0.0-udp
Port : 5060
----------------------------------------
3. Création du trunk PJSIP SFR IMSAller dans :
Connectivity > Trunks > Add Trunk > Add SIP (chan_pjsip) Trunk
Nommer le trunk :
SFR_IMS
Important :Une fois le trunk créé et fonctionnel, éviter de le renommer.
FreePBX/Asterisk peut générer plusieurs objets PJSIP liés au nom du trunk :
- Endpoint
- AOR
- Auth
- Registration
- Identify
Un renommage peut créer des incohérences entre ces objets.
----------------------------------------
3.1. Onglet General du trunkRenseigner :
Trunk Name : SFR_IMS
Outbound CallerID : <NUMERO_E164>
CID Options : Force Trunk CID
Maximum Channels : 1 ou 2 selon le besoin
Exemple anonymisé :
Trunk Name : SFR_IMS
Outbound CallerID : +33XXXXXXXXX
CID Options : Force Trunk CID
Maximum Channels : 1
----------------------------------------
3.2. Onglet pjsip Settings > GeneralRenseigner exactement :
Username : <NUMERO_E164>
Auth Username : <AUTH_USERNAME_IMS>
Secret : <SIP_PASSWORD>
Authentication : Outbound
Registration : Send
SIP Server : ims.mnc010.mcc208.3gppnetwork.org
SIP Server Port : 5060
Context : from-pstn
Transport : 0.0.0.0-udp
Exemple anonymisé :
Username : +33XXXXXXXXX
Auth Username : NDI0XXXXXXXX.ALL.THD@sfr.fr
Secret : ***************
SIP Server : ims.mnc010.mcc208.3gppnetwork.org
Port : 5060
Context : from-pstn
Transport : 0.0.0.0-udp
Point important :Ne pas mettre l’identifiant IMS complet dans le champ Username si celui-ci contient déjà un @.
Il faut éviter ce genre de construction invalide :
sip:NDI0XXXXXXXX.ALL.THD@sfr.fr@ims.mnc010.mcc208.3gppnetwork.org
Le champ Username doit être le numéro public :
+33XXXXXXXXX
L’identifiant IMS complet doit aller dans :
Auth Username
----------------------------------------
3.3. Onglet pjsip Settings > AdvancedRenseigner :
Outbound Proxy : sip:trappes.p-cscf.sfr.net:5062\;lr
AOR Contact : sip:ims.mnc010.mcc208.3gppnetwork.org:5060
Contact User : <NUMERO_E164>
From Domain : ims.mnc010.mcc208.3gppnetwork.org
From User : <NUMERO_E164>
Client URI : sip:<NUMERO_E164>@ims.mnc010.mcc208.3gppnetwork.org
Server URI : sip:ims.mnc010.mcc208.3gppnetwork.org:5060
Exemple anonymisé :
Outbound Proxy : sip:trappes.p-cscf.sfr.net:5062\;lr
AOR Contact : sip:ims.mnc010.mcc208.3gppnetwork.org:5060
Contact User : +33XXXXXXXXX
From Domain : ims.mnc010.mcc208.3gppnetwork.org
From User : +33XXXXXXXXX
Client URI : sip:+33XXXXXXXXX@ims.mnc010.mcc208.3gppnetwork.org
Server URI : sip:ims.mnc010.mcc208.3gppnetwork.org:5060
Si FreePBX retire l’antislash dans le champ Outbound Proxy, ce n’est pas forcément bloquant. Le résultat côté Asterisk peut apparaître ainsi :
sip:trappes.p-cscf.sfr.net:5062;lr
Renseigner également :
Direct Media : No
Rewrite Contact : Yes
RTP Symmetric : Yes
Force rport : Yes
Send PAI : Send P-Asserted-Identity header
Trust RPID/PAI : Yes
DTMF Mode : inband
Media Encryption : None
----------------------------------------
3.4. Onglet CodecsPour commencer, activer uniquement :
alaw
ulaw
Mettre de préférence :
alaw en premier
ulaw en second
Correspondance :
alaw = G.711A / PCMA
ulaw = G.711U / PCMU
----------------------------------------
4. Match Permit pour les appels entrantsSans cette étape, les appels entrants peuvent arriver sur FreePBX mais être vus comme des appels anonymes :
from-sip-external
unknown peer
Rejecting unknown SIP connection
Il faut donc associer les IP des P-CSCF SFR au trunk PJSIP.
Depuis FreePBX en SSH :
dig +short trappes.p-cscf.sfr.net
dig +short mitry.p-cscf.sfr.net
dig +short corbas.p-cscf.sfr.net
Exemple de résolution observée :
trappes.p-cscf.sfr.net :
92.91.129.152
92.91.129.200
92.91.129.168
92.91.129.184
92.91.129.136
mitry.p-cscf.sfr.net :
92.91.129.40
92.91.129.72
92.91.129.8
92.91.129.56
92.91.129.24
corbas.p-cscf.sfr.net :
92.91.179.24
92.91.179.8
Dans :
Connectivity > Trunks > SFR_IMS > pjsip Settings > Advanced
Renseigner le champ :
Match (Permit)
avec les IP au format CIDR :
92.91.129.152/32,92.91.129.200/32,92.91.129.168/32,92.91.129.184/32,92.91.129.136/32,92.91.129.40/32,92.91.129.72/32,92.91.129.8/32,92.91.129.56/32,92.91.129.24/32,92.91.179.24/32,92.91.179.8/32
Conseil :Refaire régulièrement les commandes dig pour vérifier que SFR n’a pas modifié les IP associées aux P-CSCF.
----------------------------------------
5. Création de la route sortanteAller dans :
Connectivity > Outbound Routes > Add Route
Créer une route :
Route Name : SFR_OUT
Dans :
Trunk Sequence for Matched Routes
sélectionner :
SFR_IMS
----------------------------------------
5.1. Dial Patterns de la route sortantePour autoriser les appels nationaux français, les appels déjà au format +33, et les appels internationaux au format 00 :
Prepend Prefix Match Pattern
+33 0 ZXXXXXXXX
vide +X.
+ 00 X.
Explication :
0612345678 devient +33612345678
0712345678 devient +33712345678
0312345678 devient +33312345678
+33612345678 reste +33612345678
0033612345678 devient +33612345678
Le pattern :
ZXXXXXXXX
correspond à 9 chiffres après le 0 initial, avec le premier chiffre de 1 à 9.
La ligne :
+33 / 0 / ZXXXXXXXX
transforme donc tous les numéros français classiques :
01
02
03
04
05
06
07
08
09
en format international +33.
----------------------------------------
6. Route d’urgenceIl est conseillé de créer une route séparée pour les numéros d’urgence.
Aller dans :
Connectivity > Outbound Routes > Add Route
Créer :
Route Name : SFR_URGENCES
Route Type : Emergency
Trunk : SFR_IMS
Dial Patterns :
15
17
18
112
114
Placer cette route au-dessus de la route générale SFR_OUT.
----------------------------------------
7. Ordre recommandé des routes sortantesDans :
Connectivity > Outbound Routes
Placer les routes dans cet ordre :
1. SFR_URGENCES
2. SFR_OUT
Puis cliquer sur :
Apply Config
----------------------------------------
8. Création de la route entranteAller dans :
Connectivity > Inbound Routes > Add Inbound Route
Créer une route :
Description : SFR_IN
DID Number : <NUMERO_E164>
CID Number : vide
Destination : Extension, Ring Group, IVR, etc.
Exemple anonymisé :
Description : SFR_IN
DID Number : +33XXXXXXXXX
Destination : Ring Group principal
Dans les traces SIP entrantes, SFR présente généralement le DID au format :
+33XXXXXXXXX
Il est possible de créer temporairement une route entrante sans DID pour tester :
Description : SFR_IN_TEST
DID Number : vide
CID Number : vide
Destination : extension de test
Une fois le format du DID confirmé dans les logs, il est préférable de remettre une route propre avec le DID exact.
----------------------------------------
9. Firewall / NATCôté firewall/routeur, prévoir au minimum :
UDP 5060 -> FreePBX
UDP 10000-20000 -> FreePBX
Le range RTP dépend de la configuration Asterisk/FreePBX. Par défaut, il est souvent :
10000-20000 UDP
Il est fortement recommandé de restreindre l’accès SIP entrant aux IP des P-CSCF SFR lorsque le firewall le permet.
Ne pas exposer :
Interface Web FreePBX
SSH
ARI 8088/8089
AMI 5038
Base de données
Le trunk utilise les P-CSCF SFR en 5062, mais FreePBX écoute localement en 5060.
----------------------------------------
10. Commandes de vérificationEn SSH sur FreePBX :
asterisk -rx "pjsip show registrations"
Résultat attendu :
Registered
Vérifier l’endpoint :
asterisk -rx "pjsip show endpoint SFR_IMS"
Vérifier l’AOR :
asterisk -rx "pjsip show aor SFR_IMS"
Vérifier les contacts :
asterisk -rx "pjsip show contacts"
Le contact SFR doit apparaître disponible :
SFR_IMS/sip:ims.mnc010.mcc208.3gppnetwork.org:5060 Avail
----------------------------------------
11. Debug SIPPour activer les logs SIP en temps réel :
asterisk -rvvvvv
Puis dans la console Asterisk :
pjsip set logger on
Pour désactiver :
pjsip set logger off
----------------------------------------
12. Comportement REGISTER attenduLors de l’enregistrement SIP, il est normal de voir d’abord un challenge :
REGISTER
401 Unauthorized
REGISTER avec Authorization
200 OK
Le 401 initial n’est pas une erreur. C’est le fonctionnement normal du digest SIP.
Ce qui compte, c’est l’état final :
Registered
----------------------------------------
13. Problèmes courantsErreur : appels sortants impossibles avec URI invalideExemple :
Could not create dialog to invalid URI
Vérifier :
AOR Contact : sip:ims.mnc010.mcc208.3gppnetwork.org:5060
Username : +33XXXXXXXXX
Auth User : NDI0XXXXXXXX.ALL.THD@sfr.fr
Ne pas mettre l’identifiant IMS complet dans le champ Username.
----------------------------------------
Erreur : appels entrants rejetés comme anonymesExemple :
from-sip-external
Rejecting unknown SIP connection
Vérifier le champ :
Match (Permit)
Il doit contenir les IP des P-CSCF SFR.
----------------------------------------
Erreur : REGISTER en échecVérifier :
Auth Username
Password SIP
Domain IMS
Outbound Proxy
AOR Contact
DNS
Firewall
NAT / External Address
----------------------------------------
Audio dans un seul sensVérifier :
External Address dans Asterisk SIP Settings
Local Networks
RTP Symmetric : Yes
Rewrite Contact : Yes
Force rport : Yes
Direct Media : No
Ports RTP UDP ouverts vers FreePBX
----------------------------------------
Trunk renommé et comportement instableSi le trunk a été renommé après création, FreePBX peut conserver ou générer des objets PJSIP incohérents.
Vérifier :
asterisk -rx "pjsip show registrations"
asterisk -rx "pjsip show endpoint SFR_IMS"
asterisk -rx "pjsip show aor SFR_IMS"
Il est préférable de choisir un nom stable dès le départ, par exemple :
SFR_IMS
Puis ne plus le renommer.
----------------------------------------
14. Configuration finale résuméeTrunk PJSIP :
Trunk Name : SFR_IMS
Username : +33XXXXXXXXX
Auth Username : NDI0XXXXXXXX.ALL.THD@sfr.fr
Secret : ***************
Domain : ims.mnc010.mcc208.3gppnetwork.org
SIP Server : ims.mnc010.mcc208.3gppnetwork.org
SIP Server Port : 5060
Outbound Proxy : sip:trappes.p-cscf.sfr.net:5062\;lr
AOR Contact : sip:ims.mnc010.mcc208.3gppnetwork.org:5060
From User : +33XXXXXXXXX
From Domain : ims.mnc010.mcc208.3gppnetwork.org
Contact User : +33XXXXXXXXX
Transport : UDP
Codecs : alaw, ulaw
DTMF : inband
Direct Media : No
RTP Symmetric : Yes
Rewrite Contact : Yes
Force rport : Yes
Route sortante :
Route Name : SFR_OUT
Trunk : SFR_IMS
Dial Patterns :
+33 / 0 / ZXXXXXXXX
vide/vide/+X.
+ / 00 / X.
Route entrante :
DID : +33XXXXXXXXX
Destination : extension, groupe d’appel ou IVR
----------------------------------------
15. ValidationTests réalisés :
- Enregistrement IMS : OK
- Appels sortants : OK
- Appels entrants : OK
- Audio bidirectionnel : OK
- Routage vers groupe d’appel FreePBX : OK
Pensez à refaire un backup FreePBX une fois la configuration validée.