Cas typiques — recettes par symptôme¶
Bibliothèque de cas concrets. Chaque entrée : symptôme, hypothèses à tester en ordre, fix typique. À enrichir au fil des incidents.
1. Pas d'audio bidirectionnel¶
Symptôme : appel établi (sonne, décroche), mais aucun audio dans aucun sens.
Hypothèses (ordre):
- Codec mismatch — les 2 côtés n'ont aucun codec en commun. SDP
answer côté serveur indique
m=audio 0(port 0 = rejet). pjsip show endpoint <ext>→ check lesCodec(s)autorisés.- Solution : aligner avec ce que parle le trunk SIP / le téléphone.
-
Quirk Wazo (à vérifier sur FreePBX) :
allow=!all,ulaw,alawen une seule ligne (cf reference_wazo_confd_codecs_quirk). -
Port RTP bloqué par firewall — le 5060 passe (signal OK), mais pas le range 10000-20000.
- Côté serveur :
ufw statusetiptables -L -n. -
Côté trunk : whitelist IP côté SBC opérateur.
-
external_media_addressmauvais sur Asterisk dans le cloud. - Le serveur annonce une IP non routable dans le SDP.
cat /etc/asterisk/pjsip.transports_custom_post.conf(FreePBX) ou la conf transport : vérifierexternal_media_address= l'IP publique de l'instance.
2. Audio dans un seul sens (envoyé OK, reçu KO ou inverse)¶
Symptôme : "j'entends mon correspondant mais lui ne m'entend pas" (ou vice-versa).
Hypothèses :
- NAT du côté qui ne reçoit pas son audio — son SDP annonce une IP RFC1918 (192.168.x), l'autre lui envoie le RTP dans le vide.
-
Solution endpoint : enabler
rtp_symmetric=yes,force_rport=yes,rewrite_contact=yes. -
Coturn loopback peer (cas WebRTC) — coturn refuse de relayer vers une IP hôte. Bug suspecté de wazo-prod-01.
-
Solution :
external-ip=<IP publique>dans turnserver.conf, ou séparer coturn et Asterisk sur 2 instances. -
MTU bridge — paquets RTP fragmentés perdus en route.
- Solution : tester avec
ping -M do -s 1472 <peer>pour trouver la PMTU. Si KO < 1472 : ajuster le MTU côté tunnel/VPN.
3. Le téléphone ne s'enregistre pas¶
Symptôme : le Yealink (ou softphone) reste avec une LED rouge
"non enregistré". pjsip show contacts ne le voit pas.
Hypothèses :
- Mauvais creds — voir les logs auth :
grep -i auth /var/log/asterisk/full | tail. - Port 5060 bloqué — tester
tcpdump port 5060côté serveur, voit-on un REGISTER arriver ? Non = bloqué en amont (firewall site ou NAT côté téléphone). - Adresse serveur mauvaise dans le téléphone — vérifier la conf provisioning Yealink (FQDN exact + port + transport).
- DNS — le FQDN résout-il vraiment vers l'IP du serveur depuis le LAN du téléphone ?
- Certificat TLS expiré (si transport TLS) — le téléphone refuse
silencieusement.
openssl s_client -connect pbx.fqdn:5061. - fail2ban ban temporaire —
fail2ban-client status sshdetfail2ban-client status asterisk.
4. Appel sortant 503 Service Unavailable¶
Symptôme : on compose un numéro externe, on entend "service indisponible" ou la ligne raccroche immédiatement.
Hypothèses :
- Trunk pas registered —
pjsip show registrations. SiRejectedou absent : creds, IP whitelist côté opérateur, ou opérateur en panne. - Outbound route non matchée — le pattern de la route ne couvre pas le numéro composé. FreePBX → Outbound Routes → Dial Patterns.
- No Service à l'opérateur — heure de maintenance Sewan, contrat dépassé en MOU/min.
5. Appel entrant ne sonne nulle part¶
Symptôme : appeler le DID, ça sonne 1-2 secondes puis raccroche côté appelant. Aucun téléphone ne décroche.
Hypothèses :
- DID pas mappé dans Inbound Routes (FreePBX) — créer la route avec exact match du DID + destination.
- Trunk identifie pas l'INVITE entrant — config
identifycôté PJSIP : Asterisk doit reconnaître l'IP source du SBC opérateur. - Context de routage incorrect — l'INVITE arrive dans un context où l'extension cible n'existe pas.
6. La voix est métallique / robotisée¶
Symptôme : on s'entend mais ça grésille, robotique.
Hypothèses :
- Jitter — variations de latence réseau qui ne tiennent pas dans le buffer.
tail -F /var/log/asterisk/full | grep -i jitterou Wireshark RTP Stream Analysis.- Solution court terme : augmenter
jbmaxsizedansrtp.conf. -
Solution propre : QoS WAN + Cat 6A + WiFi 6 / DECT solide.
-
CPU surchargé sur le serveur — transcodage qui sature.
toppendant un appel → siasteriskà 100% CPU.-
Solution : aligner les codecs pour éviter le transcodage.
-
Codec compress trop — Opus 6kbps à du low quality.
- Forcer un codec PCMA/PCMU (au prix de plus de BP).
7. Échos / larsen¶
Symptôme : l'appelant entend sa propre voix avec un délai.
Hypothèses :
- Echo cancellation Asterisk désactivée — option
echo_canceldanschan_dahdi.conf(analogique) ouechocanPJSIP. - Microphone trop proche du speaker côté téléphone — vérifier le hardware.
- Trunk SIP qui boucle son propre RTP — bug rare côté opérateur, à signaler.
8. Le BYE n'est pas propagé (raccroche d'un côté ne ferme pas l'autre)¶
Symptôme : "je raccroche, l'autre entend toujours sonner" (cas réel observé sur l'app technotrement-phone Wazo build 41).
Hypothèses :
- WebSocket fermée trop tôt — l'app coupe la WSS avant que le BYE soit envoyé. Solution : retenir la WSS jusqu'à confirmation ACK du BYE.
- Asterisk n'a pas reçu le BYE côté app, mais l'autre côté est resté en l'air.
pjsip show channelspeut révéler des canaux fantômes.core hangup allen dernier recours pour clean.- CallKit qui release sans dire à JS (iOS) — bien chaîner
endCall()natif → SIP BYE.
Template pour ajouter un cas¶
Quand vous résolvez un nouveau cas, ajoutez-le ici en suivant ce template :
## N. Court titre du symptôme
**Symptôme** : description précise et observable.
**Hypothèses** (ordre du plus probable au moins probable) :
1. **Cause A** — comment vérifier — comment fixer
2. **Cause B** — ...
Pour aller plus loin¶
- Méthodologie debug — la pyramide
- Lire un trace SIP — pour les diags signal
- Wireshark VoIP — outillage media
- Checklist 5 min — réflexes rapides