Auteur Sujet: Utilisation Cisco ATA191-MPP pour la téléphonie VoIP d'un accès fibre SFR (IPv6)  (Lu 342 fois)

0 Membres et 1 Invité sur ce sujet

jrobin28260

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 13
  • Eure et Loir - 28
Pour ceux d'entre vous qui utilisent du matériel standard avec leur abonnement SFR, et qui voudraient utiliser un Cisco ATA191-MPP (le remplaçant du SPA112 dont le support a été arrêté par Cisco, et qui ne possédait pas de compatibilité avec IPv6) pour utiliser l'abonnement téléphonique VoIP/SIP inclus dans votre offre.
Voici les paramètres à renseigner dans l'interface. Tout y est, avec les explications.

-------------------------------------------
IMPORTANT ! Avant de commencer, à propos des IPv4 dites "CGNAT" : passage de l'ATA191 en IPv6 only obligatoire

Si vous ne possédez plus d'adresse IPv4 dédiée, en date d'octobre 2023, vous ne pouvez plus établir de connexion IPv4 aux serveurs SIP de SFR.
En effet, les connexions UDP en IPv4 vers les serveurs SIP de SFR semblent se perdre en chemin (ou alors c'est leur réponse qui se perd, ou alors c'est le serveur SIP qui refuse de répondre), mais dans les 3 cas, ça ne fonctionne plus.
Les connexions TCP/IP vers ces mêmes serveurs peuvent quant à elles s'établir, mais malgré ça, le serveur tente ensuite de signaler les appels entrants en envoyant des messages en UDP (qui ne seront pas acheminés non plus en cas d'IPv4 CGNAT). Même quand ces messages UDP sont acheminés jusqu'à l'ATA191, si la connexion a été faite en TCP/IP, l'ATA191 ignore alors ces messages UDP.

A cette date (Octobre 2023), en cas d'IPv4 CGNAT vous êtes donc forcés d'utiliser IPv6 pour joindre les serveurs SIP.
J'imagine que cette désactivation de prise en charge en IPv4 partagée est justifiée, du fait que les ports d'émission choisis et annoncés par client SIP (à la fois pour la connexion SIP et les flux audio RTP) ne sont plus garantis d'être libres (car potentiellement déjà utilisés par d'autres utilisateurs de l'adresse IPv4 partagée, le CGNAT ayant alors tendance à en mapper un autre de façon imprévisible), ce qui risquait de faire échouer des appels (en signalant envoyer le flux RTP depuis un port finalement déjà utilisé pour quelqu'un d'autre par le CGNAT).

Aussi, en cas d'utilisation (contrainte ou volontaire) de l'IPv6, l'ATA191 devra être réglé en IPv6 only sinon il signalera son adresse IPv4 locale lors des établissements d'appels. Et à cette date (2023-10) quand ça arrive, le serveur SIP de SFR coupe l'appel en cours.
-------------------------------------------

Network Setup > Basic Setup > Basic Settings
Si souhait (ou obligation en cas de CGNAT) d'utiliser IPv6 :
  • Stack Mode: IPv6 only
  • Signaling Preference: IPv6
  • Media Preference: IPv6

Si vous utilisez DHCPv6 sur votre réseau local et que votre routeur vous indique l'IP attribuée à votre ATA191, vous pouvez le joindre ainsi :

Se connecter à l'interface du Cisco en IPv6
  • http://[2a02:8400:XXXX:XXXX::X] (si vous utilisez DHCPv6 vous pouvez généralement attribuer un suffixe fixe à votre ATA191)
  • http://ata191-mpp.lan (en tout cas si le hostname du ATA191 est bien celui là, et ".lan" sur la plupart des routeurs, dont sur OpenWrt)

Network Setup > Basic Setup > Time Settings
  • Time Server: Manual: time.google.com (compatible IPv4 et IPv6)
  • Time Zone: France
  • Auto Recovery After Reboot: Yes

Network Setup > Advanced Settings > CDP & LLDP
  • Enable CDP: Disabled
  • Enable LLDP-MED: Disabled
  • Layer 2 Logging: Disabled
Optionnel mais si vous n'utilisez pas ces fonctionnalités, en cas d'analyse Wireshark c'est du bazar en moins.

Administration > Management > Bonjour >  Disabled
Optionnel, idem.

Administration > Management > User List
  • Optionnel. Remplacez le mot de passe "admin" (admin par défaut) avec attention (soyez sur de pouvoir le retrouver dans 3 ans !) sinon c'est Reset Button.
  • Il est également possible de remplacer le mot de passe "cisco" (cisco par défaut)

De façon à éviter que votre ATA191, une fois connecté à Internet, ne vienne télécharger une configuration spécifique (incluant mot de passe admin remplacé dans le cas d'OVH) :
Voice > Provisioning > Configuration Profile
  • Provision Enable: no
  • Profile Rule: (vide)

Voice > Provisioning > Firmware Upgrade
  • Upgrade Enable: no
Ça ne vous empêchera pas de faire les changements de firmware vous même rassurez vous.

Voice -> SIP -> NAT Support Parameters
  • Handle VIA received : YES
  • Handle VIA rport : YES

On en a besoin pour l'étape suivante.
Ce réglage est utile en cas d'IPv4 (transparent en cas d'IPv6), il permet à l'ATA191 de lire votre adresse IP+Port externe d’émission vu du serveur SIP (en lisant les entêtes "via" dans ses réponses).
Ainsi, pas la peine d'utiliser un serveur STUN à côté (un serveur STUN c'est un "what is my ip", en gros, mais grâce au entêtes VIA le travail est déjà fait).

Voice -> Line 1 -> NAT Settings
  • NAT Mapping Enable : YES
  • NAT Keep Alive Enable : YES
  • 2 Possibilités : version 2020
    • NAT Keep Alive Msg : $REGISTER (le serveur SIP de SFR n'aime pas le message $NOTIFY, ça renvoie des erreurs et ça fait buguer les appels)
    • NAT Keep Alive Dest: $PROXY
  • Ou alors version 2023
    • NAT Keep Alive Msg : $NOTIFY (le serveur SIP de SFR accepte finalement les messages "NOTIFY / Event: keep-alive", mais à condition de bien régler le paramètre suivant !)
    • NAT Keep Alive Dest: ims.mnc010.mcc208.3gppnetwork.org (c'est la valeur de la case "Proxy" plus bas - on la recopie ici car quand il y avait la valeur $PROXY, c'était le "Outbound Proxy" qui était utilisé dans le message, et ce n'était pas bon).

NAT Mapping Enable permet à l'ATA191 de demander à être contacté sur l'adresse IP:Port externe avec lequel le serveur nous voit (ça le place dans l'entête "Contact" lors de l'enregistrement)
En effet certains serveurs SIP vont prendre l'entête SIP "Contact" au pied de la lettre quand il faudra annoncer un appel entrant par exemple.
Si on est derrière un NAT il est donc judicieux d'activer ces options afin de demander au serveur SIP de continuer d'utiliser l'adresse/port qu'il utilise déjà pour communiquer avec nous.

NAT Keep Alive Enable permet, en l'absence de redirection de port IPv4 (ou de règle IPv6) exposant l'ATA191 depuis l'extérieur en continu, de garder la connexion active entre lui et le serveur SIP.
Sans cette option, et en l'absence d'appels, votre routeur pourrait rapidement penser que la connexion est terminée, et cesser de rediriger les messages en provenance du serveur SIP vers votre ATA191 (vous perdriez des appels entrants, ou l'information indiquant que l'interlocuteur a raccroché)

Voice -> Line 1 -> SIP Settings
  • SIP Transport : UDP
  • SIP Port : 5060 (c'est le port d'émission UDP des messages depuis l'ATA191 - en date d'Octobre 2023, utiliser un autre port ne pose pas problème)
En cas de réglage de "SIP Transport" sur TCP, ce sont les champs SIP TCP Port Min et Max qui seront utilisés pour définir le port d'émission. Mais pour rappel en date d'Octobre 2023 les connexions TCP/IP au serveur SIP de SFR fonctionnent mais les appels restent signalés en UDP donc pas le choix, il faut être en UDP).

Voice > SIP > SIP Timer Values (sec)
  • Reg Retry Intvl: 30 (OPTIONNEL - en l'absence de réponse du serveur, l'ATA191 attend 30 secondes avant de ré-essayer)
  • Reg Retry Long Intvl: 75 (OPTIONNEL - en cas de refus du serveur, ou de serveur injoignable - erreur réseau ou coupure Internet temporaire par exemple, ça permet de ré-essayer avant les 20 minutes par défaut)

Voice > SIP > RTP Parameters > RTP
  • RTP Packet Size: 0.020 (valeur utilisée pour les appels par le serveur SFR, et valeur par défaut sur les NB6VAC en 2023 - 10)

Voice -> Line 1 -> Proxy and Registration
  • Proxy : ims.mnc010.mcc208.3gppnetwork.org (souvent appelé hostname ou domaine)
  • Première variante (réglage analogue à celui utilisé par la Box SFR) :
    • Outbound Proxy : residential.p-cscf.sfr.net (souvent appelé proxy)
    • Use Outbound Proxy : YES (sinon il ignore la ligne précédente)
    • Use DNS SRV : YES (obligatoire pour la résolution DNS de residential.p-cscf.sfr.net, qui est un enregistrement de type "SRV")
    • DNS SRV Auto Prefix : YES (car residential.p-cscf.sfr.net n'existe pas, il faut ajouter un préfixe "_sip._udp" devant)
  • Deuxième variante (si vous voulez choisir vous même le serveur le plus proche de chez vous parmi ceux disponibles en Octobre 2023) :
    • Outbound Proxy : mitry.p-cscf.sfr.net:5062 / trappes.p-cscf.sfr.net:5062 / corbas.p-cscf.sfr.net:5062
    • Use Outbound Proxy : YES (sinon il ignore la ligne précédente)
    • Use DNS SRV : NO
    • DNS SRV Auto Prefix : NO
    Dans la 2ème variante précisez bien le ":5062" à la fin de l'adresse du Outbound Proxy, car sur le port 5060 les enregistrements échouent.

Voice -> Line 1 -> Subscriber Information
  • Display Name : +33XXXXXXXXX (nom d'usage présenté lors des appels sortants, ne semble pas obligatoire car Zoiper ne l'utilise pas, par exemple)
  • User ID : +33XXXXXXXXX (utilisé dans à peu près toutes les entêtes SIP)
  • Password : XXXXXXXXXXXXXXXX (sera utilisé lors de l'authentification après du serveur SIP, à l'enregistrement)
  • Auth ID : NDI0XXXXXXXXX.CTR.THD@sfr.fr (sera utilisé lors de l'authentification après du serveur SIP, à l'enregistrement)
  • Use Auth ID : YES (sinon il ignore la ligne précédente)

Voice > Line 1 > Audio Configuration
  • Preferred codec G711A

Récupération des identifiants :

SFR met à disposition un serveur pour que nos BOX viennent récupérer toutes seules et automatiquement leurs identifiants (celles-ci interrogent le serveur, prennent leurs identifiants, puis se connectent en SIP avec).
Malheureusement en parallèle de ça, les identifiants ne sont pas envoyés par mail (ni même disponibles sur l'espace abonné) comme à la vieille époque où tout le monde avait besoin de ces informations, mais un logiciel créé par l'utilisateur "nextgens" (qu'on remercie chaleureusement) existe pour compenser ce manque :
https://florent.daigniere.com/posts/2019/04/extracting-voip-credentials-from-my-broadband-router/

Attention, "extract-voip-parameters_v2.exe" ne fonctionne que lorsqu'on a déjà remplacé le routeur SFR par du matériel standard (probablement du fait que le serveur ne donne accès aux identifiants que quand ils ne sont pas déjà en cours d'utilisation, par la box par exemple).

Attention 2, si en IPv4 ou IPv6, la récupération des identifiants échoue vous pouvez désactiver l'IPv4 ou IPv6 temporairement (sur le WAN dans votre routeur, ou dans les propriétés réseau de votre OS).

Troubleshooting :

La VoIP SIP est une technologie complexe (mais au moins, c'est une science, qu'on peut comprendre et paramétrer).
C'est une technologie que les ingénieurs spécialisés en téléphonie IP ont passé du temps à apprendre - après tous ces efforts, certains n'ont pas spécialement envie de la voir être remplacée par autre chose (et de devoir tout réapprendre).
Mais en contre partie de sa flexibilité, cette technologie est infâme de complexité et de caprices. Il faudrait peut-être un jour la remplacer par quelque chose de plus simple. D'ici là, faisons avec (c'est mieux que rien et on n'a pas le choix).

Émission/Réception d'appels impossibles :

Gros problèmes en fonction des versions de firmwares pour le Cisco ATA191 !

  • 11.1.0 MSR4 : fonctionnel, mais je n'ai testé que brièvement (à tester dans la durée)
  • 11.2.1 : fonctionnel.
  • 11.2.2, 11.2.2 MSR1, 11.2.3 -> Une fois le "Register" effectué, toute émission de message vers le serveur SIP fait redémarrer le module voix et recommencer la connexion.
  • 11.2.4 (dernière version en date) -> Pour les appels sortants, la communication RTP une fois réglée dans les deux sens, échoue sans raison (flux entrant rejeté et flux sortant échouant à sortir).

On peut regarder les "Release Notes" des différentes versions, avec les "Resolved Caveats" pour chacune d'elles.
https://www.cisco.com/c/en/us/support/unified-communications/ata-190-series-analog-telephone-adapters/series.html#ReleaseandCompatibility

Pour le dernier bug (11.2.4) je l'ai reporté ici, à voir s'il sera corrigé.
Voir https://community.cisco.com/t5/voice-systems-and-accessories-small-business/ata191-mpp-firmware-11-2-4-regression-outgoing-calls-ipv6-only/td-p/4933684

Finalement, la Neufbox, elle est pas si mal hein ? 😂
Plus sérieusement, si vous êtes bons sous Wireshark, que vous voulez faire un peu de SIP, et que vous n'avez pas besoin d'un ATA191, n'hésitez pas à essayer d'autres marques.

TCP/UDP :
En date d'Octobre 2023, en cas d'utilisation du protocole TCP/IP au lieu de UDP, l'ATA191 parvient à établir la connexion SIP, et ajoute bien "transport=tcp" dans le champs "Contact" des messages qu'il envoie au serveur SIP, pourtant quel que soit le port d'émission utilisé, le serveur SIP continue de chercher à signaler les appels entrants via UDP. On est donc contraint d'utiliser UDP.

Keep-alives :
NAT Keep Alive Intvl : Sur OpenWrt 23.05.0-rc3, la durée de fermeture d'une connexion UDP sans activité est de 180 secondes pour les flux UDP à paquets nombreux, voire 60 en cas de très petits nombres de paquets échangés - ce qui est parfois le cas pour SIP.
L'ATA191 est par défaut configuré pour envoyer un paquet de "Keepalive" toutes les 15 secondes, finalement cette valeur est correcte (Wireguard conseille 25 secondes, OpenVPN 10 secondes...).

RTP Port Min et Max, et règle NAT pour la plage RTP vers l'ATA191
Inutile en IPv6.
En IPv4, la valeur par défaut de l'ATA191 (16384 à 16482) lui permet, à chaque appel (entrant ou sortant), de sélectionner un port d'émission RTP ayant assez peu de chances d'être déjà utilisé par votre routeur IPv4 / NAT. Le port que l'ATA191 va choisir sera également communiqué au serveur SIP pour que ce dernier y envoie les données voix. Si le port RTP choisi par l'ATA191 est déjà en cours d'utilisation par votre NAT, les données voix échoueront à être transmises.
Si vous êtes embêtés avec ça, vous pouvez toujours essayer de réserver cette plage de port en règle NAT / Port Forwarding UDP depuis votre routeur.
Pour info / pour les curieux, en Octobre 2023, la box SFR utilise quant à elle la plage 35500 - 35599 pour ses flux RTP audio.

Règle NAT pour SIP UDP vers l'ATA191 ? Mon conseil : non, utilisez le mécanisme de keep alive. Toutes les connexions sont initiées par l'ATA191 (oui, même les appels entrants).
Autant que l'ATA191 reste à l'abri des attaques, floods, etc.
Lorsqu'un appel arrive, la communication précédemment établie par l'ATA191 avec le serveur SIP, est utilisée pour prévenir l'ATA191, qui établit alors la communication RTP avec le serveur de voix.
L'ATA191 n'a donc pas vraiment besoin d'être joignable à distance : c'est lui qui établit toutes les communications vers les serveurs, qui peuvent alors lui répondre et le solliciter en cas d'appel.

Codec : L'ATA191 a tendance à préférer G711u (PCMU) alors que SFR a tendance à préférer G711a (PCMA). Du coup les appels se font en G711a (PCMA).
Lors des signalements d'appels sortants/entrants, les préférences et compatibilités de codec sont échangées avec le serveur, et les deux se mettent d'accord de façon automatique.


Quelques petites touches facultatives concernant l'ATA191 :

Les tonalités de l'ATA191 après une réinitialisation usine ne sont pas tout à fait celles que nous avions pris l'habitude d'entendre dans nos lignes françaises.
Voici quelques ajustements en provenance d'un ATA191 configuré par OVH en date de septembre 2023 :

Voice -> Regional -> Call Progress Tones

Dial Tone             : 440@-10;*(*/0/1)
Second Dial Tone      : 440@-10,330@-10;*(*/0/1+2)
Outside Dial Tone     : 440@-16;10(*/0/1)
Prompt Tone           : 440@-19,620@-19;*(*/0/1+2)
Busy Tone             : 440@-10;10(.5/.5/1)
Reorder Tone          : 440@-10;*(.5/.5/1)
Off Hook Warning Tone : 425@-10;*(.2/.2/1,.2/.6/1)
Ring Back Tone        : 440@-10;*(1.5/3.5/1)

Confirm Tone          : 440@-16;1(.25/.25/1)



Holding Tone          : 440@-20;*(.175/.175/1,.175/3.5/1)

Voice -> Regional -> Distinctive Ring Patterns
Ring1 Cadence : 2.25(.25/1.6);60(2/3.5)
Voice -> Regional -> Ring and Call Waiting Tone Spec
  • Ring Waveform : Sinusoid
  • Ring Voltage : 80

Pour ceux qui aimeraient jouer avec leur FAX, il faudra faire quelques essais, et peut-être utiliser ces paramètres ?
  • FAX Passthru Method : ReINVITE
  • FAX Passthru Codec : G711a

Voice -> Line 1 -> Dial Plan
(1[578]S0|11[259]S0|12[356]S0|1[06]xxS0|3xxxS0|11[68]xxxS0|00x.|0x.|2x.|7x.|90xxS0|**xx#|*xx#|#xx#|*xx*x.#|#xx*x.#|*941*xxxx*x.#|#94*xxxx*x.#|*61*x.*xx#|*61*x.*x#|*11*x.)J'imagine que le but est ici que l'appel soit émit plus rapidement une fois qu'on a fini de composer le numéro (avec le réglage par défaut il faut attendre longtemps après avoir fini de composer le numéro, certainement parce que l'ATA191 ne sait pas encore si on a fini de le taper).
-> TODO : essayer de déchiffrer ce Dial Plan, et vérifier qu'il n'y ait rien de spécifique à OVH dedans
-> https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cata/19x/3PCC/english/admin-guide/at9x_b_ata191-192-admin-mp/at9x_b_ata191-192-admin-mp_chapter_011.html#reference_33B6863D421C2DA0440BAD73D1601D10

Voice -> Line 1 -> Audio Configuration
Preferred Codec : G711a (la version 'a' étant la version Europe et Afrique, la valeur par défaut en France c'est plutôt celle-ci donc).

Voice -> SIP -> NAT Support Parameters
NAT Keep Alive Intvl : Sur OpenWrt 23.05.0-rc3, la durée de fermeture d'une connexion UDP sans activité est de 180 secondes, voire 60 en cas de très petits nombres de paquets échangés.
L'ATA191 est configuré pour envoyer un paquet de "Keepalive" toutes les 15 secondes, finalement cette valeur est correcte (Wireguard conseille 25 secondes, OpenVPN 10 secondes...)

Règles NAT IPv4 (ou règle Allow IPv6) et désactivation des Keep Alives :

En IPv4, et l'absence de CGNAT (en présence d'une IPv4 dediée à votre WAN), une variante un peu moins "plug and play" est possible, il est possible de désactiver le Keep Alive, à condition d'aller dans les réglages de votre routeur pour ouvrir le port local d'émission (5060) en règle NAT vers l'ATA191. Il resterait joignable depuis l’extérieur en permanence et sans restriction sur ce port. Pour plus de sécurité si vous faites ça, dans Voice -> Line 1 -> SIP Settings, on peut passer l'option Restrict Source IP à YES pour que l'ATA191 ne traite que les réponses du serveur auquel il s'est connecté (empêche l'ATA191 de prendre en charge les requêtes malveillantes qui viendraient d'autres adresses).

En IPv6 vous pouvez créer une règle analogue (ce n'est plus une redirection, mais une règle dite "Allow"), là encore même principe, pour plus de sécurité si vous faites ça, dans Voice -> Line 1 -> SIP Settings, on peut passer l'option Restrict Source IP à YES pour que l'ATA191 ne traite que les réponses du serveur auquel il s'est connecté (empêche l'ATA191 de prendre en charge les requêtes malveillantes qui viendraient d'autres adresses).
« Modifié: 05 octobre 2023 à 16:07:36 par jrobin28260 »

jrobin28260

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 13
  • Eure et Loir - 28
Voilà, j'espère que le paquet d'heures qu'on a passé avec un ami à faire le tour de ce sujet assez costaud pour le SPA112 à l'époque en 2020, puis toutes ces heures passées sur l'ATA191 pour mettre à jour le tutoriel et galérer avec les mauvais firmwares, sauront aider d'autres personnes !

Vos retours et améliorations sont les bienvenues, de même que si à l'avenir quelque chose mérite d'être ajouté/modifié dans mon message initial, j'autorise bien sûr les modérateurs à éditer.
Idem si SFR veut documenter ces choses officiellement, il n'y a évidemment pas de souci à reprendre des informations ici.

Attention, je ne suis pas très assidu sur le forum, en cas de questions ne pas hésiter à participer sans trop m'attendre !