Aller au contenu

(Cours/TP) Téléphonie sur IP - Mise en oeuvre d'un IPBX Asterisk

!!UPDATE IN PROGRESS!!

Objectifs pédagogiques

À l'issue de cet atelier, vous serez capable de :

  • Comprendre les concepts de la VoIP : signalisation, média, protocoles (SIP, RTP), codecs.

  • Conseiller une entreprise sur l'intérêt de passer à la VoIP et préconiser le matériel et l'architecture adaptés.

  • Installer et configurer un IPBX Asterisk : postes, plan de numérotation, messagerie vocale.

  • Configurer des softphones et passer de vrais appels.

  • Observer un appel VoIP sur le réseau avec Wireshark et en tirer les conséquences en matière de QoS et de sécurité.

Programme de la journée

Matin : cours théorique express (~1h), puis début du TP : installation d'Asterisk, premier poste, premier appel.

Après-midi : second poste, appels entre postes, messagerie vocale, analyse Wireshark, bonus SVI et synthèse "conseiller une PME".

💡 L'objectif de la journée tient en une phrase : à 17h, votre téléphone sonne, vous savez expliquer pourquoi et vous savez le vendre à un client.

Cours / présentation (slides)


Pourquoi la VoIP ? Le contexte qui fait vendre

Le RTC (le réseau téléphonique historique sur cuivre) ferme : en France, Orange décommissionne les lignes commune par commune, pour une extinction totale à l'horizon 2030, et plus aucune ligne analogique n'est commercialisée depuis 2018. La question pour une entreprise n'est plus "faut-il y passer ?" mais "quand et comment ?", et c'est là que le technicien est attendu.

Ce que la VoIP apporte :

  • Coûts : un seul réseau (données + voix) à câbler et maintenir, des appels inter-sites gratuits, des tarifs opérateur réduits.

  • Souplesse : ajouter un poste = une ligne de configuration ; le numéro suit l'utilisateur (télétravail, mobilité).

  • Services intégrés : messagerie vocale par mail, Serveur Vocal Interactif (SVI), visio, lien avec l'annuaire et le CRM (communications unifiées).

Ce qu'il faut annoncer honnêtement :

  • Dépendance au réseau et à l'électricité : plus de réseau = plus de téléphone (d'où onduleurs, PoE, redondance).

  • QoS : la voix exige un réseau préparé (voir plus loin).

  • Sécurité : la téléphonie devient attaquable comme tout service IP (écoute, usurpation, fraude aux appels surtaxés).

💡 Vendre la VoIP sans parler de la QoS, c'est préparer le ticket d'incident de la semaine suivante.


Le vocabulaire en une table

Terme En clair
VoIP Transporter la voix sur un réseau IP
ToIP L'ensemble du service téléphonique sur IP (postes, standard, répondeurs, SVI...) : la VoIP est le transport, la ToIP le service complet
PBX / IPBX Le standard téléphonique de l'entreprise ; l'IPBX est sa version logicielle sur IP (ex : Asterisk)
Softphone Téléphone logiciel (appli PC ou smartphone)
Hardphone Téléphone physique IP, branché en Ethernet
Trunk SIP La "ligne" qui relie l'IPBX à un opérateur pour l'extérieur (remplace les lignes RTC)
Centrex IPBX hébergé chez l'opérateur, comme un logiciel SaaS : rien à administrer localement, facturation à l'usage ou au poste

Le voyage d'un appel : signalisation et média

LE concept central de la journée. Un appel VoIP, ce sont deux flux distincts :

  • La signalisation (protocole SIP, port 5060, protocole texte lisible) : "je veux appeler le 6002", "ça sonne", "il a décroché", "il a raccroché". Les messages essentiels : REGISTER (le poste se présente à l'IPBX au démarrage : le pointage du matin), INVITE (la demande d'appel), 200 OK (accepté, l'appel s'établit), BYE (fin d'appel).

  • Le média (protocole RTP) : la voix elle-même, découpée en petits paquets audio envoyés en continu.

Analogie : la standardiste

La standardiste (SIP) reçoit votre demande, fait sonner le bon correspondant et branche les fiches. Une fois branchées, la conversation (RTP) circule directement dans le câble : la standardiste n'écoute pas. Quand vous raccrochez, elle débranche. Deux choses différentes, qui peuvent même emprunter des chemins réseau différents !

 MicroSIP (6001)              Asterisk (IPBX)             MicroSIP (6002)
      |                             |                            |
      |----- SIP : INVITE 6002 --->|                            |
      |                             |----- SIP : INVITE -------->|
      |                             |<---- SIP : 180 Ringing ----|   (ça sonne)
      |<---- SIP : 180 Ringing ----|                            |
      |                             |<---- SIP : 200 OK ---------|   (décroché !)
      |<---- SIP : 200 OK ---------|                            |
      |                                                          |
      |<============ RTP : la voix, dans les deux sens =========>|
      |                                                          |
      |----- SIP : BYE ----------->|----- SIP : BYE ----------->|   (raccroché)

💡 Ce découpage explique la panne VoIP la plus classique du métier : "ça sonne mais on ne s'entend pas" = la signalisation (SIP) passe, mais le média (RTP) est bloqué quelque part (pare-feu, NAT). Deux flux, deux diagnostics.

💡 Pour la culture : H.323, l'ancêtre des années 90 (complexe, binaire), a été supplanté par SIP partout.


Les codecs : la voix mise en boîte

Un codec transforme la voix en données, avec un compromis qualité / bande passante / CPU :

Codec Débit voix À retenir
G.711 (alaw/ulaw) 64 kbit/s Le standard universel, qualité de référence (celle du RTC), aucune compression
G.722 64 kbit/s La "voix HD" des hardphones récents : un son plus naturel
G.729 8 kbit/s Très compressé, idéal pour les liaisons contraintes, plus gourmand en CPU
Opus 6-510 kbit/s (adaptatif) Le codec moderne (applications, visio sur navigateur), qui s'adapte au réseau

💡 Le plus utilisé ? En entreprise, G.711 : tous les équipements le parlent, et c'est en général celui des trunks SIP des opérateurs (variante alaw en Europe, ulaw en Amérique du Nord). C'est celui de ce TP.

Qui choisit le codec ? Les deux postes le négocient grâce au SDP (Session Description Protocol), un petit texte glissé dans les messages SIP : l'INVITE propose une liste de codecs et l'adresse (IP et port) où envoyer la voix, le 200 OK répond avec le codec retenu et sa propre adresse. Comme deux inconnus qui se demandent "vous parlez français ? anglais ?" avant de converser. Le SDP explique d'ailleurs bien des "on ne s'entend pas" : un poste derrière un NAT y annonce son adresse privée, injoignable pour son correspondant.

💡 Le calcul que tout technicien doit savoir faire : en G.711, avec les en-têtes IP/UDP/RTP, comptez ~85-90 kbit/s par appel et par sens. Pour dimensionner : 30 appels simultanés ≈ 2,7 Mbit/s à réserver. C'est la réponse attendue quand un client demande "ma fibre suffira-t-elle ?".


QoS : la voix est une diva

Un téléchargement ralenti reste un téléchargement ; une conversation hachée est inutilisable. Les trois ennemis de la voix :

  • Latence : au-delà de ~150 ms, on se coupe la parole (effet duplex satellite).

  • Gigue (jitter) : la variation du délai entre paquets, qui rend la voix robotique et hachée.

  • Perte : un paquet de voix en retard est un paquet inutile, on ne rejoue pas le passé d'une conversation.

Les réponses : prioriser les paquets voix (la QoS), les isoler dans un VLAN voix et dimensionner la bande passante (voir le calcul des codecs).

Comment fonctionne la priorisation ? Sur chaque commutateur et chaque routeur :

1) Marquer : chaque paquet voix porte une étiquette de priorité, le champ DSCP de l'en-tête IP (valeur EF, Expedited Forwarding), que les téléphones IP posent eux-mêmes ;

2) Faire confiance, ou non : le commutateur n'accepte ce marquage que sur les ports des téléphones, sinon n'importe quel PC pourrait déclarer ses téléchargements "prioritaires" ;

3) Trier : quand le lien est encombré, la file d'attente de la voix est servie en premier.

Analogie : le gyrophare

Le marquage DSCP, c'est le gyrophare de l'ambulance : il ne la fait pas rouler plus vite, mais dans les embouteillages, tout le monde la laisse passer. Et seuls les véhicules autorisés ont le droit de l'allumer.

💡 La QoS ne crée pas de bande passante : elle décide seulement qui passe en premier. Et elle ne fonctionne que sur votre réseau : sur Internet, personne ne tient compte de vos étiquettes.


Matériel, architectures... et Asterisk

Le kit de préconisation type pour une PME :

  • IPBX : logiciel local open source (Asterisk, souvent coiffé de l'interface FreePBX) ou Centrex hébergé chez l'opérateur.

  • Postes : hardphones pour les bureaux, softphones pour les nomades et le télétravail, les deux cohabitent.

  • Réseau : commutateurs PoE (le téléphone est alimenté par le câble réseau ; un onduleur sur le switch maintient la téléphonie en cas de coupure), VLAN voix, QoS activée.

  • Extérieur et existant : trunk SIP vers l'opérateur ; passerelle FXS pour conserver un équipement analogique (le vieux fax, le portier, l'alarme).

Asterisk, notre outil du jour : l'IPBX open source de référence (né en 1999, moteur de millions d'installations et de nombreuses solutions commerciales). Il gère postes SIP, plan de numérotation, messagerie vocale, SVI, files d'attente, trunks... et se configure par fichiers texte.

💡 Configurer Asterisk "à la main", c'est apprendre à conduire en boîte manuelle : ensuite, toutes les interfaces graphiques du marché vous sembleront limpides, car vous saurez ce qu'elles font réellement.


Transition vers le TP

La signalisation organise, le média transporte, le codec compresse, la QoS protège. Place à la pratique : montez votre standard, raccordez deux postes, écoutez votre messagerie... et espionnez vos propres appels avec Wireshark.

TP

Contexte et objectifs

Vous êtes technicien chez Metacortex (oui, l'employeur de Neo dans Matrix !), qui abandonne ses vieilles lignes RTC. Vous montez la nouvelle téléphonie :

  • VM Ubuntu Server 26.04 LTS : le serveur IPBX Asterisk.

  • VM Windows n°1 : le poste de Neo (softphone MicroSIP, extension 6001).

  • VM Windows n°2 : le poste de Trinity (softphone MicroSIP, extension 6002).

   VM Windows 1             VM Ubuntu Server            VM Windows 2
   MicroSIP 6001  <------>  Asterisk (IPBX)  <------>   MicroSIP 6002
      (Neo)                 SIP 5060/udp                 (Trinity)
                            RTP 10000-20000/udp

💡 Clin d'oeil assumé : dans Matrix, décrocher un téléphone fixe est la porte de sortie de la simulation, et c'est l'Opérateur qui route les appels de l'équipage. Aujourd'hui, l'Opérateur, c'est vous.

Prérequis réseau : vérifiez avant de commencer !

Les trois VM doivent être sur le même réseau. Depuis chaque VM Windows, testez un ping IP_DU_SERVEUR_ASTERISK : si le ping échoue, réglez d'abord le réseau de virtualisation, rien ne fonctionnera sans cela.

✋ Piège VirtualBox : le mode NAT simple isole chaque VM. Utilisez un NAT Network commun, un réseau interne ou un mode bridge.

Si le pare-feu UFW est actif sur la VM Ubuntu, autorisez la signalisation SIP (5060) et la plage de ports RTP (les conversations) :

sudo ufw allow 5060/udp
sudo ufw allow 10000:20000/udp
Prérequis audio : faire passer le son dans des VM

Seules les deux VM Windows ont besoin d'audio : la VM Ubuntu relaie les flux sans jamais jouer de son.

  • VirtualBox : le micro est désactivé par défaut. Dans Configuration > Son de chaque VM Windows (éteinte), cochez "Entrée audio".

  • Proxmox : la console web noVNC ne transporte aucun son. Connectez-vous aux VM Windows en Bureau à distance, qui redirige le son et le micro du poste physique :

    • depuis Windows (mstsc) : Afficher les options > Ressources locales > Paramètres audio, lecture "sur cet ordinateur" et enregistrement "depuis cet ordinateur" (décoché par défaut, c'est le piège classique) ;
    • depuis Linux (Remmina) : onglet Avancé du profil, Mode de sortie audio : Local et Rediriger le microphone local.

✋ Attention à l'effet larsen si les deux VM tournent sur le même poste physique : le micro capte la voix rejouée par les haut-parleurs, qui la renvoie dans l'appel... jusqu'au sifflement. Utilisez un casque, ou ne redirigez le micro que vers une seule VM (ou utilisez le bouton muet de MicroSIP). Seul l'appel entre 6001 et 6002 est concerné : le 600, la messagerie et le SVI n'utilisent qu'un poste.

Plan B si le son ne passe vraiment pas : le TP reste réalisable, car les paquets RTP circulent même si la VM ne sait pas les jouer. À l'étape 7, exportez le flux en fichier audio depuis le lecteur RTP de Wireshark et écoutez-le sur votre poste physique.

💡 L'audio virtualisé ajoute latence et gigue : vous entendrez en vrai les symptômes décrits dans la slide QoS !

Etape 1 : Installation d'Asterisk sur la VM Ubuntu Server

Objectif : disposer d'un IPBX fonctionnel.

1) Installez Asterisk depuis le dépôt universe d'Ubuntu (les logiciels maintenus par la communauté, normalement déjà actif : la première commande n'est là que par sécurité) :

sudo add-apt-repository -y universe
sudo apt update
sudo apt install -y asterisk
Le saviez-vous ? Pourquoi Ubuntu et pas Debian ?

Asterisk n'est plus dans les dépôts officiels de Debian (ni Debian 12, ni Debian 13), et le projet ne maintient pas de dépôt officiel : ce sont les distributions qui l'empaquettent, et Ubuntu le fait.

Tentation classique : ajouter le dépôt d'Ubuntu sur une Debian pour "piocher" le paquet. Mauvaise idée ! Un paquet est compilé pour les bibliothèques précises de sa distribution : mélanger les dépôts donne un système hybride instable, que la documentation Debian appelle une "FrankenDebian". C'est un peu comme monter une pièce de moteur Renault sur une Peugeot parce que "c'est aussi une voiture française".

2) Vérifiez que le service tourne : sudo systemctl status asterisk

3) Connectez-vous à la console Asterisk, votre principal outil de la journée :

sudo asterisk -rvv

Vous obtenez une invite *CLI>. Quelques commandes à garder sous le coude :

  • pjsip show endpoints : la liste des postes déclarés et leur état ;
  • pjsip reload / dialplan reload : recharger la configuration après modification ;
  • core show channels : les appels en cours ;
  • exit : quitter la console (Asterisk continue de tourner).

💡 Gardez la console ouverte dans un terminal pendant tout le TP : elle affiche en direct les enregistrements, les appels et les erreurs. C'est votre tour de contrôle, et 90 % de vos diagnostics s'y feront.

4) Vérifiez que les modules dont nous aurons besoin sont présents, dans la console *CLI> :

module show like res_pjsip
module show like voicemail
Et les sons ?

Sur Ubuntu 26.04, la messagerie vocale est fournie avec le paquet asterisk, et les sons anglais (le "Hello World", les annonces de la messagerie...) sont installés automatiquement. Vérifiez-le :

apt list --installed 2>/dev/null | grep asterisk-core-sounds

Envie d'un IPBX qui parle français ? Installez les sons français, puis ajoutez language=fr dans la section de chaque endpoint de pjsip.conf (étape suivante) :

sudo apt install -y asterisk-core-sounds-fr asterisk-core-sounds-fr-gsm

5) Ubuntu installe deux variantes de la messagerie vocale, qui se disputent les mêmes applications (VoiceMail, VoiceMailMain...) : selon l'ordre de chargement, la messagerie peut ne pas fonctionner, avec l'erreur No application 'VoiceMail'. Désactivez la variante qui stocke les messages en base de données (ODBC), inutile ici, puis vérifiez que l'application VoiceMail est bien connue :

sudo sed -i '/^\[modules\]/a noload => app_voicemail_odbc.so' /etc/asterisk/modules.conf
sudo systemctl restart asterisk
sudo asterisk -rx "core show application VoiceMail"

L'aide de l'application VoiceMail doit s'afficher. ✋ Ne lancez la commande sed qu'une seule fois : chaque exécution ajoute une ligne.

Interro
  • Quels avantages un IPBX logiciel comme Asterisk présente-t-il face à un PBX matériel propriétaire ? Voyez-vous un inconvénient ?

Etape 2 : Déclaration du premier poste (fichier pjsip.conf)

Objectif : comprendre comment un poste SIP est déclaré côté serveur.

Asterisk se configure dans /etc/asterisk/. Les fichiers livrés par défaut sont d'énormes catalogues d'exemples : nous repartons de fichiers propres, que nous maîtrisons de bout en bout.

1) Passez en root le temps de la configuration (sudo -i) et sauvegardez les fichiers d'origine :

cd /etc/asterisk
mv pjsip.conf pjsip.conf.bak
mv extensions.conf extensions.conf.bak
mv voicemail.conf voicemail.conf.bak

2) Créez un nouveau fichier /etc/asterisk/pjsip.conf :

;=== Transport : la "prise reseau" d'Asterisk ===
; Asterisk ecoute le SIP en UDP sur le port 5060, sur toutes ses interfaces.
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060

;=== Poste 6001 - Neo ===
; Un poste = 3 sections : endpoint (le poste et ses regles),
; auth (ses identifiants), aor (ou le joindre).

[6001]
type=endpoint
context=interne
disallow=all
allow=ulaw,alaw
auth=auth6001
aors=6001

[auth6001]
type=auth
auth_type=userpass
username=6001
password=FollowTheWhiteRabbit6001!

[6001]
type=aor
max_contacts=1
remove_existing=yes

💡 Trois sections, trois rôles : l'endpoint est la fiche du poste dans le standard (ses règles, ses codecs, son contexte d'appel), l'auth est son badge (identifiant et mot de passe), et l'aor (Address of Record) est son adresse du moment, notée lors du pointage REGISTER. L'option remove_existing=yes remplace l'ancienne inscription quand le poste se réenregistre avec une nouvelle adresse.

💡 Le duo disallow=all puis allow=ulaw,alaw interdit tous les codecs, puis n'autorise que ceux choisis : la logique du pare-feu de l'atelier sécurité, tout refuser par défaut, n'autoriser que le nécessaire.

✋ Utilisez un vrai mot de passe robuste : les IPBX exposés sont scannés en permanence par des robots qui, une fois entrés, passent des appels surtaxés à vos frais. La "fraude téléphonique" coûte des milliers d'euros à de vraies entreprises chaque année.

3) Ce fichier contient des mots de passe : rendez-le lisible uniquement par root et le service Asterisk (principe de moindre privilège) :

chown root:asterisk /etc/asterisk/pjsip.conf
chmod 640 /etc/asterisk/pjsip.conf

4) Rechargez et vérifiez, dans la console *CLI> :

pjsip reload
pjsip show endpoints

Le poste 6001 apparaît, avec l'état Unavailable : normal, personne ne s'est encore présenté au standard avec ce badge. C'est l'objet de l'étape suivante.

Interro
  • Pourquoi sépare-t-on la déclaration du poste (endpoint) de ses identifiants (auth) et de sa localisation (aor) ? Que se passerait-il si l'aor acceptait max_contacts=2 ?

Etape 3 : Le premier softphone (MicroSIP sur la VM Windows 1)

Objectif : enregistrer un poste auprès de l'IPBX et observer le mécanisme REGISTER.

1) Sur la VM Windows 1, téléchargez et installez MicroSIP (https://www.microsip.org/), un softphone libre et léger.

2) Configurez le compte (Menu > Ajouter un compte) :

  • SIP server : IP_DU_SERVEUR_ASTERISK
  • Username : 6001
  • Domain : IP_DU_SERVEUR_ASTERISK
  • Password : le mot de passe défini dans pjsip.conf
  • Display name : Neo

3) Validez. L'indicateur MicroSIP passe au vert ("En ligne").

4) Sur le serveur, vérifiez avec pjsip show endpoints : le 6001 est désormais Avail, le standard sait où le joindre.

💡 Ce qui vient de se passer : MicroSIP a envoyé un REGISTER ("je suis le 6001, voici mon badge et mon adresse IP"), Asterisk a vérifié le badge et noté l'adresse dans l'aor. C'est le pointage du matin, et il se répète périodiquement, ce qui permet au poste de rester joignable même si son IP change.

Interro
  • Le poste s'enregistre auprès du serveur, et non l'inverse. Quel avantage cela présente-t-il pour un salarié en télétravail ?

Etape 4 : Le premier appel (et le plan de numérotation)

Objectif : créer un plan de numérotation minimal et passer un premier appel de test.

Le plan de numérotation (dialplan) est le cerveau du standard : il décrit quoi faire quand quelqu'un compose un numéro. Il se définit dans /etc/asterisk/extensions.conf.

1) Créez un nouveau fichier /etc/asterisk/extensions.conf :

[interne]
; Numero de test : Asterisk decroche et dit bonjour.
exten => 600,1,Answer()
 same => n,Wait(1)
 same => n,Playback(hello-world)
 same => n,Hangup()

; Appeler le poste de Neo : sonne 20 secondes.
exten => 6001,1,Dial(PJSIP/6001,20)
 same => n,Hangup()

💡 Lecture d'une ligne de dialplan : exten => 600,1,Answer() signifie "quand on compose le 600, à l'étape 1, exécute Answer() (décrocher)". Les lignes same => n enchaînent les étapes suivantes. Le [interne] est le contexte : c'est le context=interne du poste dans pjsip.conf. Les numéros qu'un poste a le droit de composer sont ceux de son contexte.

2) Rechargez le dialplan dans la console *CLI> : dialplan reload

3) Depuis MicroSIP (Neo), composez le 600.

👏 Vous entendez "Hello World" : votre premier appel VoIP vient d'aboutir ! Observez au passage le déroulé de l'appel dans la console *CLI>.

Lire la console *CLI>

Pour voir chaque étape du dialplan défiler en direct, augmentez la verbosité : core set verbose 3. Au prochain appel, des lignes Executing [600@interne:1] Answer(...) s'affichent, étape par étape.

Deux messages qui inquiètent à tort :

  • Spawn extension (interne, 600, 4) exited non-zero : c'est la fin normale de l'appel. L'étape 4 est Hangup(), qui termine le canal en renvoyant un code "non nul". Un vrai problème s'arrêterait plus tôt, avec un avertissement explicite (par exemple File hello-world does not exist) ;

  • No registered publish handler for event presence from 6001 : MicroSIP publie sa présence (disponible, absent...), que notre configuration minimale ne traite pas. C'est sans conséquence ; pour le faire taire, décochez Publier la présence dans le compte MicroSIP.

Interro
  • Lors de cet appel au 600, il n'y a qu'un seul softphone en jeu. Entre quelles machines le flux RTP circule-t-il ?

  • Le contexte [interne] est aussi un mécanisme de sécurité. En quoi ? (Indice : imaginez un contexte contenant les appels vers l'international : quels postes y donneriez-vous accès ?)

Etape 5 : Le second poste - à vous de jouer !

Objectif : consolider en autonomie ce qui vient d'être fait.

En vous appuyant sur les étapes 2 à 4, créez le poste de Trinity :

1) Déclarez l'extension 6002 dans pjsip.conf (les 3 sections, avec son propre mot de passe) ;

2) Ajoutez le numéro 6002 dans le contexte [interne] de extensions.conf ;

3) Rechargez (pjsip reload et dialplan reload) ;

4) Installez et configurez MicroSIP sur la VM Windows 2 ;

5) Vérifiez que les deux postes sont Avail (pjsip show endpoints) ;

6) Appelez le 6001 depuis le 6002... et décrochez ! Testez dans les deux sens.

👏 Votre standard met désormais deux postes en relation. Metacortex a sa téléphonie interne !

Etape 6 : Messagerie vocale

Objectif : offrir un répondeur à chaque poste, comme dans toute entreprise.

1) Créez un nouveau fichier /etc/asterisk/voicemail.conf, où chaque ligne suit le format extension => code_secret,Nom :

[general]
format=wav

[main]
6001 => 1234,Neo
6002 => 4321,Trinity

2) Modifiez extensions.conf pour basculer sur le répondeur quand le poste ne répond pas, et ajoutez le numéro d'accès à la messagerie (le 800) :

[interne]
; Numero de test
exten => 600,1,Answer()
 same => n,Wait(1)
 same => n,Playback(hello-world)
 same => n,Hangup()

; Postes : sonne 20 s, puis messagerie vocale
exten => 6001,1,Dial(PJSIP/6001,20)
 same => n,VoiceMail(6001@main,u)
 same => n,Hangup()

exten => 6002,1,Dial(PJSIP/6002,20)
 same => n,VoiceMail(6002@main,u)
 same => n,Hangup()

; Consultation de sa messagerie
exten => 800,1,VoiceMailMain(${CALLERID(num)}@main)
 same => n,Hangup()

💡 Si personne ne décroche au bout des 20 secondes de Dial(), l'exécution continue à la ligne suivante, qui dépose l'appelant sur le répondeur (l'option u joue l'annonce "indisponible"). Au 800, ${CALLERID(num)} désigne le numéro de l'appelant : chacun tombe automatiquement sur sa propre boîte.

3) Rechargez : dialplan reload, puis voicemail reload.

4) Testez le scénario complet : ne décrochez pas sur le poste de Trinity, laissez Neo déposer un message, puis depuis le poste de Trinity composez le 800, saisissez le code secret (4321) et écoutez le message.

Interro
  • Pourquoi protège-t-on la consultation de la messagerie par un code secret, alors que l'appelant est déjà identifié par son numéro ? (Indice : que vaut un numéro affiché comme preuve d'identité ?)

Etape 7 : L'appel au microscope (Wireshark)

Objectif : voir la théorie du matin (signalisation SIP, média RTP, codec négocié) et en tirer une leçon de sécurité.

1) Sur la VM Windows 1, installez Wireshark (https://www.wireshark.org/).

2) Lancez une capture sur l'interface réseau de la VM, avec le filtre d'affichage sip || rtp.

3) Depuis le poste de Neo, appelez le 6002, décrochez côté Trinity, parlez quelques secondes, raccrochez.

4) Arrêtez la capture et explorez :

  • La signalisation : retrouvez INVITE, 180 Ringing, 200 OK et BYE. Dans l'INVITE, repérez la partie SDP (les codecs proposés, l'adresse IP et le port où envoyer la voix) ; dans le 200 OK, le codec retenu.

  • Le média : le déluge de petits paquets RTP, leur cadence régulière, et le codec utilisé (PCMU = G.711 ulaw, PCMA = G.711 alaw).

  • Le grand final : Téléphonie > Appels VoIP, sélectionnez l'appel, bouton Flux pour voir le diagramme de séquence (comparez-le au schéma du cours !), puis Lire les flux... et écoutez votre propre conversation, reconstituée depuis les paquets capturés.

✋ Ce que vous venez de faire, n'importe qui sur le même réseau peut le faire : par défaut, la voix circule en clair, comme le mail ou le web historiques. Les parades existent (TLS pour chiffrer la signalisation, SRTP pour chiffrer la voix) et font partie de toute mise en production sérieuse. Vous retrouvez le pilier Confidentialité du modèle CID... et vous comprenez pourquoi, dans Matrix, on se méfie des lignes sur écoute !

Interro
  • Observez les adresses IP source et destination des paquets RTP pendant l'appel entre 6001 et 6002 : le flux voix passe-t-il par le serveur Asterisk, ou directement de poste à poste ? Quelles conséquences pratiques dans chaque cas (charge du serveur, pare-feu...) ?

  • Un utilisateur se plaint : "ça sonne, il décroche, mais on ne s'entend pas". Avec vos connaissances sur SIP, SDP et RTP, quelle est votre hypothèse et comment la vérifieriez-vous ?

Etape 8 (Bonus) : Un SVI avec votre propre voix

Objectif : mettre en place un menu vocal ("Bienvenue chez Metacortex, tapez 1 pour...") avec une annonce que vous aurez enregistrée par téléphone.

1) Créez un répertoire où Asterisk a le droit d'écrire ses enregistrements, à l'intérieur de son dossier des sons (là où Playback() et Background() les chercheront) :

mkdir -p /var/lib/asterisk/sounds/custom
chown asterisk:asterisk /var/lib/asterisk/sounds/custom

💡 Le chemin du dossier des sons peut varier selon la distribution : en cas de doute, repérez où se trouve le fichier hello-world avec find / -name "hello-world*" 2>/dev/null.

2) Ajoutez à extensions.conf un numéro d'enregistrement d'annonce (le studio maison !) et le SVI :

[interne]
; ... (tout le contenu existant reste en place) ...

; Studio d'enregistrement : composez le 9500, parlez apres le bip,
; puis tapez # pour terminer. L'annonce est ensuite rejouee.
exten => 9500,1,Answer()
 same => n,Record(/var/lib/asterisk/sounds/custom/accueil.wav)
 same => n,Playback(custom/accueil)
 same => n,Hangup()

; Entree du SVI
exten => 9000,1,Goto(svi,s,1)

[svi]
exten => s,1,Answer()
 same => n,Background(custom/accueil)
 same => n,WaitExten(8)

exten => 1,1,Dial(PJSIP/6001,20)
 same => n,VoiceMail(6001@main,u)
 same => n,Hangup()

exten => 2,1,Dial(PJSIP/6002,20)
 same => n,VoiceMail(6002@main,u)
 same => n,Hangup()

; Mauvaise touche : on rejoue le menu
exten => i,1,Playback(pbx-invalid)
 same => n,Goto(s,1)

; Silence prolonge : on raccroche poliment
exten => t,1,Hangup()

💡 Dans le contexte [svi] : s (start) est le point d'entrée, Background() joue l'annonce tout en écoutant les touches (contrairement à Playback()), WaitExten(8) attend la saisie 8 secondes, et les extensions spéciales i (invalid) et t (timeout) gèrent la mauvaise touche et le silence. Vous venez d'écrire l'accueil téléphonique type de milliers d'entreprises.

3) Rechargez (dialplan reload), puis :

  • composez le 9500, enregistrez votre annonce après le bip et tapez # : elle est rejouée aussitôt. Texte suggéré : "Bienvenue chez Metacortex. Pour joindre Neo, tapez 1. Pour joindre Trinity, tapez 2." ;

  • composez le 9000 et testez le menu : touche 1, touche 2, une touche invalide, puis le silence.

👏 Standard, répondeurs, menu d'accueil personnalisé : votre installation n'a plus rien à envier à celle d'une vraie PME.

Interro
  • Au-delà de l'image "professionnelle", quel bénéfice opérationnel un SVI apporte-t-il à l'entreprise ? Et quel est le risque d'un SVI mal conçu (trop de niveaux, options confuses) ?

Etape 9 (Synthèse) : Jeu de rôle - conseillez votre client !

Objectif : transformer la technique du jour en discours de conseil, la compétence phare du module.

Mise en situation : le gérant de Metacortex (25 salariés, 1 site, fibre 500 Mbit/s, un vieux fax auquel il tient, 3 commerciaux souvent en déplacement) a reçu le courrier d'Orange annonçant la fermeture de ses lignes cuivre. Il vous demande : "Alors, on fait quoi ?"

Préparez (par écrit, 10-15 lignes, puis restitution orale) votre préconisation argumentée :

1) Pourquoi passer à la VoIP maintenant (et pas seulement parce qu'on y est obligé) ;

2) L'architecture proposée : IPBX local ou Centrex ? Pourquoi ?

3) Le matériel : quels postes pour qui (bureaux ou commerciaux nomades) ? Quoi prévoir côté réseau (PoE, onduleur, VLAN) ? Et le fax ?

4) Le codec préconisé et le calcul de bande passante pour 25 salariés (~10 appels simultanés) ;

5) Les deux points de vigilance que vous annoncez honnêtement au client (continuité en cas de panne, sécurité).

💡 Un client ne retient pas les sigles, il retient la confiance : le bon conseil annonce aussi les limites et les prérequis, pas seulement les promesses.

Pour aller plus loin : ajoutez la couche graphique FreePBX

Vous maîtrisez maintenant le moteur : pjsip.conf, extensions.conf et la console *CLI>. Découvrez ce que vous rencontrerez le plus souvent en entreprise : FreePBX, l'interface web qui pilote Asterisk.

Analogie : la boîte manuelle

Ce matin, on vous a promis que conduire Asterisk "en boîte manuelle" vous rendrait toutes les interfaces limpides. Vérification immédiate : FreePBX, c'est la boîte automatique. Vous cliquez, et il écrit à votre place... les mêmes fichiers que vous avez écrits à la main.

Prérequis : une VM dédiée, sous Debian 12
  • Pas sur votre VM Ubuntu du TP ! FreePBX réécrit les fichiers de configuration d'Asterisk qu'il gère : il écraserait votre travail.

  • FreePBX 17 est officiellement supporté sur Debian 12 uniquement, et FreePBX 18 vise Debian 13 : vérifiez la version en vigueur sur https://www.freepbx.org avant de vous lancer.

  • Le script officiel installe tout (Asterisk depuis le dépôt de Sangoma, la base de données, le serveur web et FreePBX) : comptez 30 à 45 minutes.

1) Sur une VM Debian 12 fraîche, en root, lancez le script d'installation officiel :

wget https://github.com/FreePBX/sng_freepbx_debian_install/raw/master/sng_freepbx_debian_install.sh -O /tmp/sng_freepbx_debian_install.sh
bash /tmp/sng_freepbx_debian_install.sh

2) Ouvrez http://IP_DE_LA_VM_FREEPBX dans un navigateur et créez le compte administrateur.

3) Recréez le poste de Neo : Applications > Extensions, ajoutez une extension PJSIP 6001 avec un mot de passe robuste, et activez sa messagerie vocale dans ses options.

4) Cliquez sur le bouton rouge Apply Config.

💡 Ce bouton est l'équivalent exact de vos pjsip reload et dialplan reload : tant qu'il n'est pas cliqué, vos modifications existent dans la base de données de FreePBX, mais Asterisk ne les connaît pas. L'oublier est l'erreur n°1 des débutants... vous, vous savez pourquoi.

5) Ajoutez un second compte dans le MicroSIP de Neo, pointant vers la VM FreePBX, et appelez le *97 (l'accès à la messagerie vocale de FreePBX, l'équivalent de votre 800).

6) Soulevez le capot : sur la VM FreePBX, ouvrez la console (asterisk -rvv) et tapez pjsip show endpoints : votre 6001 est là. Puis explorez la configuration :

ls /etc/asterisk/ | grep -E "pjsip|extensions"
cat /etc/asterisk/pjsip.endpoint.conf

Vos sections du matin sont bien là, réparties dans des fichiers séparés (pjsip.endpoint.conf, pjsip.auth.conf, pjsip.aor.conf), et le dialplan généré se trouve dans extensions_additional.conf. Lisez leur en-tête : ils sont régénérés à chaque Apply Config. Pour vos ajouts manuels, FreePBX prévoit des fichiers suffixés _custom (comme extensions_custom.conf), qu'il ne touche jamais.

7) Défi final : reconstruisez le SVI de Metacortex dans l'interface (l'annonce dans les enregistrements système, puis le module IVR). Les libellés peuvent varier selon la version : fiez-vous à votre compréhension du mécanisme.

Interro
  • Pourquoi ne faut-il jamais modifier à la main un fichier généré par FreePBX, comme pjsip.endpoint.conf ? Que se passerait-il au prochain Apply Config ?

  • Vous devez conseiller un client : Asterisk configuré en fichiers texte ou FreePBX ? Donnez un argument pour chacun (pensez à qui administrera le standard au quotidien).

Auto-évaluation - Objectifs du module INF203

Avant de considérer cet atelier comme acquis, vérifiez que vous savez faire et expliquer chacun des points suivants :

  • [ ] Je sais expliquer la différence entre signalisation (SIP) et média (RTP), et m'en servir pour diagnostiquer un problème ("ça sonne mais on ne s'entend pas")
  • [ ] Je sais dérouler le voyage d'un appel (REGISTER, INVITE, 200 OK, RTP, BYE) et expliquer le rôle du SDP dans la négociation du codec
  • [ ] Je sais argumenter l'intérêt (et les points de vigilance) du passage à la VoIP pour une entreprise
  • [ ] Je sais préconiser le matériel d'une installation : IPBX ou Centrex, hardphones/softphones, PoE, passerelle FXS pour l'analogique, trunk SIP
  • [ ] Je sais comparer les codecs (G.711, G.722, G.729, Opus) et calculer la bande passante nécessaire pour N appels simultanés
  • [ ] Je sais expliquer les trois ennemis de la voix (latence, gigue, perte) et le fonctionnement de la QoS (marquage DSCP, files prioritaires, VLAN voix)
  • [ ] Je sais installer Asterisk, déclarer des postes (pjsip.conf) et écrire un plan de numérotation simple (extensions.conf)
  • [ ] Je sais mettre en place une messagerie vocale et un SVI
  • [ ] Je sais capturer et analyser un appel avec Wireshark, et expliquer pourquoi SRTP/TLS s'imposent en production