Back to blog
Jun 11, 2025
7 min read

Projet PBX : Construire mon propre système VoIP avec Asterisk sur Ubuntu

Comment j'ai créé mon propre standard téléphonique (PBX) avec Asterisk pour approfondir mes compétences en administration système et réseaux.

Dans le cadre de l’amélioration de mes compétences en administration système et réseaux, j’ai décidé de plonger dans l’univers de la VoIP (Voice over Internet Protocol) en configurant mon propre PBX (Private Branch Exchange) basique avec Asterisk sur une VM Ubuntu. C’est une façon fascinante de comprendre comment les appels téléphoniques peuvent fonctionner sur les réseaux IP. Voici le journal de mes progrès !

Phase 1 : Mise en place des fondations

Tout d’abord, j’avais besoin d’un environnement serveur.

Configuration de la VM : J’ai créé une nouvelle machine virtuelle Ubuntu 22.04 LTS avec VirtualBox. Je l’ai gardée propre et dédiée à ce projet.

Mise à jour du système : J’ai exécuté la commande de mise à jour essentielle pour m’assurer que tous les paquets étaient à jour :

sudo apt-get update -y

Installation d’Asterisk : Installation du paquet logiciel Asterisk lui-même :

sudo apt-get install asterisk -y

Lancement initial : J’ai démarré le service Asterisk et accédé à son interface en ligne de commande (CLI) pour m’assurer qu’il s’installait correctement :

sudo asterisk -r

Voir l’invite CLI d’Asterisk était un bon premier signe !

Phase 2 : Configuration du cœur d’Asterisk

Avec Asterisk installé, l’étape suivante était de configurer ses composants centraux. Les principaux fichiers de configuration se trouvent dans /etc/asterisk/.

cd /etc/asterisk
ls # Pour voir tous les fichiers de config

2a. Configuration des pairs SIP (sip.conf)

Ce fichier indique à Asterisk les appareils SIP (softphones, dans mon cas) qui vont s’y connecter.

Sauvegarde d’abord ! Toujours une bonne idée avant d’éditer les configs principales :

sudo mv sip.conf sip.conf.backup

Configuration : J’ai créé un nouveau sip.conf et ajouté les paramètres nécessaires. Vous pouvez trouver la configuration exacte que j’ai utilisée ici sur GitHub.

Comprendre sip.conf : Mes notes sur ce que fait cette configuration :

  • Elle définit comment Asterisk gère les connexions SIP

  • La section [general] définit les paramètres globaux par défaut :

    • context=internal : Les appels entrants commencent dans le contexte ‘internal’ du plan de numérotation
    • allowguest=no : Seuls les utilisateurs authentifiés peuvent passer des appels (bonne sécurité !)
    • bindport=5060/bindaddr=0.0.0.0 : Écoute le trafic SIP sur le port standard 5060 sur toutes les IP disponibles du serveur
    • disallow=all/allow=ulaw : Pratique standard – interdire tous les codecs, puis autoriser spécifiquement ulaw (un codec commun et compatible)
    • nat=yes & localnet=... : Paramètres cruciaux pour aider Asterisk à gérer correctement les appareils derrière des routeurs NAT typiques. Important : La plage IP localnet doit correspondre au réseau réel sur lequel se trouve le serveur
  • Les sections [7001] et [7002] définissent mes deux points de terminaison clients :

    • type=friend : Permet à l’appareil de passer et recevoir des appels via Asterisk
    • host=dynamic : L’IP de l’appareil n’est pas fixe ; il doit s’enregistrer auprès d’Asterisk
    • secret=... : Le mot de passe pour l’appareil
    • context=internal : Les appels de ces appareils utiliseront les règles du plan de numérotation internal

2b. Définition du plan de numérotation (extensions.conf)

C’est le “cerveau” – il dicte ce qui se passe quand un numéro est composé.

Sauvegarde :

sudo mv extensions.conf extensions.conf.backup

Configuration : J’ai créé un nouveau extensions.conf. La configuration que j’ai utilisée est ici sur GitHub.

Comprendre extensions.conf :

  • Il route les appels basés sur l’extension composée dans des [contexts] spécifiques

  • Le contexte [internal] gère les appels provenant de mes pairs SIP (7001 & 7002)

  • Appeler l’extension 7001/7002 :

    • exten => 7001,1,Answer() : Quand 7001 est composé, répondre d’abord à l’appel
    • exten => 7001,n,Dial(SIP/7001,60) : Essayer de composer le pair SIP 7001 pendant 60 secondes
    • exten => 7001,n,Playback(vm-nobodyavail) : Si l’appel échoue (pas de réponse, occupé), jouer un message “indisponible”
    • exten => 7001,n,VoiceMail(7001@main) : Envoyer l’appel vers la boîte vocale 7001 dans le contexte de messagerie vocale main
    • exten => 7001,n,Hangup() : Terminer l’appel
  • Accès à la messagerie vocale :

    • exten => 8001,1,VoicemailMain(7001@main) : Composer 8001 permet à l’utilisateur 7001 de vérifier sa messagerie vocale
    • exten => 8002,1,VoicemailMain(7002@main) : Composer 8002 permet à l’utilisateur 7002 de vérifier la sienne

Cette configuration est essentiellement le “Hello World” des plans de numérotation Asterisk, permettant les appels internes de base et la messagerie vocale.

2c. Configuration des boîtes vocales (voicemail.conf)

Ce fichier définit les boîtes aux lettres réelles référencées par le plan de numérotation.

Sauvegarde :

sudo mv voicemail.conf voicemail.conf.backup

Configuration : J’ai édité voicemail.conf pour ajouter :

[main]
7001 => 7001
7002 => 7002

Comprendre voicemail.conf :

  • Le contexte [main] correspond au @main utilisé dans extensions.conf
  • Chaque ligne numéro_boîte => mot_de_passe crée une boîte aux lettres et définit son PIN d’accès

Phase 3 : Activation et configuration des clients

Il était temps de mettre le système en ligne et de connecter les clients.

Recharger Asterisk : Appliquer les nouvelles configurations :

sudo asterisk -r # Accéder au CLI si pas déjà dedans
reload # Commande dans le CLI Asterisk

Vérifier les pairs : Vérifier qu’Asterisk connaît les pairs configurés :

sip show peers # Commande dans le CLI Asterisk

Initialement, la colonne Host montrait “(Unspecified)” comme attendu, puisqu’aucun client n’était connecté.

Screenshot - sip show peers

Réseau de la VM : J’ai changé le paramètre réseau VirtualBox pour la VM Ubuntu de NAT vers Accès par pont (Bridged Adapter). Cela place la VM sur mon réseau domestique principal pour que les clients puissent l’atteindre directement.

Obtenir l’IP de la VM : J’ai trouvé la nouvelle adresse IP de la VM sur mon réseau local :

ip addr show

Screenshot - ip addr show

Dans mon cas, c’était 192.168.1.75. C’est l’adresse cruciale dont les clients ont besoin pour se connecter.

Configurer le Client 1 (MicroSIP sur Windows) :

  • Installé MicroSIP
  • Dans les paramètres de compte :
    • Serveur SIP : 192.168.1.75
    • Domaine : 192.168.1.75
    • Nom d’utilisateur : 7001
    • Login : 7001
    • Mot de passe : 7001
  • Sauvegardé les paramètres. Succès ! MicroSIP affichait un indicateur vert “Online” en bas à gauche

Screenshot - Client 1 Connected

Configurer le Client 2 (Zoiper Lite sur iOS) :

  • Comme j’ai un iPhone, j’ai installé Zoiper Lite depuis l’App Store
  • Ajouté un nouveau compte SIP dans Zoiper :
    • Serveur/Hôte/Domaine : 192.168.1.75
    • Nom d’utilisateur : 7002
    • Mot de passe : 7002
    • Nom d’utilisateur d’auth : 7002 (si demandé séparément)
  • Sauvegardé les paramètres. Zoiper s’est enregistré avec succès !

Maintenant nous pouvons voir que nos deux clients ont été attribués des Hôtes (avec la commande “sip show peers” dans le CLI Asterisk).

Screenshot - all hosts set

Phase 4 : Tests !

Le moment de vérité :

  • J’ai composé 7001 depuis l’application Zoiper sur mon iPhone… MicroSIP sur mon PC Windows a sonné !
  • J’ai composé 7002 depuis MicroSIP… mon iPhone a sonné via Zoiper !
  • J’ai vérifié sip show peers dans Asterisk à nouveau – les deux clients montraient maintenant qu’ils étaient enregistrés avec leurs adresses IP locales respectives

Conclusion

Ça marche ! J’ai réussi à configurer un serveur Asterisk basique sur une VM Ubuntu, configuré deux extensions SIP, et connecté deux clients softphone différents (un sur Windows, un sur iOS). Ils peuvent maintenant s’appeler directement via le serveur Asterisk.

C’était un excellent exercice d’apprentissage pour comprendre les fondamentaux de la VoIP, la configuration SIP, et la logique du plan de numérotation Asterisk. Les prochaines étapes pourraient impliquer l’exploration de fonctionnalités plus avancées du plan de numérotation, la connexion à un trunk externe, ou l’examen de la sécurisation appropriée de la configuration.