Résumé : L'interface de Linphone, l'un des rares téléphones en logiciel libre encore maintenu devient agréable (et unifiée sur Windows/Android/GNU/Linux) à partir de la version 4.X. Attention si tu utilises un VPN sur ton ordiphone (smartphone) Android. Si Linphone est démarré après le VPN ou pendant qu'Android n'a pas encore pris en compte les serveurs DNS récursifs du fournisseur de VPN, alors il échouera à s'enregistrer sur le serveur téléphonique sans lever d'alerte explicite. Les autres logiciels de téléphonie disponibles sur F-Droid (Lumicall, Sipdroid, SIP Caller) sont confrontés au même problème. Il faut alors fermer et ré-ouvrir Linphone (Paramètres Android -> « Applications » -> « Linphone » -> « Forcer l'arrêt »). Si ça ne suffit pas, remplacer le nom du serveur téléphonique par son adresse IP dans le champ « Serveur mandataire » de la configuration d'un compte SIP dans les options de Linphone sans modifier le reste de la valeur de ce champ + cocher l'option « Outbound proxy - Faire passer tous les appels via le serveur mandataire SIP » + redémarrer Linphone. À utiliser avec parcimonie car l'adresse IP associée à un nom peut changer sans préavis, ce qui rend caduque la configuration.
VOIP = téléphonie sur Internet. Toute la téléphonie (box, mobile, téléphonie d'entreprise) passe par Internet à moment donné. J'ai écrit les trois premiers volets de la série il y a bientôt cinq ans : Tome 1 : Free Mobile, Tome 2 : des implémentations bancales et Tome 3 : Numericable. Depuis, je me suis tenu à l'écart de la VOIP… jusqu'à récemment. Et là, c'est le drame.
Linphone est l'un des téléphones en logiciel libre encore maintenu. Il faut être honnête, l'interface graphique s'est bonifiée avec le temps, notamment à partir des versions 4.X. Interface plus simple à prendre en main et unifiée pour winwin / GNU/Linux / Android.
J'ai une ligne téléphonique souscrite chez OVH. Forfait « VOIP découverte ».
Je veux l'utiliser sur mon ordiphone (smartphone) Android. En 2017, j'utilisais le logiciel CSIPSimple. Il était disponible sur F-Droid, le magasin d'applications libres pour Android. Il fonctionnait impeccable sans faire chier. C'était la crème. Sauf qu'il n'est plus maintenu et qu'il a été retiré de F-Droid. Linphone est disponible dans F-Droid, alors allons-y.
J'ajoute mon compte SIP à la configuration de Linphone en utilisant l'assistant. « Utiliser un compte SIP ». « Nom d'utilisateur » = « Login / User name » dans l'email d'OVH = numéro de téléphone. « Mot de passe » = celui que j'ai créé dans le manager d'OVH. « Domaine » = « Domain / Registrar » dans l'email d'OVH = « sip5.ovh.fr » dans mon cas. Transport = UDP (OVH ne prend pas ne charge TLS, ce qui est dommage).
Linphone ne parvient pas à s'enregistrer auprès d'OVH. « Connexion en cours » puis « Connexion échouée », affiche-t-il. Vu les ratés de l'assistant sans la version GNU/Linux de Linphone, je modifie les paramètres du compte SIP à la main dans les paramètres : ça ne fonctionne pas mieux.
Les autres logiciels de téléphonie disponibles sur F-Droid (Lumicall, Sipdroid, SIP Caller) sont confrontés au même problème.
À court d'idées, j'active le journal de Linphone. C'est dans le menu -> « Options » -> « Avancé » -> « Activer les traces de débogage ». Il faut fermer et ré-ouvrir Linphone : Paramètres Android -> « Applications » -> « Linphone » -> « Forcer l'arrêt ». Le journal sera stocké dans /data/data/org.linphone/files/linphone1.log
(source). Je le copie sur ma carte SD à l'aide du gestionnaire de fichiers Android Ghost Commander. J'imagine qu'on peut également le récupérer avec adb
.
Que lit-on dans ce journal ? ERROR channel_res_done: DNS resolution failed for sip5.ovh.fr
.
Hum… Pourtant plus haut, on lit aussi :
MESSAGE Resolver is using DNS server(s):
MESSAGE 89.2.0.1
MESSAGE 89.2.0.2
MESSAGE 80.67.169.12
MESSAGE 80.67.169.40
Hum… J'utilise un VPN OpenVPN (avec l'application non officielle mais disponible sur F-Droid OpenVPN for Android) qui débouche chez un Fournisseur d'Accès à Internet de confiance. On a vu Bouygues Telecom modifier les réponses DNS, on a vu SFR modifier les réponses web, etc.
J'utilise également le pare-feu Android AFWall+. Comme tous les logiciels, Linphone est contraint d'émettre uniquement via le VPN. Je bloque les adresses IP des récursifs DNS de mes opérateurs (mobile, Wi-Fi, etc.) afin d'éviter les fuites DNS c'est-à-dire quand la résolution des noms s'effectue via le VPN mais en utilisant les serveurs DNS récursifs de mes opérateurs plutôt que ceux de mon fournisseur de VPN, ce qui informe mes opérateurs de mes usages alors que si j'utilise un VPN, c'est précisément pour qu'ils en sachent rien.
Linphone mélange les serveurs DNS récursifs de mon opérateur réseau (Numericable) et les serveurs DNS récursifs de mon FAI de confiance. Forcément, une fois le VPN établi, les récursifs DNS de Numericable ne répondent plus à Linphone (car ils répondent uniquement aux clients, identifiés par leur adresse IP), donc il échoue à résoudre le nom du serveur de téléphonie d'OVH.
C'est bizarre. Ce VPN pose problème à aucun autre logiciel ! Où Linphone a-t-il récupéré cette liste de serveurs DNS récursifs ? Il le consigne dans son journal :
MESSAGE [Platform Helper] [Network Manager 24] Found DNS host 89.2.0.1 from network WIFI with default route
MESSAGE [Platform Helper] [Network Manager 24] Found DNS host 89.2.0.2 from network WIFI with default route
MESSAGE [Platform Helper] [Network Manager 24] Found DNS host 80.67.169.12 from active network VPN
MESSAGE [Platform Helper] [Network Manager 24] Found DNS host 80.67.169.40 from active network VPN
Ok, donc par Android lui-même. Ça va être compliqué d'aller contre ça.
Si je tentais d'utiliser que des adresses IP dans la configuration de Linphone ? Dans les paramètres de Linphone (Menu -> « Options »), je sélectionne mon compte SIP. Je change la valeur du champ « Domaine » pour « 91.121.129.29 », c'est-à-dire l'adresse IP associée au nom « sip5.ovh.fr » à l'heure actuelle (attention, ça peut changer sans préavis !). Je remplace aussi « sip5.ovh.fr » par son IP dans le champ « Serveur mandataire » sans toucher au reste de la valeur du champ. Je coche l'option « Outbound proxy - Faire passer tous les appels via le serveur mandataire SIP ». Je redémarre Linphone.
Ça ne fonctionne toujours pas. Cette fois-ci, Linphone reste bloqué sur « Connexion en cours ».
Que consigne-t-il dans son journal ?
MESSAGE channel [0x8785b0c0]: received [345] new bytes from [UDP://91.121.129.29:5060]:
SIP/2.0 404 Domain not bound
CSeq: 23 REGISTER
Hum… Linphone reçoit une réponse du serveur téléphonique d'OVH à son message d'enregistrement (SIP REGISTER) lui disant « Domain not bound ».
Si, dans les paramètres du compte SIP, je laissais l'adresse IP dans le champ « Serveur mandataire » et que je remettais « sip5.ovh.fr » dans le champ « Domaine », alors Linphone contacterait le serveur d'OVH sans tenter de résoudre son nom grâce au champ « Serveur mandataire » puis il lui demanderait à s'enregistrer sur le domaine « sip5.ovh.fr » connu d'OVH.
Je fais ça. Je redémarre Linphone. Ça fonctionne \o/
En vrai, ce cas est difficile à reproduire. Il semble se produire quand Linphone a été démarré avant le VPN et/ou qu'Android n'a pas encore pris en compte les récursifs DNS appris par le VPN.
Plutôt que de changer la configuration de Linphone, je recommande de le fermer et de le ré-ouvrir (Forcer l'arrêt dans les paramètres Android, voir ci-dessus). C'est plus pérenne que d'enregistrer une adresse IP dans une configuration, car, par définition, elle peut changer sans préavis, ce qui mettra Linphone hors service.
Mais, si Linphone refuse ponctuellement de fonctionner même s'il a été (re)démarré après le VPN et/ou que t'es dans l'urgence, tu sais quoi faire : remplacer le nom du serveur téléphonique par son adresse IP dans le champ « Serveur mandataire » de la configuration d'un compte SIP dans les options de Linphone.