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

TermeSignification
PABXPrivate Automatic Branch eXchange : le standard téléphonique d’une entreprise (lignes internes, transferts, renvois)
IPBXPABX qui fonctionne sur le réseau IP au lieu de lignes téléphoniques
VoIPLa voix transportée en IP (en général)
ToIPLa téléphonie complète d’une entreprise sur IP (postes, standard, messagerie)
SIPProtocole de signalisation : établir, sonner, raccrocher (port 5060 UDP/TCP, 5061 en TLS)
RTPTransport de la voix elle-même (plage de ports UDP élevés, ex. 10000-20000)
CodecCompression de la voix : G.711 (qualité, 64 kbit/s), G.729, Opus
ExtensionNuméro interne d’un poste (ex. 100, 101)
Trunk SIPLiaison vers un opérateur pour appeler l’extérieur
SoftphoneTé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 .env

Dans .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=false
docker-compose up -d        # lancer la pile
docker-compose logs -f      # suivre le démarrage (quelques minutes), Ctrl+C pour quitter

3. Configuration de FreePBX

  1. Ouvrir http://IP_DE_LA_VM et créer le compte administrateur (le noter dans KeePassXC).
  2. Admin → User Management : créer au moins deux utilisateurs.
  3. Settings → Asterisk SIP Settings : mettre l’IP de la VM dans External Address (sinon FreePBX annonce l’IP publique du labo).
  4. Applications → Extensions → Add Extension → SIP : donner un numéro (100, 101…) et un mot de passe à chaque utilisateur.
  5. Après chaque modification : Submit en bas, puis Apply Config en haut.

4. Les softphones

LogicielPlateformes
LinphoneLinux, Android (ton S24 Ultra), Windows, macOS
TwinkleLinux
GNOME CallsLinux

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

  1. Quel protocole fait sonner le téléphone, et lequel transporte la voix ?
  2. L’appel sonne, on décroche, mais personne ne s’entend. Que vérifier ?
  3. Pourquoi mettre les téléphones dans un VLAN à part ?

Erreurs fréquentes / dépannage

SymptômeCause probable
Softphone « non enregistré »Mauvais numéro d’extension, mot de passe ou IP du serveur
Modification sans effetOubli du bouton Apply Config
Pas de son dans un sensRTP bloqué ou NAT (External Address)
Interface web inaccessiblePile pas encore démarrée : regarder docker-compose logs -f

Voir aussi