Vous êtes sur la page 1sur 15

Asterisk est un PBX applicatif open source permettant d'interconnecter en temps rel des rseaux de voix sur IP via

plusieurs protocoles (SIP, H323, ADSI, MGCP) et des rseaux de tlphonies classiques via des cartes d'interface tlphonique et tout ceci moindre cot. Asterisk offre toutes les fonctions d'un PBX et ses services associs comme de la confrence tlphonique, des rpondeurs intractifs, de la mise en attente d'appels, des mails vocaux, de la musique d'attente, de la gnration d'enregistrement d'appels pour l'intgration avec des systmes de facturation, etc...

Le PBX open source Asterisk a vu le jour quand Mark Spencer, a voulu acqurir un PBX traditionnel pour sa socit. Le crateur d'Asterisk, trouvant que le prix d'acquisition d'un PBX traditionnel tait dmesur, initia un projet open source. Il a donc commenc dvelopper Asterisk. Son quipe s'est rapidement rapproche de celle de Jim Dixon (Zapata Telephony Project), dans le but de construire des cartes d'interface "bon march" avec le rseau tlphonique classique. Leur but tait de construire des cartes compatibles avec des plateformes bases sur Intel et ainsi de permettre n'importe quel PC, avec le systme d'exploitation Linux, une carte d'interface et le logiciel Asterisk d'avoir un PBX entirement fonctionnel. Pour info, Le nom Asterisk fait rfrence au symbol "*" qui signifie "wildcard" en ligne de commande Unix et DOS. Ce choix a t fait car Asterisk est conu dans le but d'offrir une trs grande souplesse dans des rseaux de voix. Asterisk Open Source PBX, par Mark Spencer <markster@digium.com> Copyright (C) 20012005 Digium, Inc. Asterisk est distribu sous la GNU General Public License (GPL) et est aussi disponible sous des licences alternatives sous rserve d'accord avec la socit DIGIUM, Inc. Si vous obtenez Asterisk sous la licence GPL, alors cette licence s'applique tous les modules utiliss par votre systme d'exploitation lexception des cas suivants.

Digium, Inc. maintient un copyright et/ou une licence sur tous les composants de base du systme Asterisk, et peut donc accorder, de son propre chef, le droit des socits ou individus, de crer des modules propritaires ou open source (non soumis la licence GPL) qui peuvent tre dynamiquement utiliss par Asterisk lors de son excution. Pour plus de dtails concernant ce point, merci de vous diriger vers la socit Digium. Il n'y pas de restriction pour utiliser le code source d'Asterisk dans un autre programme soumis la licence GPL. Des permissions spcifiques ont aussi t donnes pour utiliser OpenSLL et OpenH323 avec Asterisk. Les modules qui sont soumis la licence GPL et qui ne sont pas disponibles sous la licence dispense par Digium sont disponibles sur serveur CVS Si vous avez des questions sur les termes de cette licence, n'hsitez pas contacter la socit digium. Pr requis: Les packages suivants doivent tre installs sur votre systme avant de procder l'installation d'Asterisk - Linux 2.4 kernel sources or kernel 2.6 header files (http://www.kernel.org/pub/) - bison et bison-devel (http://ftp.gnu.org/pub/gnu/bison/bison-2.0.tar.gz) - ncurses et ncurses-devel (http://freshmeat.net/redir/ncurses/6995/url_tgz/ncurses-5.4.tar.gz) - zlib et zlib-devel (http://freshmeat.net/redir/zlib/12352/url_bz2/zlib-1.2.2.tar.bz2) - openssl et openssl-devel (http://freshmeat.net/redir/openssl/7464/url_tgz/openssl0.9.8.tar.gz) Tlcharger les sources sur le site FTP de digium: wget http://ftp.digium.com/pub/asterisk/asterisk-1.2.0-beta1.tar.gz ywget http://ftp.digium.com/pub/zaptel/zaptel-1.2.0-beta1.tar.gz wget http://ftp.digium.com/pub/libpri/libpri-1.2.0-beta1.tar.gz Installation de libpri: tar -xzvf libpri-1.2.0-beta1.tar.gz /usr/local/src/asterisk cd /usr/local/src/asterisk/libpri-1.2.0-beta1 make clean;make;make install Installation de zaptel: tar -xzvf zaptel-1.2.0-beta1.tar.gz /usr/local/src/asterisk cd /usr/local/src/asterisk/zaptel-1.2.0-beta1 make clean;make;make install Installation d'Asterisk:

tar -xzvf asterisk-1.2.0-beta1.tar.gz /usr/local/src/asterisk cd /usr/local/src/asterisk/asterisk-1.2.0-beta1 make clean;make;make install;make sample Pr requis: Le package suivant doit tre install sur votre systme Windows : - X-ten, un client logiciel VoIP (http://builds.xten.net/download-public.php?download=1135). Configuration d'Asterisk: Editer le fichier sip.conf: Rajouter les lignes suivantes la fin du fichier, [test] type=friend secret=test callerid="Utilisateur de test " <test> host=dynamic disallow=all allow=ilbc

Le guide d'installation et de configuration du client X-lite sous Windows XP est disponible l'adresse suivante: http://asterisk.open-source.fr/X-lite-installation-20050920-fr.pdf Une fois le client X-lite install et configur, composer le numro 1000, appuyer sur Enter et suivre les instructions (langue Anglaise)

Installation et configuration d'un serveur IPBX Asterisk


Par

Jeyg
27 juillet 2010Post dans : Rseau, Systme, Tutoriel

Sommaire
1 - Installation dAsterisk 1.1 Prrequis 1.2 Rcupration des sources 1.3 Compilation 2 - Conguration dAsterisk 2.1 sip.conf 2.2 extensions.conf 2.3 Prise en compte des congurations 3 - Ajout de fonctions 3.1 Transfert dappel 3.2 Mise en attente 3.3 Messagerie vocale 3.4 Conguration du MTA pour la messagerie vocale 4 - Asterisk en temps rel avec MySQL 4.1 Prrequis 4.2 Rcupration des sources Asterisk Add-Ons 4.3 Compilation 4.4 Conguration initiale 4.5 Migration du chier sip.conf 4.6 Migration du chier extension.conf

1 - Installation d'Asterisk

1.1 Prrequis
Liste des dpendances ncessaires linstallation : - glibc-source - ncurses-dev - zlib1g-dev

1.2 Rcupration des sources


Direction www.asterisk.org pour rcuprer les sources. Il est conseill de choisir la version LTS (Long Time Support), ici la version 1.4. On tlcharge larchive dans le rpertoire /usr/src/, puis on dtare :
$ cd /usr/src $ tar -xvf asterisk-1.4.29

1.3 Compilation
On se dplace dans le rpertoire dtar et on compile:
$ cd asterisk-1.4.29/ $ ./configure $ make menuselect (optionnel) $ make # make install

On cre des chiers de conguration dexemple.


# make samples

On copie le bon script init pour le lancement automatique au dmarrage suivant sa distribution, ici Debian.
# cp /usr/src/astrisk/contrib/init.d/rc.debian.asterisk /etc/init.d/asterisk

Attention : Ce script semble problmatique sur Debian 5. En eet, si Asterisk est lanc par ce biais, la consommation du CPU monte 99% en permanance. Un moyen de contourner ce problme peut tre de passer par inittab, en ajoutant dans celui-ci :

as:2:respawn:/usr/sbin/asterisk -f

Le 2 correspond au runlevel, donc de cette manire asterisk se lance au dmarrage et se relance grce au respawn si le processus meurt pour nimporte quelle raison. On noublie pas de dsactiver le script init au dmarrage :
# update-rc -f asterisk remove

2 - Conguration dAsterisk
Pour quAsterisk fonctionne de manire basique, il est ncessaire de modier seulement deux chiers de conguration : sip.conf et extensions.conf. Ces chiers de congurations se trouvent dans /etc/asterisk.
# cd /etc/asterisk/

2.1 sip.conf
Cest dans ce chier que lon dnit les comptes sip des utilisateurs. Pour tre fonctionnel, un compte a besoin dau minimum 6 lignes :
# cat sip.conf [utilisateur1] type=friend host=dynamic user=utilisateur1 secret=mysecret context=default

Voyons en dtail chaque ligne : [utilisateur1] est le dbut du bloc SIP. Les informations prsentes aprs cette ligne concerneront le compte [utilisateur1]. type=friend permet dappeler et dtre appel. host=dynamic ladresse ip du client est dnie par DHCP. Si son IP tait xe on laurait prcis ici. user=utilisateur1 le nom utilisateur secret=mysceret le mot de passe en clair context=default le contexte auquel le compte est associ dans le dialplan (servira pour le chier extensions.conf) Une liste des options possibles : http://www.voipinfo.org/wiki/view/Asterisk+config+sip.conf\#SIPconfigurationspeersandclients

A noter quen utilisant secret, le mot de passe est stock en clair. Il est prfrable dutiliser md5secret, qui, comme son nom lindique, utilisera un hash md5. Voici la structure ncessaire pour la gnration du hash :
<user>:<realm>:<secret>

Par dfaut le realm est asterisk. Pour gnrer le hash de lutilisateur toto qui a pour mot de passe tutu avec bash, on fait donc :
$ echo -n "toto:asterisk:tutu" | md5sum 5aebc5cf46e9e2dd011c16489eb83a18

2.2 extensions.conf
Cest dans ce chier que lon dnit le dialplan, cest dire le plan de la numrotation. On explicite laction qui se droulera si lon compose un numro. Voici ce que pourrait contenir ce chier :
# cat extensions.conf [default] exten => 100,1,Dial(SIP/utilisateur1)

Le [default] est ce quon appelle un contexte. Le contexte est une zone o la porte des actions est limite. Cela permet par exemple dattribuer deux numros identiques des utilisateurs dirents, lun ou lautre sera contact suivant le contexte dnit dans le compte SIP de lutilisateur cherchant les joindre. La ligne suivante nous montre comment enregistrer une extension. On commence par le mot cl exten suivi dune che =>. Le 100 est le numro que lon souhaite associer, cest ce que lon composera sur le tlphone. Le 1 est le numro de squence. On peut en eet ordonner plusieurs actions pour une mme extension. Dial(SIP/utilisateur1) est laction eectuer. On appelle ici la fonction Dial(), qui dclenche lappel, avec pour argument SIP/utilisateur1 pour appeler le compte SIP utilisateur1. Ici donc, pour tous les utilisateurs du contexte default, composer le 100 appelera lutilisateur1 Un petit exemple pour assimiler la notion de squence :
# cat extensions.conf [default] exten => 100,1,Dial,wait(5) exten => 100,2,Dial,SIP/utilisateur1

Ici, jattends 5 secondes avant de sonner, puis jappelle lutilisateur1. De nombreuses actions sont possibles, au dela du simple appel. En voici une liste :

http://www.voip-info.org/tiki-index.php?page=Asterisk++documentation+of+application+commands

2.3 Prise en compte des congurations


Pour toute modication du sip.conf et du extensions.conf, il est ncessaire quAsterisk recharge ces chiers. Pour cela, on se logue sur la console dAsterisk :
# asterisk -rvvvvdddd (les v pour verbose, les d pour debug)

Puis on recharge Asterisk :


reload

La commande suivante permet de recharger uniquement le dialplan (extensions.conf) :


dialplan reload

A ce moment la, le serveur est oprationnel. Lutilisateur1 possde un compte SIP et un numro lui est associ. Il ne reste plus qu ajouter dautres utilisateurs et mettre jour le dialplan.

3 - Ajout de fonctions
Il faut noter que le transfert dappel et la mise en attente sont souvent directement implments dans les softphone et les terminaux SIP. Les manipulations suivantes permettent de les activer directement dans Asterisk, ce qui permet de saranchir dun logiciel ou matriel particulier.

3.1 Transfert dappel


Il est ncessaire avant tout dactiver les tonalits DTMF la fois ct client et serveur. Pour Asterisk, il sut dajouter la ligne suivante dans sip.conf, dans le contexte [gnral] ou pour chaque utilisateur :
dtmfmode = rfc2833

La dmarche suivre ct client dpend du client, il faut regarder du cot des paramtres SIP.

Pour activer le transfert dappel, il sut simplement de modier les paramtres de la fonction Dial dans extensions.conf :
exten => 100,2,Dial(SIP/utilisateur1,,tT)

Aprs SIP/utilisateur1, nous avon ajout les options t et T qui autorisent lappel et lappelant transfrer lappel (nous reviendrons sur les deux virgules prcdentes dans une prochaine section). Pour eectuer le transfert, il faut appuyer durant une communication sur le # (on entend ce moment la transfer) suivi du numro sur lequel on souhaite transfrer lappel.

3.2 Mise en attente


La mise en attente permet de mettre une communication en pause. Cela est trs utile, car du coup la ligne est libre. On peut alors composer un autre numro, ou rcuprer lappel sur un autre poste. Il est la aussi ncessaire dactiver les tonalits DTMF (cf section prcdente). Pour activer la mise en attente, il sut dajouter la ligne suivante dans le contexte default du chier extensions.conf :
include=>parkedcalls

Pour mettre son interlocuteur en attente lors dun appel, il faut composer le #700. Le serveur attribue un numro au sein du parc dattente. On peut alors raccrocher, changer de poste, et reprendre lappel en composant le numro annonc par le serveur.

3.3 Messagerie vocale


Si on veut que la voix de la messagerie soit en franais, il faut le spcier lors de la compilation dAsterisk laide de la commande :
$ make menuselect

Il faut ensuite ajouter dans le contexte [general] de sip.conf la ligne suivante :


language=fr

On cre une boite vocale dans le chier /etc/asterisk/voicemail.conf, dans la partie [default] :
100 => 1010,Monsieur Utilisateur 1, utilisateur1@gmailyahoohotmail.com

Le 100 est le numro de tlphone auquel on associe la boite vocale. Le 1010 est le mot de passe de la messagerie. Suivent le nom de lutilisateur, ainsi que son mail. Le mail servira lalerter en cas de rception de message vocal, condition quun MTA soit correctement congur (nous le verrons plus tard). La boite vocale est maintenant dclare, il reste linclure dans extensions.conf pour quelle soit utlise :
exten => 100,1,Dial(SIP/utilisateur1, 10) exten => 100,2,Voicemail(b101) exten => 100,3,Hangup

Nous avions dj vu un exemple de squences, en voici un nouveau. La premire action eectue lorsque lon compose le 101 est lappel de lutilisateur1. Le 10 situ aprs la virgule est le timeout avant de passer la deuxieme squence. Cest pour cela que lon avait mis deux virgules de suite dans la section transfert dappel. Une fois le timeout atteint, on bascule sur la deuxime squence, qui est lappel de la boite vocale avec la fonction Voicemail. Enn, on raccroche avec la fonction Hangup.

3.4 Conguration du MTA pour la messagerie vocale


Il est en eet trs intressant de passer par une alerte mail lors de la rception dun message : lutilisateur est alors au courant quil a un message, et peut lcouter directement en pice jointe. On a dj renseign ladresse mail de lutilisateur dans voicemail.conf, il ne reste plus qu congurer un MTA. Jai ici arbitrairement choisi exim4, car cest le MTA par dfaut de Debian. Puisque exim4 est dj install, on va simplement le recongurer :
dpkg-reconfigure exim4-config Type de configuration : Distribution directe par SMTP (site Internet) Nom de courriel du systme :le FQDN Liste dadresses IP o Exim sera en attente de connexions SMTP entrantes : 127.0.0.1 Autres destinations dont le courriel doit tre accept : vide Domaines relayer : vide Machines relayer : vide Faut-il minimiser les requtes DNS (connexions la demande) ? Non Mthode de distribution du courrier local : Format "mbox" dans /var/mail Faut-il sparer la configuration dans plusieurs fichiers ? Non

Le serveur mail va se relancer, Asterisk est dsormais capable denvoyer des mails dalerte avec le message vocal en pice jointe.

4 - Asterisk en temps rel avec MySQL


Comme nous venons de le voir, pour que toute modication de sip.conf ou extensions.conf soit prise en compte, il est ncessaire de recharger le serveur Asterisk. Si on a un vrai besoin dune prise en compte en temps rel et dune plus grande souplesse dans la conguration, la migrer vers MySQL peut tre extremement intressant. On peut en fait se servir de tables au lieu de chiers de conguration. Lorsque lon modiera ces tables, celles-ci seront prises en compte instantanment, sans avoir besoin de recharger le serveur. Cette fonctionnalit, bien que puissante, est considre comme experimentale. Cest pour cette raison quelle nest pas prsente directement dans les sources. Il est ncessaire de tlcharger et installer les Add-Ons dAsterisk.

4.1 Prrequis
Dpendances ncessaires : - mysql-client - mysql-server - libmysqlclient-dev

4.2 Rcupration des sources Asterisk Add-Ons


Toujours sur www.asterisk.org, on tlcharge les sources dans /usr/src puis on dtarre :
$ cd /usr/src $ tar -xvf asterisk-addons-1.4.10.tar.gz

4.3 Compilation
On se dplace dans le rpertoire dtar et on compile :
$ cd asterisk-1.4.29/ $ ./configure $ make menuselect (optionnel) $ make # make install

Il est conseill de vrier avec make menuselect si les modules dpendants de mysql sont bien activs et sil ne manque aucune dpendance.

4.4 Conguration initiale


Une fois la compilation eectue, il on copie ces 2 chiers :
# cp res_config_mysql.so /usr/lib/asterisk/modules/ # cp configs/res_mysql.conf.sample /etc/asterisk/res_mysql.conf

Les paramtres de connexion dAsterisk MySQL sont dnis dans le chier res_mysql.conf :
# cat /etc/asterisk/res_mysql.conf [general] dbhost = 127.0.0.1 dbname = asterisk dbuser = root dbpass = motdepassemysql dbport = 3306

4.5 Migration du chier sip.conf


En premier lieu il est ncessaire de crer la base asterisk dans MySQL. On entre la requete SQL suivante laide du client mysql en ligne de commande ou au travers dune interface web de type phpmyadmin :
CREATE DATABASE asterisk ;

Puis on cre la table sip :


mysql>CREATE TABLE sip ( id int(11) NOT NULL auto_increment,name varchar(80) NOT NULL default , accountcode varchar(20) default NULL,amaflags varchar(13) default NULL, callgroup varchar(10) default NULL,callerid varchar(80) default NULL, canreinvite char(3) default yes,context varchar(80) default NULL, defaultip varchar(15) default NULL,dtmfmode varchar(7) default NULL, fromuser varchar(80) default NULL,fromdomain varchar(80) default NULL, fullcontact varchar(80) default NULL,host varchar(31) NOT NULL default , insecure varchar(4) default NULL,language char(2) default NULL, mailbox varchar(50) default NULL,md5secret varchar(80) default NULL, nat varchar(5) NOT NULL default no,deny varchar(95) default NULL, permit varchar(95) default NULL,mask varchar(95) default NULL, pickupgroup varchar(10) default NULL,port varchar(5) NOT NULL default , qualify char(3) default NULL,restrictcid char(1) default NULL, rtptimeout char(3) default NULL,rtpholdtimeout char(3) default NULL,

secret varchar(80) default NULL,type varchar(6) NOT NULL default friend, username varchar(80) NOT NULL default ,disallow varchar(100) default all, allow varchar(100) default g729;ilbc;gsm;ulaw;alaw, musiconhold varchar(100) default NULL,regseconds int(11) NOT NULL default 0, ipaddr varchar(15) NOT NULL default ,regexten varchar(80) NOT NULL default , cancallforward char(3) default yes,setvar varchar(100) NOT NULL default , PRIMARY KEY (id), UNIQUE KEY name (name), KEY name_2 (name) ) TYPE=MyISAM ROW_FORMAT=DYNAMIC;

La requte est intentionellement lourde pour avoir tous les champs disponibles ds le dpart. Cela permet daecter des valeurs par dfaut sur certains champs, et davoir les autres dj prts pour plus tard, au cas o. On va crer un compte avec cette requte :
mysql>insert into sip (name,type,host,username,secret) values (android1,friend,dynamic,AndroidM,secret);

Pour vrier, on va utiliser le CLI de MySQL. On se connecte sur la base asterisk :


$ mysql asterisk -u root -p

On regarde les champs prcdemments remplis :


mysql>select name,type,host,username,secret from sip; +----------+--------+---------+----------+--------+ | name | type | host | username | secret | +----------+--------+---------+----------+--------+ | android1 | friend | dynamic | AndroidM | secret | +----------+--------+---------+----------+--------+

Enn, on va spcier Asterisk daller chercher les paramtres SIP dans MySQL. Il sut dajouter ces 2 lignes la n du chier extcong.conf :
# echo sipusers => mysql,asterisk,sip >> /etc/asterisk/extconfig.conf # echo sippeers => mysql,asterisk,sip >> /etc/asterisk/extconfig.conf

Au prochain redmarrage dAsterisk, il ira chercher les donnes des comptes SIP dans la table sip de MySQL en complment du chier sip.conf.

4.6 Migration du chier extension.conf


On cre la table SQL extensions :

mysql>CREATE TABLE extensions ( id int(11) NOT NULL auto_increment, context varchar(20) NOT NULL default , exten varchar(20) NOT NULL default , priority tinyint(4) NOT NULL default 0, app varchar(20) NOT NULL default , appdata varchar(128) NOT NULL default , PRIMARY KEY (context,exten,priority), KEY id (id) ) TYPE=MyISAM;

On renseigne cette table avec un numro de tlphone associ au compte SIP prcdemment cr :
mysql> insert into extensions (context,exten,priority,app,appdata) values (default,18,1,Dial,SIP/android1);

On vrie laide de la requte suivante :


mysql> select context,exten,priority,app,appdata from extensions; +---------+-------+----------+------+--------------+ | context | exten | priority | app | appdata | +---------+-------+----------+------+--------------+ | default | 18 | 1 | Dial | SIP/android1 | +---------+-------+----------+------+--------------+

La structure est quasiemment identique au chier extensions.conf. Comme prcdemment, il faut rajouter une ligne extcong.conf pour dire Asterisk daller chercher les extensions dans MySQL :
# echo extensions => mysql,asterisk,extensions >> /etc/asterisk/extconfig.conf

Enn, il faut rajouter la n de extensions.cong une ligne renvoyant vers la base SQL :
# echo switch => Realtime >> /etc/asterisk/extensions.conf

Au prochain redmarrage dAsterisk, les extensions seront charges partir de la table MYSQL asterisk, en complment du chier extensions.conf.