Bonjour à tous, 

Mes collègues et moi rencontrons des problèmes avec nos softphones SIP, et 
j'aimerais un avis et surtout être réconforté. 
=> Je sais que TOUTES les implémentations VOIP foirent plus ou moins. Je me 
souviens d'une box Numericable qui rebootait lorsqu'un SIP INVITE légitime > 
1645 octets arrivait du WAN. Je me souviens des erreurs de segmentation 
aléatoires de Jitsi/Ekiga. Je me souviens des messages SIP pas trop conformes à 
la norme et à la validation approximative des messages SIP reçus. Etc. 
=> Mais je doute que le nombre de problèmes que nous rencontrons (et leur 
amplitude) soit normal. 
=> Je suis dans une démarche de compréhension technique des problèmes 
rencontrés, donc je ne suis pas intéressé par des alternatives à des 
softphones. 


Depuis 5 ans, nous utilisons le PABX Asterisk empaqueté dans la solution XiVo. 
Nous avons des postes téléphoniques SNOM, des téléphones analogiques, des T2, 
etc. IPv4 uniquement. Ce PABX n'est pas joignable depuis l'extérieur (en IP). 

Nous avons aussi un VPN Cisco ASA. Adressage IPv4 RFC1918 (les réseaux internes 
sont plutôt adressés avec des IPv4 publiques, pas de v6). Pas d'IPv6. Accès aux 
réseaux internes, pas d'accès à Internet. Pas de filtrage particulier (oui, 
n'importe quel utilisateur du VPN peut se promener dans tous les réseaux 
internes, ça va changer). 

Depuis 6 mois environ, nous avons de très rares softphones Linphone 
majoritairement sous winwin 7/10. Ils sont utilisés conjointement avec le VPN. 

Jusque-là, personne nous a fait remonter des problèmes sur les softphones+VPN. 
Mais vu le peu d'utilisateurs… 
Le coronavirus débarque et nous voilà priés de fournir un softphone à tout le 
monde. Et là, surprise, ça ne marche plus. Ou plus tout le temps. Ou plus pour 
tout le monde. 


Le premier problème est un classique. Entre un softphone+VPN à domicile et un 
poste SNOM du bureau, soit les deux interlocuteurs ne s'entendent pas, soit un 
seul entend l'autre. 
=> Dans ses SDP, Linphone insère l'IP RFC1918 de l'interface physique (eth0, 
Wi-Fi, etc.) plutôt que celle du VPN. Forcément, ça ne fonctionne pas. 
=> On installe un serveur STUN dans le réseau de l'organisation. On configure 
STUN dans les paramètres de Linphone et ça fonctionne. 
=> Notons que certains Linphone fonctionnent aléatoirement et temporairement 
sans STUN. Même chose avec Jitsi. Comment est-ce possible ? 
=> Un Wireshark nous montre qu'une fois l'échange SIP initié, le client cause 
en STUN au PABX et que celui-ci répond. Pourquoi ça ne suffit pas toujours ? 
C'est d'ailleurs bizarre, car aucun serveur STUN écoute en permanence, on 
dirait que c'est fait à la demande ? 


Deuxième problème. Lors d'une conversation entre un Linphone 3.11 empaqueté 
dans Debian GNU/Linux ou Ubuntu GNU/Linux et un Linphone 4.1.1 GNU/Linux 
distribué via Flatpak, si c'est le Linphone 4.1.1 qui initie la conversation, 
la conversation durera 31/32 secs au maximum avant raccrochage auto. 
=> Pas de soucis si c'est le Linphone 3.11 qui initie la conversation. 
=> Pas de problème quand le Linphone 4.1.1 cause à un SNOM ou à un 06/09 
externe. 
=> Rien d'évident dans le journal des deux Linphone. 
=> Côté Asterisk, on voit que le Linphone 4.1.1 quitte le « 'native_rtp' 
basic_bridge », donc Asterisk nettoie, à raison, avec code retour != 0. 
=> Wireshark montre un Asterisk qui envoie, au Linphone 4.1.1, un SIP BYE avec 
un entête « X-Asterisk-HangupCause: no user responding ». 
=> Pas de pare-feu, pas de NAT. 
=> Nous pensons que le Linphone 3.11 n'envoie pas un message SIP attendu par 
son interlocuteur. Ou paquet malformé. Ou Linphone 4.1.1 plus strict. Ou… 
==> Solution : sur GNU/Linux, utiliser Linphone 3.12 (+STUN, bien entendu) 
partout. Ça fonctionne impec', sans exception. 


Troisième problème. Le journal du VPN nous montre parfois des paquets UDP 
bloqués entre le serveur Asterisk et un client VPN. C'est très peu (moins de 10 
paquets bloqués sur les 5 comptes utilisateurs surveillés pendant la matinée, 
mais quand même. 
=> « no inspect sip » => plus de blocage. 


Quatrième problème. Linphone 4.1.1 pour GNU/Linux arrête subitement d'émettre 
des requêtes STUN. 
=> Wireshark installé sur la machine est formel. 
=> STUN est toujours activé dans la conf'. 
=> Linphone n'a pas été stoppé entre le moment "ça marche" et le moment "ça 
marche plus". 
=> L'ordinateur n'a changé de réseau, n'a pas été redémarré ni autre. 
=> Après plusieurs redémarrages de Linphone, celui-ci émet à nouveau des 
requêtes STUN, reçoit une réponse… mais choisi d'envoyer l'IPv4 RFC1918 de 
l'interface eth0 dans sa SDP… … … Forcément, son utilisateur n'entendra pas son 
correspondant… 
=> Entre le "ça marche" et "ça marche plus", l'ordinateur a obtenu une IPv6 sur 
son réseau local. 
=> Dans les paramètres de Linphone, décocher « Autoriser IPv6 » conduit 
Linphone à intégrer l'IPv4 obtenue via STUN dans sa SDP, et donc à rétablir le 
fonctionnement. Aucun dysfonctionnement constaté cet après-midi. 


Cinquième problème. Conversation entre un Linphone 4.1.1 winwin et un Linphone 
4.1.1 winwin ou Linphone 4.1.1 GNU/Linux. Personne s'entend. STUN est configuré 
explicitement sur tous les Linphone. 
=> Wireshark nous montre que le Linphone winwin reçoit le flux RTP de 
l'interlocuteur GNU/Linux. 
=> En revanche, pendant moins d'une seconde, le Linphone winwin émet son flux 
RTP avec ip dst = serveur Asterisk. Après il interprète la SDP, journalise cela 
« Change audio stream destination: RTP=10.30.1.24:7078 RTCP=10.30.1.24:7079 » 
(l'IP est bien celle de l'interlocuteur) mais il n'émet plus de RTP ! On dirait 
un bug de bascule, mais c'est la base de SIP (mise en relation, musique 
d'attente, transfert d'appel…). Trop gros pour être crédible. 
=> Avec Linphone 3.11 winwin : personne s'entend et ça raccroche auto au bout 
de 31/32 secs (voir deuxième problème). 
=> Avec Linphone version winwin store : en fonction de qui initie l'appel, soit 
personne s'entend soit uniquement un interlocuteur sur les deux. Et ça 
raccroche auto au bout de 31/32 secs (voir deuxième problème). 
=> Rien dans le journal Asterisk. À le lire, le job est fait, ça dépile les 
contextes, vérifie les droits d'appels, et crée des native_rtp basic-bridges 
pour mettre les gens en relation. Tout se passe comme si c'est toujours les 
clients qui foirent et obligent Asterisk à clore la communication. 
=> Pare-feu winwin désactivé, pas de NAT. 
=> Désactiver ICE côté Asterisk + redémarrer Asterisk change rien. 
=> Utiliser le client VOIP Zoiper + STUN : personne s'entend. 
=> Utiliser le client Jitsi ou Blink : parfois ça fonctionne, mais vu qu'il 
n'est pas possible de configurer explicitement STUN, le comportement est 
aléatoire. 
=> En fin de journée, sans action de notre part, on a pu avoir des appels 
Linphone version winwin store <=> Linphone 4.1.1 GNU/Linux. Je parie que ça ne 
fonctionnera plus demain. 
=> La version 4.1.1 pour winwin dont l'exe est distribué sur le site officiel 
du projet ne fonctionne toujours pas. 
=> Si c'est le Linphone GNU/Linux qui initie l'appel, alors ça raccroche auto 
au bout de 31/32 secs (deuxième problème). Quelqu'un sait pourquoi ? 
=> Très rigolo. Si, dans l'interface web de XiVo, pour chaque ligne SIP 
participant au test, nous changeons la valeur du « temps de sonnerie » de 30 
secs à 60 secs, que les deux softphones sont redémarrés, alors ça change rien. 
Mais si nous remettons 30 secs, que l'on ne redémarre pas nos softphones, alors 
l'appel peut durer autant qu'on veut. Si l'on redémarre nos softphones, retour 
case départ. WAAAAAAAAAAAAAAAT ???!!! 


Pour finir, un bug rigolo. Lors d'un appel avec un Linphone winwin store, si la 
fenêtre Linphone est réduite, les deux interlocuteurs ne s'entendent plus. Il 
n'est pas obligatoire de laisser Linphone au premier plan, mais interdiction de 
le réduire dans la zone de notification. C'est beau. 


Voilà… Si vous avez 
=> du réconfort du genre « j'ai déjà vécu autant de problèmes avec mon 
installation SIP, t'es pas un cas isolé » (les problèmes rencontrés sont 
tellement bloquants pour la majorité des utilisateurs que je peine à croire que 
nous sommes les premiers à les expérimenter)… 
=> des explications techniques pour expliquer les points 1 (pourquoi certains 
clients VOIP fonctionnent parfois sans STUN à contexte/environnement identique) 
et 5 (pourquoi ça raccroche au bout de 31/32 secs ? Quelle est la sorcellerie 
derrière la modification du temps de sonnerie ?)… 
=> voire une réponse à la question « tout se joue VRAIMENT à une version de 
softphone près ? »… 
=> Merci d'avance. 

Bonne fin de journée. 

---------------------------
Liste de diffusion du FRnOG
http://www.frnog.org/

Répondre à