La Fibre

Datacenter et équipements réseaux => Routeurs => Téléphone Téléphonie VoIP / SIP => Discussion démarrée par: jrobin28260 le 05 octobre 2023 à 14:43:56

Titre: Utilisation Cisco ATA191-MPP pour la téléphonie VoIP d'un accès fibre SFR (IPv6)
Posté par: jrobin28260 le 05 octobre 2023 à 14:43:56
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 :

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

Network Setup > Basic Setup > Time Settings

Network Setup > Advanced Settings > CDP & LLDP
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

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

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

Voice -> SIP -> NAT Support Parameters

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 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
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)

Voice > SIP > RTP Parameters > RTP

Voice -> Line 1 -> Proxy and Registration

Voice -> Line 1 -> Subscriber Information

Voice > Line 1 > Audio Configuration

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 !


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

Pour ceux qui aimeraient jouer avec leur FAX, il faudra faire quelques essais, et peut-être utiliser ces paramètres ?

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).
Titre: Utilisation Cisco ATA191-MPP pour la téléphonie VoIP d'un accès fibre SFR (IPv6)
Posté par: jrobin28260 le 05 octobre 2023 à 14:45:46
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 !