dimanche 19 mars 2017

COMMENT METTRE EN PLACE UN SYSTEME DE COMMUNICATION VOIP AVEC ASTERISK


Bonjour,

Aujourd’hui, je vais vous montrez comment installer et configurer l’outil Asterisk sur un serveur pour pouvoir rendre possible la communication VoIP entre périphériques (Ordinateurs portables, Ordinateurs de bureau, Smartphones, Téléphones IP, …). Mais tout d’abord,

Qu’est-ce que la VoIP ?

La VoIP (Voice over Internet Protocol, ou Voix sur réseau IP) est une technique qui permet de communiquer par la voix ou via des flux multimédias (audio ou vidéo) sur des réseaux compatibles IP (Internet Protocol) qu’il s’agisse de réseaux privés ou d’internet.

La VoIP présente de nombreux avantages comme : 

+ La réduction des coûts : des appels, économie de câblage, de frais de maintenance ;
+ La flexibilité : ajout d’utilisateurs et évolutivité du réseau plus facile ;
+ L’installation, la configuration et la gestion bien plus « facile » que celle d’un réseau propriétaire ;
+  Système ouvert et adaptable : possibilité d’interconnecter des appareils de fabricants et fournisseurs multiples ;
+ Mobilité et Itinérance des utilisateurs : les appels peuvent être passés et transférés n’importe où dans le monde.

Néanmoins, la VoIP peut présenter souvent quelques inconvénients notamment : la qualité de la communication (QoS ou qualité du service), et la sécurité. Mais en définitive, la VoIP s’avère une technologie très populaire et bénéfique pour les entreprises et les particuliers.

Les principaux protocoles utilisés pour l’établissement des connexions en VoIP sont : H.323, H.320, SIP, MGCP, SCCP et IAX (Asterisk). Nous allons nous intéresser à Asterisk que nous allons mettre en place par la suite, mais avant,

Qu’est-ce que Asterisk ?

Asterisk est un logiciel libre d’autocommutation de téléphonie privé (dit PABX, Private Automatic Branch eXchange)  pour VoIP compatible pour les systèmes d’exploitation GNU/Linux. Asterisk permet des services tels que : la messagerie vocale, les files d’attente, les agents d’appels, les musiques d’attente, les transferts d’appels, conférences, … Asterisk implémente les protocoles H.320, H.323, SIP (Session Initiation Protocol) et un protocole spécifique nommé IAX (Inter-Asterisk eXchange) qui permet la communication entre des clients (ordinateurs, téléphones IP,…) et un serveur Asterisk. D’autres logiciels libres d’autocommutateur téléphonique privé sont basés sur Asterisk comme Elastix, Trixbox et XiVO.

Maintenant que vous en savez un peu plus sur la VoIP et Asterisk, nous allons maintenant entrer dans le vif du sujet.

Configuration du serveur Asterisk  

Notre topologie ressemble à celle-ci :

(Ps : nous allons implémenter notre serveur Asterisk sur une distribution GNU/Linux en occurrence ici Ubuntu)

Nous débutons notre configuration par l’adressage IP de notre futur serveur Asterisk

Une fois que nous avons attribué une adresse IP à notre serveur, nous installons à présent le paquet du logiciel Asterisk avec la commande « apt-get install asterisk » :

Après l’installation du paquet Asterisk, nous devons à présent obtenir dans le répertoire nouvellement créé « /etc/asterisk » les fichiers suivants :

La configuration de notre serveur Asterisk s’articule autour des fichiers de configurations « /etc/asterisk/sip.conf » où est enregistré la configuration globale de notre serveur Asterisk ainsi que (dans notre cas ici) la configuration des utilisateurs (on pouvait également mettre la configuration des utilisateurs dans le fichier users.conf par exemple) ,   « /etc/asterisk/extensions.conf » qui contient la configuration du plan de numérotation qui sera utilisé par le serveur pour savoir quelles actions il doit entreprendre lorsqu’un numéro est composé, on parle également de DialPlan et enfin le fichier « /etc/asterisk/voicemail.conf » qui quant à lui est réservé à la configuration de la messagerie vocale des utilisateurs, ainsi ce fichier permet que l’on puisse laisser des messages aux utilisateurs lorsqu’ils sont indisponibles.

(Ps : on peut également pour d’autres besoins avoir à modifier les fichiers « /etc/asterisk/meetme.conf » si l’on souhaite faire des salles de conférences, ou encore le fichier « /etc/asterisk/moh.conf » pour la configuration des musiques d’attente)

Avant de modifier les fichiers de configurations qui nous intéressent, nous créons des sauvegardes de leur état d’origine (par simple précaution 😉

Ensuite, nous configurons le fichier sip.conf avec la commande « nano  /etc/asterisk/sip.conf » :


Dans la rubrique [general], nous définissons tout d’abord le context, qui représente le nom du groupe constitué des comptes utilisateurs pouvant effectuer des appels et en recevoir ;  l’option allowguest est pour la prise en compte de n’importe quel appel entrant SIP sans authentification ou autre restriction pour des raisons de sécurité la valeur donnée à cette option doit être « non » ; l’option allowoverlap permet la modification dynamique des paramètres ; bindport représente le port d’écoute dans notre cas 5060 qui est le port UDP (User Datagram Protocol) du protocole SIP (Session Initiation Protocol) ; l’option bindaddr représente l’adresse IP de l’interface sur laquelle le serveur Asterisk va « écouter » le trafic, la valeur 0.0.0.0 indique que le Serveur va écouter sur toutes les interfaces ; srvlookup permet le support des enregistrements SRV (Service Ressource Records) pour les appels sortants ; l’option disallow  avec la valeur all permet d’interdire tous les codecs ; l’option allow avec la valeur ulaw permet quant à elle d’autoriser le codec ulaw ; alwaysauthreject doit être activé avec la valeur « oui » pour permettre de rejeter toutes les requêtes d’authentification de type « Brute-force » sur des comptes utilisateurs existants ; l’option canreinvite sert a indiquer à notre serveur Asterisk si il doit permettre le routage de flux RTP (Real-time Transport Protocol) directement entre les postes lorsque la valeur de cette option est à « non », tous les flux multimédias passent par le serveur Asterisk ; nat permet d’indiquer si l’utilisateur se trouve derrière un réseau NAT (Network Address Translation) ; l’option session-timers définit le mode de fonctionnement et de prise en compte des sessions temporaires lors d’appels SIP entrants ou sortants ; enfin l’option localnet permet  d’indiquer l’adresse réseau ainsi que le masque de sous réseau dans lequel se trouvent les utilisateurs.

Intéressons nous à présent à la seconde partie du fichier  « etc/asterisk/sip.conf », il s’agit en fait de la configuration des comptes utilisateurs. Nous avons dans notre cas défini deux comptes utilisateurs : [5001] et [5002] qui représente respectivement le numéro SIP 5001 et le numéro SIP 5002. L’option type avec la valeur friend représente un utilisateur pouvant effectuer des appels entrants et sortants.

(Ps : l’option type avec la valeur peer ne permet que les appels entrants et avec la valeur user ne permet que les appels sortants) 

L’option host permet d’indiquer le type de configuration réseau de l’hôte : « dynamic » pour signifier qu’il dispose d’une adresse IP dynamique, ou alors une adresse IP fixe représentant l’adresse IP de l’utilisateur ; l’option secret permet d’indiquer le mot de passe du compte utilisateur et enfin l’option context désigne le groupe contenant les utilisateurs pouvant communiquer entre eux. 

(Ps : on pouvait également rajouter les options fullname et username pour désigner le nom complet et le nom utilisateur du compte)

Après avoir configuré le fichier « /etc/asterisk/sip.conf », intéressons nous à présent au fichier « /etc/asterisk/extensions.conf » :


Ce fichier regroupe le DialPlan, il est utilisé pour router les appels vers un utilisateur ou vers sa messagerie par exemple, les entrées dans ce fichier sont appelées des extensions et se composent comme suit : {exten => numéro,priorité,application()} où le mot-clé exten marque le début d’une extension, le numéro correspond au numéro de téléphone pris en compte par l’extension, la priorité définie l’ordre des actions de l’extension et enfin l’application définit ce que le serveur doit faire. Ainsi pour configurer notre fichier « /etc/asterisk/extensions.conf » nous aurons tout en haut du fichier le context définit précédemment (dans notre cas, il s’agit de [jacquesgoueth]), ensuite, nous allons décrire un ensemble d’actions à entreprendre par le serveur Asterisk à la réception d’un appel provenant d’un numéro donné. Nous aurons donc dans notre cas, pour chaque compte utilisateur : en priorité (1)=Answer(), pour demander au serveur de décrocher l’appel ; en priorité (2)= Dial(type/identifiant,timeout), pour permettre de composer un numéro, avec un délai d’attente en cas de non réponse pour arrêter l’appel ;  en priorité (3)=Playback(sound-file) qui permet de jouer un son donné ; en priorité (4)=VoiceMail(user@mailcontext) pour permettre de joindre la messagerie de l’utilisateur spécifié et enfin en priorité (5)=HangUp() pour  permettre de raccrocher un appel.

(Ps : on aurait également pu ajouter les options SetMusicOnHold(class) pour permettre de jouer une musique d’attente, l’option Goto(contexte,extension,priorité) pour permettre de se rendre à un contexte précis, à une certaine extension, à une certaine priorité... il faut noter également qu’il existe encore d’autres options.)

Poursuivons la configuration de notre fichier « /etc/asterisk/extensions.conf » en définissant à présent grâce à l’option VoiceMailMain(user@mailcontext) : les numéros spéciaux 8001 et 8002 qui seront utilisés respectivement par le compte 5001 et le compte 5002 pour pouvoir consulter leur messagerie vocale.

Maintenant que notre fichier « /etc/asterisk/extensions.conf » est configuré, il ne nous reste plus qu’a modifier le fichier « /etc/asterisk/voicemail.conf » :

Dans ce fichier, nous  définissons les mots de passe des utilisateurs (en fonction de leur numéro de téléphone) qui leur donneront accès à leur messagerie vocale. 

Une fois que les fichiers sip.conf, extensions.conf et voicemail.conf sont configurés, nous devons à présent démarrer (ou redémarrer) le serveur Asterisk pour ce faire, nous lançons tout d’abord la console Asterisk avec à la commande « asterisk –r »


Puis nous entrons la commande « reload » pour effectuer le redémarrage du serveur Asterisk et la prise en compte de toutes les modifications apportées :
 
Notre serveur Asterisk est à présent démarré et prêt à accueillir des communications en VoIP entre clients. Nous allons tester le bon fonctionnement de notre serveur en effectuant un appel entre deux clients : un ordinateur de bureau muni d’un Softphone et un Smartphone. Mais avant de pouvoir effectuer le moindre appel, les futurs clients doivent également être configurés et disposés d’un compte SIP.

Configuration du Softphone

Un Softphone est un logiciel utilisé pour faire de la téléphonie via VoIP depuis un ordinateur, dans notre cas, le Softphone utilisé par notre client est X-Lite. 

Pour configurer notre Softphone X-Lite, nous nous y prenons comme suit :

Se rendre dans le Softphone X-Lite au niveau de l’option « Softphone »,

 

Puis, aller dans la rubrique « Account Settings » :


Une fois dans l’option « Account Settings », plus précisément dans l’onglet « Account », nous devons entrer le nom du compte (dans notre cas 5001), ainsi que l’identifiant du compte utilisateur, l’adresse IP du serveur Asterisk (192.168.43.210) et le mot de passe. Il faut ensuite, cliquer sur le bouton « OK » pour terminer la configuration.


Une fois le Softphone configuré et après un court laps de temps, si les paramètres ont été correctement renseignés et si l’adresse IP du serveur Asterisk est valide, nous recevons une notification du logiciel X-Lite qui nous indique que le statut de notre Softphone est « actif » donc nous pouvons à présent émettre et recevoir des appels.   


A présent, nous allons configurer de même notre client Smartphone.

Configuration du Smartphone

Pour configurer notre Smartphone pour qu’il puisse émettre des appels VoIP, on peut avoir recours à certaines applications comme CSipSimple ou Zoiper, mais dans notre cas ici, nous n’en aurons pas besoin, ainsi, nous débutons la configuration en nous rendant dans les paramètres d’appel ; pour ce faire, on appuie sur l’icône du « téléphone »,
Puis, nous nous rendons dans l’option « Paramètres » :
Ensuite, dans l’onglet « Appel Internet » :
Puis, il nous faut ajouter un compte SIP, donc, nous nous rendons dans l’option « Comptes »,
Par la suite, nous appuyons sur le bouton « AJOUTER UN COMPTE » :
Puis, il nous faut remplir un ensemble de champs dans lesquels nous devons renseigner entre autres l’adresse IP du serveur Asterisk, notre nom d’utilisateur (ou numéro de téléphone) et notre mot de passe.
Nous remplissons donc, un à un chacun des champs :
Une fois tous les champs remplis, il ne nous reste plus qu’a appuyer sur le bouton « ENREGISTRER », pour finaliser l’opération de création du compte SIP de notre Smartphone.
Maintenant que notre Smartphone est configuré pour pouvoir effectuer de la VoIP ainsi que notre Softphone X-Lite, nous pouvons à présent, effectuer un appel.   
  
Par exemple, si le client Smartphone (dont le numéro de téléphone est le 5002) désire émettre un appel vers le client Softphone (dont le numéro de téléphone est le 5001), il suffit au client Smartphone de composer le numéro de son destinataire :
Après un court laps de temps, au niveau du Softphone, nous nous rendons compte que l’appel du client Smartphone (5002) est bien reçu, comme le montre la capture suivante.  

  
Ensuite, après que le client Softphone a décroché l’appel du client Smartphone, la communication est bien établie entre les deux correspondants qui peuvent à présent effectuer leur échange en toute tranquillité. 


(Ps : on peut au niveau de la console, lister toutes les entités (Softphone, Téléphone IP, Smartphone, …) SIP connectées au serveur Asterisk grâce à la commande « sip show peers ».)

A présent, vous savez comment configurer un serveur Asterisk pour pouvoir permettre de la communication téléphonique de type VoIP sur un réseau IP donné à partir de périphériques (Softphone, Smartphone, Téléphone IP, …) configurés à cet effet.

Merci d’avoir suivi le tutoriel jusqu’à la fin.

A très bientôt !!!