Ayant passé presque 48 heures non-stop à essayer de faire fonctionner le VoIP, en grainant des infos ça et là, je me suis dit que ce serait bien d'avoir quelque chose de simple et qui explique le pourquoi des configs.
Comme tout le monde, je suis passé en IPv4 du coté WAN. et j'ai utilisé le programme de Florent Daignière pour récupérer les informations de compte
https://florent.daigniere.com/posts/2019/04/extracting-voip-credentials-from-my-broadband-router/ Display name : +33*********
Username : NDI0*********.ALP.THD@sfr.fr
Password : ************************
Domain : ims.mnc010.mcc208.3gppnetwork.org
Servers : (pick the one with the lowest latency)
corbas.p-cscf.sfr.net.:5062
venissieux.p-cscf.sfr.net.:5062
mitry.p-cscf.sfr.net.:5062
Dans le forum certains suggèrent
residential.p-cscf.sfr.net comme serveur.
Comme on voit ci-dessous, cela revient au même si on fait une requête DNS SRV sur le service _sip._udp -
à voir si votre client SIP peut faire cela.;; ANSWER SECTION:
_sip._udp.residential.p-cscf.sfr.net. 327 IN SRV 10 0 5062 venissieux.p-cscf.sfr.net.
_sip._udp.residential.p-cscf.sfr.net. 327 IN SRV 10 0 5062 corbas.p-cscf.sfr.net.
_sip._udp.residential.p-cscf.sfr.net. 327 IN SRV 10 0 5062 mitry.p-cscf.sfr.net.Pour le NAT traversal, j'utilise STUN avec le service de Google:
stun.l.google.com:19302Ensuite il faut s'assurer que le client SIP met bien l'adresse WAN dans le champ Contact du message REGISTER.
Pour l'expiration de ce même REGISTER, j'ai mis 2 minutes (minimum accepté par SFR) comme ça en cas de changement d'IP, ça sera prendra 2 minutes max pour être joinable.
Pour le Keep Alive, j'utilise le message OPTIONS plutôt que NOTIFY, avec un intervalle de 20 seconds. Ca c'est pour s'assurer que le router garde le mapping NAT ouvert (le port UDP entrant redirigé vers mon client SIP).
Le plus grand problème que j'ai eu a résoudre est que SFR indique, dans le champ
Contact de certains messages SIP, le serveur
interne qui traite les appels (par example pcgw-0006.imsgroup-019.mit2asbc03.ims.sfr.net). Hors, les DNS publiques de SFR ne connaissent pas ces serveurs et certains clients SIP (incluant le mien) échouent à envoyer le message ACK nécessaire lors d'un appel sortant, ce qui cause une coupure de la communication par SFR après environ 32 secondes.
Il semble que le message ACK peut simplement aller au même endpoint (IP + port) utilisé depuis le début de la session SIP. Cela indiquerait que les noms des servers mentionnés précédemment sont des load balancers.
A ce stade je ne sais pas si le client SIP de la box SFR a accès à des serveurs DNS différents, ou bien si le champ Contact est ignoré (tout le temps ou ignoré si la résolution DNS échoue). Ca ne m'étonnerait pas que le client SIP des box SFR ignorent simplement l'erreur et que personne chez SFR ne s'est rendu compte que ces serveurs sont inconnus des serveurs DNS utilisés par la box.
Pour éviter une requête DNS qui va échouer, il semble que certains sur ce forum utilisent Asterisk avec la configuration
rewrite_contact=yes.
Comme je ne voulais pas installer Asterisk, j'ai configuré le client SIP directement avec une des IPs (92.91.129.72) d'un des serveurs et j'ai mis dans mon routeur une règle DNS wildcard. Ca marche, mais évidement ça va planter le jour ou SFR change les IPs.