TP2 : INTERCONNEXION ENTRE DEUX ASTERISK ET ENTRE KAMAILIO-ASTERISK

Publié le par Kachallah Abagana Mahamat

Mise en place d'un serveur Asterisk avec une connexion ODBC vers MySQL pour la gestion des comptes utilisateurs

 

1- Architecture

N.B : Nous avons utilisé ubuntu 14.04 LTS

2- Installation des prerequis ODBC et MYSQL:

#apt-get install mysql-server libmysqlclient-dev unixodbc-dev libmyodbc 
 
3- Installation des prerequis Asterisk:

#apt-get install mysql-server make libmysqlclient-dev unixodbc-dev libmyodbc g++ bison libcurl3 libcurl3-gnutls libcurl4-openssl-dev libssl-dev uuid-dev  ncurses-base ncurses-term libncurses5-dev libjansson-dev libxml2-dev sqlite3 libsqlite3-dev libspandsp-dev libsrtp0-dev libopus-dev libopusfile-dev libopus-dev libvpx-dev opus-tools libmp3lame-dev libmpg123-dev mpg123 libmpg123-0 libedit-dev libjansson-dev libjansson4

4- Installation d'Asterisk : 
 
Télécharger asterisk 


#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz

#tar -xvzf asterisk-16-current.tar.gz -C /usr/local/

#cd /usr/local/asterisk-16.24.0/

# ./configure  --with-jansson-bundled

#make menuselect 
 
 

 

#make

#make install

#make samples 
 
On télécharge le fichier asterisk.sql 

 

Ensuite on éxécute les scripts :

#mysql -u root -p < asterisk.sql

> GRANT ALL privileges ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'passer'; 

> flush privileges;

>exit;

>use asterisk;

INSERT INTO sipusers (name, defaultuser, host, sippasswd, fromuser, fromdomain, mailbox) VALUES ('100', '100', 'dynamic', '100', '100', '192.168.1.10', '100');

INSERT INTO sipusers (name, defaultuser, host, sippasswd, fromuser, fromdomain, mailbox) VALUES ('101', '101', 'dynamic', '101', '101', '192.168.1.10', '101');

INSERT INTO sipusers (name, defaultuser, host, sippasswd, fromuser, fromdomain, mailbox) VALUES ('102', '102', 'dynamic', '102', '102', '192.168.1.10', '102');

INSERT INTO sipregs(name) VALUES('100');
INSERT INTO sipregs(name) VALUES('101');
INSERT INTO sipregs(name) VALUES('102');
 
INSERT INTO voicemail(context, mailbox, password) VALUES ('default', '100', '1234');
INSERT INTO voicemail(context, mailbox, password) VALUES ('default', '101', '1234');
INSERT INTO voicemail(context, mailbox, password) VALUES ('default', '102', '1234');


 
On édite les fichiers : 
 
#vim /etc/odbc.ini 
 
[MySQL-asterisk]

Description = MySQL Asterisk database

Trace = Off

TraceFile = stderr

Driver = MySQL

SERVER = localhost

USER = asterisk

PASSWORD = passer

PORT = 3306

DATABASE = asterisk 
 

#vim /etc/odbcinst.ini

[Default]
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so

[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage   = 1
;UsageCount = 2


#vim /etc/asterisk/res_odbc.conf 
 
[asterisk]

enabled => yes

dsn => MYSQL-asterisk;

username => asterisk

password => passer

pre-connect => yes 
 
#vim /etc/asterisk/extconfig.conf 
 
[settings]

sipusers => odbc,asterisk,sipusers

sippeers => odbc,asterisk,sipusers

sipregs => odbc,asterisk,sipregs

voicemail => odbc,asterisk,voicemail 
 
#vim /etc/asterisk/sip.conf 
 
udpbindaddr=0.0.0.0:5080

rtcachefriends=yes 
 
#vim /etc/asterisk/extensions.conf 
 
[public]

exten => _1XX,1,Dial(SIP/${EXTEN},20,tr)

exten => _1XX,n,Voicemail(${EXTEN},u)

exten => _1XX,n,Hangup

exten => _1XX, 101, Voicemail (${EXTEN},b)  

exten => _1XX, 102, Hangup 
 
On redémarre asterisk et on utilise les comptes 101 et 103 qu'on configure en précisant le port 5080 Sur les softphones et les appels devraient passer entre les utilisateurs 101 et 103.

N.B: Vous pouvez utiliser le port 5060 si c'est pas utilisé par une autre application.

 

 Interconnexion entre deux Asterisk partageant la même base de données MySQL des utilisateurs 

 

 

Principe de fonctionnement 
 
Nous disposons de deux serveurs asterisk sous ubuntu 14.0.1, nous allons donc faire une interconnexion entre les deux asterisk partageant la même base de données des utilisateurs.

Un utilisateur qui se connecte sur un des asterisk est reconnu par l'autre asterisk et donc si un utilisateur se connecte sur asterisk1 et un autre sur asterisk2, alors ils peuvent s'appeler et s'envoyer des messages. Ceci est un avantage sur les étapes à venir si nous voulons interconnecter deux asterisk avec Kamailio qui partage tous en même temps la base de données asterisk, les utilisateurs d'asterisk n'auront pas à s'enregistrer sur les deux asterisk, il suffit juste de s'enregistrer sur un astersik et alors un utilisateur qui est enregistré sur la base de données kamailio pourra appeler les utilisateurs qui sont dans la base de données asterisk. 
 
Nous allons passer au partage de la base de données entre asterisk1 et asterisk2. 
 

  • Partage de la base de données commune asterisk.

La base de données se trouve dans la machine qui contient asterisk1 à l'adresse 192.168.1.12. D'abord faire une copie de la table sipregs de la base de données asterisk. 

 
 #mysql -u root -p 
 
> use asterisk;

>create table sipregs_asterisk1 like sipregs;

>create table sipregs_asterisk2 like sipregs;

>exit 
 
Il faut donner tous les droits aux tables sipregs_asterisk1 et sipregs_asterisk2

Créer une Vue entre les deux tables : 
 
CREATE VIEW sipregs_all AS select * from sipregs_asterisk1 union select * from sipregs_asterisk2; 
 
Ensuite inséré des utilisateurs dans les tables : 
 
INSERT INTO sipregs_asterisk1 (name) VALUES ('101');

INSERT INTO sipregs_asterisk1 (name) VALUES ('102');

INSERT INTO sipregs_asterisk2 (name) VALUES ('101');

INSERT INTO sipregs_asterisk2 (name) VALUES ('102'); 
 
Il faut aussi éditer le fichier func_odbc.conf et ajouter : 

[checkregserver] 
 
dsn=MYSQL-asterisk

readsql=SELECT regserver FROM sipregs_all WHERE fullcontact like 'sip:${ARG1}%'order by regseconds DESC limit 1 

  • Dans Asterisk1 

 
Dans asterisk.conf ajouter la ligne : 
 
systemname = asterisk1 
 
Dans asterisk1 nous allons d'abord éditer le fichier /etc/asterisk/sip.conf et ajouter les lignes suivantes: 
 
tcpenable=no

tcpbindaddr=0.0.0.0:5080 //port d'écoute d'asterisk1 car on n'avait un kamailio qui écoute sur 5060

rtcachefriends=yes

rtsavesysname=yes 
 
Il faut aussi ajouter un compte pour asterisk
 
 

 

Ensuite on édite le fichier /etc/asterisk/extensions.conf 

Pour définir le plan de numérotation.

  • Dans Asterisk2 

 
Dans asterisk.conf ajouter la ligne : 

 

Dans asterisk1 nous allons d'abord éditer le fichier /etc/asterisk/sip.conf et ajouter les lignessuivantes: 
 
rtcachefriends=yes rtsavesysname=yes 
 
Il faut aussi ajouter un compte pour asterisk1.

Ensuite on édite le fichier /etc/asterisk/extensions.conf 

  • Problème rencontré 

Nous avons rencontré le problème de connexion à la base de données avec ODBC avec la requête spécifiée dans func_odbc.conf.

  • Solution 

Nous avons mise en place un script php dans lequel nous avons fait appel à la requête qui nous permet de récupérer le regserver. Ensuite on utilise CURL dans les fichiers extensions.conf des deux asterisk pour accéder à la base de données. regserver.php dans /var/www/html/   de Asterisk1

  • Test des appels 

*utilisateur 103 se connecte sur asterisk1

*utilisateur 101 se connecte sur asterisk2 
 
* 103 appels 102

  • coté asterisk1
  • Coté asterisk2

L’appel entre user 103 et user 101 passe. 

 

 

 

 

 

 

 

 

 

Publié dans Télécoms, Asterisk

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
J
I would like to ask if it is possible to add a Siremis Gui for Kamailio and the rest of the config for asterisk (extensions.conf) how to route a DID,etc
Répondre