Hola, en esta ocasion relatare mi experiencia con DUNDI, un protocolo por el cual puedo compartir Dialplan entre dos maquinas Asterisk. Es muy util cuando tengo dos "sedes" y deseo comunicarme entre ellas, ademas de ser super seguro y dinamico, a medida que un sede genera una extension o actualiza su Dialplan, las demas se enteran y asi todo keda actualizado en la red, en pocas palabras y por decirlo de esa manera es un protocolo de red de asterisk. Es algo complejo al inicio pero luego de entenderlo es muy eficiente y lo mas importante, FUNCIONA !!. Asi que manos a la obra.
Tendremos en cuenta que:
-Servidor 1 se llama Nirvana con ip 172.16.1.2
-Servidor 2 se llama Pixies con ip 172.16.2.2
-Nirvana es el servidor de Bogota y Pixies el servidor en Barranquilla.
-DUNDI es un protocolo separado, por lo que usa un puerto por si solo para consultas, el 4520 UDP.
-Mac de Nirvana AA:AA:AA:AA:AA:AA
-Mac de Pixies BB:BB:BB:BB:BB:BB
-Rango de extensiones en Nirvana, 1000-1999
-Rango de extenxiones en Pixies 2000-2999
Sabiendo eso, empezaremos editando el archivo "dundi.conf" los siguientes parametros
en Nirvana:
department=Cundinamarca
organization=miempresa
locality=bogota
stateprov=DC
country=CO
email=tucorreo@email.com
phone=+12565551212
port=4520 ; o si lo deseas personalizar.
entityid=AA:AA:AA:AA:AA:AA
cachetime=3600
ttl=3
[mappings]
dundi-extens => exten-compartio,1,IAX2,dundi:${SECRET}@172.16.1.2/${NUMBER},nopartial
[BB:BB:BB:BB:BB:BB]
model = symmetric
host = 172.16.2.2
inkey = punk
outkey = punk
include = dundi-extens
permit = dundi-extens
qualify = yes
en Pixies
department=Atlantico
organization=miempresa
locality=barranquilla
stateprov=DC
country=CO
email=tucorreo@email.com
phone=+12565551212
port=4520 ; o si lo deseas personalizar.
entityid=BB:BB:BB:BB:BB:BB
cachetime=3600
ttl=3
[mappings]
dundi-extens => exten-compartio,1,IAX2,dundi:${SECRET}@172.16.2.2/${NUMBER},nopartial
[AA:AA:AA:AA:AA:AA]
model = symmetric
host = 172.16.1.2
inkey = punk
outkey = punk
include = dundi-extens
permit = dundi-extens
qualify = yes
Desde la consola de Nirvana(o si lo prefieress desde Pixies) ejecutamos los siguientes comando
#cd /var/lib/asterisk/keys
#astgenkey -n punk
# rsync punk* ip_de_otra_sede:/var/lib/asterisk/keys/
Ahora configuraremos Extensions.conf en cada sede
Vamos con Nirvana
[exten-compartio]
exten -> _1XXX,1,goto(from-internal,${EXTEN},1)
[dundi-extens]
switch => dundi/exten-compartio
[from-internal]
...
include => dundi-extens
En pixies
[exten-compartio]
exten -> _2XXX,1,goto(from-internal,${EXTEN},1)
[dundi-extens]
switch => dundi/exten-compartio
[from-internal]
...
include => dundi-extens
Seguiremos configurando una troncal IAX
En Nirvana
[dundi]
type=friend
context=exten-compartio
dbsecret=dundi/secret
disallow=all
Allow=gsm; o lo que prefieran.
En Pixies
[dundi]
type=friend
context=exten-compartio
dbsecret=dundi/secret
disallow=all
Allow=gsm; o lo que prefieran.
Por ultimo, hacemos un restart a asterisk. y haremos una serie de pruebas. En consola de asterisk, ejecutaremos :
Nirvana> dundi lookup 2000@dundi-extens
2000@dundi-extens
1. 0 IAX2/dundi:5Occfx8Tmx+rbwYtyx4mbQ==@172.16.2.2/3100 (EXISTS|CANMATCH)
from BB:BB:BB:BB:BB:BB, expires in 3600 s
DUNDi lookup completed in 120 ms
Nuestro "query" por asterisk funciona. Por ultimo hagamos una marcacion de una sede a la otra y listo. Tenemos DUNDI activo y funcionando.
Les explicare un poco como funciona:
La extension 2110 en Pixies hace un dial a la extension 1150, dentro de from-internal no existe un referente a esa extension asi que pasa al
"include => dundi-extens"
y ahi en ese contexto, existe la sentencia
switch => dundi/exten-compartio
esta basicamente invoca a DUNDI y ejecuta un query local que tiene informacion gracias a que desde q se inicio dicho protocolo, estan compartiendo informacion cada 3600 segundos(o como lo hayan configurado) entre si y ejecuta una marcacion
IAX2/dundi:5Occfx8Tmx+rbwYtyx4mbQ==@172.16.1.2/3100
Al llegar a Nirvana en la definicion de IAX aparece que el peer dundi tiene relacionado el contexto "exten-compartio", y el contexto lo conforma la linea
exten -> _1XXX,1,goto(from-internal,${EXTEN},1)
de ahi va a from-internal y si la extension existe, la extension 1150 estara timbrando. Si por alguna razon no funciona, revisen bien el tutorial paso a paso, y cualkier cambio ejecuten un restart al Asterisk, y luego ejecuten un flush a DUNDI con el siguiente comando:
CLI> dundi flush
Les ahorrrara mucho tiempo que perdi por no flusherar el cache.
No siendo mas, espero les sirva la info.
Saludos !!
Comentarios
Publicar un comentario