P13 - Téléphonie sur IP : monter un IPBX avec FreePBX
Objectif
Comprendre ce qu’est un PABX / IPBX, le protocole SIP, et monter en labo un standard téléphonique FreePBX (basé sur Asterisk) avec Docker, puis s’appeler entre deux softphones.
Source
Fiche rédigée à partir de cours de lidstah, complétée par les notions de base de la ToIP.
1. Vocabulaire
| Terme | Signification |
|---|---|
| PABX | Private Automatic Branch eXchange : le standard téléphonique d’une entreprise (lignes internes, transferts, renvois) |
| IPBX | PABX qui fonctionne sur le réseau IP au lieu de lignes téléphoniques |
| VoIP | La voix transportée en IP (en général) |
| ToIP | La téléphonie complète d’une entreprise sur IP (postes, standard, messagerie) |
| SIP | Protocole de signalisation : établir, sonner, raccrocher (port 5060 UDP/TCP, 5061 en TLS) |
| RTP | Transport de la voix elle-même (plage de ports UDP élevés, ex. 10000-20000) |
| Codec | Compression de la voix : G.711 (qualité, 64 kbit/s), G.729, Opus |
| Extension | Numéro interne d’un poste (ex. 100, 101) |
| Trunk SIP | Liaison vers un opérateur pour appeler l’extérieur |
| Softphone | Téléphone logiciel (Linphone sur PC ou Android) |
sequenceDiagram participant A as Poste 100 (Linphone) participant P as IPBX FreePBX participant B as Poste 101 A->>P: SIP INVITE (appeler 101) P->>B: SIP INVITE B-->>P: 180 Ringing puis 200 OK P-->>A: 200 OK A->>B: Voix en RTP (UDP) B->>A: Voix en RTP A->>P: SIP BYE (raccrocher)
Lien avec les VLAN
En entreprise, les téléphones IP sont placés dans un VLAN voix séparé, avec une priorité (QoS) pour que la voix ne hache pas quand quelqu’un télécharge un gros fichier. Voir R05 - VLAN et routage inter-VLAN.
2. Installation en labo (Docker + IZPBX)
Labo uniquement
Cette installation est faite pour un réseau isolé de test, pas pour la production (Fail2ban désactivé, mots de passe simples).
Prérequis : VM Debian 13, 2 cœurs, 2 Go de RAM, 20 Go de disque.
# installer Docker et git, et s'ajouter au groupe docker
sudo apt install docker.io docker-compose git
sudo usermod -aG docker "$USER" # se déconnecter / reconnecter ensuite
# récupérer le projet IZPBX (il contient le docker-compose)
git clone https://github.com/ugoviti/izpbx
cd izpbx
cp default.env .env
nano .envDans .env, modifier :
MYSQL_PASSWORD=un_mot_de_passe_solide
MYSQL_ROOT_PASSWORD=un_autre_mot_de_passe_solide
# pas besoin de Fail2ban en labo isolé
FAIL2BAN_ENABLED=false
FAIL2BAN_ASTERISK_ENABLED=falsedocker-compose up -d # lancer la pile
docker-compose logs -f # suivre le démarrage (quelques minutes), Ctrl+C pour quitter3. Configuration de FreePBX
- Ouvrir
http://IP_DE_LA_VMet créer le compte administrateur (le noter dans KeePassXC). - Admin → User Management : créer au moins deux utilisateurs.
- Settings → Asterisk SIP Settings : mettre l’IP de la VM dans External Address (sinon FreePBX annonce l’IP publique du labo).
- Applications → Extensions → Add Extension → SIP : donner un numéro (100, 101…) et un mot de passe à chaque utilisateur.
- Après chaque modification : Submit en bas, puis Apply Config en haut.
4. Les softphones
| Logiciel | Plateformes |
|---|---|
| Linphone | Linux, Android (ton S24 Ultra), Windows, macOS |
| Twinkle | Linux |
| GNOME Calls | Linux |
Dans Linphone : roue crantée → Créer un nouveau compte → compte SIP : nom d’utilisateur = numéro d’extension, domaine = IP de la VM, transport UDP. Ensuite on appelle l’autre extension.
Exercices
- Quel protocole fait sonner le téléphone, et lequel transporte la voix ?
- L’appel sonne, on décroche, mais personne ne s’entend. Que vérifier ?
- Pourquoi mettre les téléphones dans un VLAN à part ?
Correction
- SIP pour la signalisation (sonnerie, décroché, raccroché), RTP pour la voix.
- Les ports RTP (UDP) bloqués par un pare-feu, ou du NAT mal configuré (External Address fausse) : la signalisation passe mais pas l’audio.
- Pour appliquer une priorité (QoS) à la voix et l’isoler des postes de travail (sécurité, broadcast).
Erreurs fréquentes / dépannage
| Symptôme | Cause probable |
|---|---|
| Softphone « non enregistré » | Mauvais numéro d’extension, mot de passe ou IP du serveur |
| Modification sans effet | Oubli du bouton Apply Config |
| Pas de son dans un sens | RTP bloqué ou NAT (External Address) |
| Interface web inaccessible | Pile pas encore démarrée : regarder docker-compose logs -f |
Voir aussi
- V05 - Docker · R05 - VLAN et routage inter-VLAN · R02 - Modèle OSI et TCP-IP
- Tuto d’origine : cours de lidstah
- Retour : P00 - Programme pas encore vu