Asterisk IAX

De NCad Wiki
Aller à la navigation Aller à la recherche

.:[ Asterisk IPBX ]:.

Installation >> Utiliser un forfait SIP >> MySQL >> Boîte Vocale >> Synthax
Inter-Asterisk eXchange | MOH Musique d'Attente

Présentation

Le protocol IAX

IAX est un protocole de communication propre à l'échange de données entre plusieurs serveurs Asterisk.

Fonctionnement

Dans une architecture composée d'un seul serveur Asterisk, tous les postes sont enregistrés sur ce même serveur et peuvent se joindre entre eux. Si un second serveur est déployé, les postes du serveur A ne pourront pas joindre les poste du serveur B car ils sont enregistrés sur un serveur différent. Dans ce cas, il faut établir deux truncks : le premier du server A vers le serveur B et le second du serveur B vers le serveur A. Ainsi, les deux serveur pourront s'échanger les appels. Pour mettre en place un trunck inter-Asterisk, il faut utiliser le protocol IAX qui peut être géré dans le fichier de configuration /etc/asterisk/iax.conf.

Etude de cas

Maquette

Déploiement du protocole IAX entre deux serveurs Asterisk

Configuration du serveur A

Pour être acheminé du serveur A au serveur B et réciproquement, les serveurs doivent disposer :

  • d'un compte trunck pour chacun des serveurs;
  • d'une ligne register pour s'authentifier sur le serveur.

Création du compte trunck pour la connexion du serveur A

Ce compte va permettre au serveur B d'acheminer les appels à destination du serveur A. La ligne register permet d'établir le compte trunck avec le serveur B qui va être crée par la suite. Ainsi le serveur B autorisera la serveur A à transmettre également ses appels.

[general]
autokill=yes
register => servera:password@192.168.104.112

[serverb] ; compte trunck
type=friend
host=dynamic
trunk=yes
secret=password
context=planinterne
deny=0.0.0.0/0.0.0.0
permit=192.168.104.112/255.255.255.255

Les mots de passes utilisées doivent être identiques pour les deux serveurs aussi bien pour le compte trunck du serveur A vers B et réciproquement.

Adaptation du dialplan

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjumping=no
language=fr

[globals]
CONSOLE=Console/dsp
IAXINFO=servera
TRUNK=Zap/g2
TRUNKMSD=1

[telephone] ; contexte des postes internes
include => planinterne
include => planserverb
[planinterne]
; appels internes
exten => _7XXX,1,Answer()
exten => _7XXX,n,Dial(SIP/${EXTEN})
exten => _7XXX,n,Hangup()

[planserverb]
; appels sur le serveur b
exten => _2XXX,1,Answer()
exten => _2XXX,n,Dial(IAX2/serverb/${EXTEN})
exten => _2XXX,n,Hangup()

On crée deux nouveaux contextes :

  • telephone : qui sera affecté aux postes téléphoniques depuis le fichier /etc/sip.conf et qui regroupe les contextes [planinterne] et [planserverb];
  • planservb : transfert les appels dont le numéro commence par 2 suivit de 4 chiffre au serveur b. Ceci correspond au plan de numérotation interne du serveur b.

Modification du fichier sip.conf

On change le contexte de chacun des postes pour qu'ils appartiennent au contexte [telephone] :

[general]
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes

[7001]
type=friend
username=7001
secret=userpasswd
callerid="Poste 1" <7001>
host=dynamic
context=telephone
language=fr
insecure=port
nat=yes
host=dynamic

[7002]
type=friend
username=7002
secret=userpasswd
callerid="Poste 2" <7002>
host=dynamic
context=telephone
language=fr
insecure=port
nat=yes
host=dynamic

Configuration du serveur B

Voici la configuration du serveur B. Cette dernière est calquée sur celle du serveur A. A l'exception du plan de numérotation. Les postes internes du serveur B disposeront d'un numéro composé de 4 chiffres mais débutant par 2 au lieux de 7 comme pour le serveur A.

Création du compte trunck pour la connexion du serveur B

[general]
autokill=yes
register => serverb:password@192.168.104.146

[servera] ; compte trunck
type=friend
host=dynamic
trunk=yes
secret=password
context=planinterne
deny=0.0.0.0/0.0.0.0
permit=192.168.104.146/255.255.255.255

Dialplan du serveur B

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjumping=no
language=fr

[globals]
CONSOLE=Console/dsp
IAXINFO=serverb
TRUNK=Zap/g2
TRUNKMSD=1

[telephone] ; contexte des postes internes
include => planinterne
include => planservera

[planinterne]
; appels internes
exten => _2XXX,1,Answer()
exten => _2XXX,n,Dial(SIP/${EXTEN})
exten => _2XXX,n,Hangup()

[planservera]
; appels sur le serveur a
exten => _7XXX,1,Answer()
exten => _7XXX,n,Dial(IAX2/servera/${EXTEN})
exten => _7XXX,n,Hangup()

Fichier sip.conf du serveur B

[general]
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes

[2001]
type=friend
username=2001
secret=userpasswd
callerid="Poste 1" <2001>
host=dynamic
context=telephone
language=fr
insecure=port
nat=yes
host=dynamic

[2002]
type=friend
username=2002
secret=userpasswd
callerid="Poste 2" <2002>
host=dynamic
context=telephone
language=fr
insecure=port
nat=yes
host=dynamic