Ir al contenido principal

Usando DUNDI en asterisk




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

Entradas populares de este blog

Instalar Queuemetrics desde 0.

Cześć. Queuemetrics a pesar de estar casi personalizada su  instalación a Centos, también puede instalarse en otros sistemas operativos, de hecho en cualquier Linux podría hacerse. A continuación describo los pasos para hacerlo. En este demo se usó Suse. Descargar los siguientes paquetes: - Queuemetrics(obviamente XD)      link http://queuemetrics.loway.it/download.jsp      formato tar.gz - Mysql connector      link https://dev.mysql.com/downloads/connector/j/      formato  "platform independent" tar.gz      debe registrarse previamente. - Tomcat      link http://tomcat.apache.org/      formato tar.gz      en este manual se instaló la version 8.5.37 - JDK      link https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html      formato tar.gz      version linux x64 Instalar: - JDK Descomprimir #tar -zxvf jdk-8u201-linux-x64.tar.gz Mover jdk a /usr/local/ #mv jdk1.8.0_201 /usr/local/ - Tomcat Descomprimir #tar -zxvf a

Asterisk con WebRTC, TLS, libsrtp

  Cześć !! En esta ocasión vamos a explicar cómo configurar Asterisk para que desde un teléfono web podamos sacar y recibir llamadas. Se usará los siguientes componentes de Asterisk: libsrtp tls Asterisk module http Antes que nada debemos tener un teléfono web(obviamente), en el laboratorio vamos a usar Sipml5 en el siguiente link : https://www.doubango.org/sipml5/call.htm El siguiente paso es instalar libsrtp del enlace: https://github.com/cisco/libsrtp . #git clone https://github.com/cisco/libsrtp.git #cd libsrtp #./configure #make && make install Luego verificamos tener los siguientes módulos activos para compilar en menuconfig de Asterisk: res_crypto res_http_websocket res_srtp Comunmente si res_crypto no está selecionable, le falta la dependencia openssl-devel o su equivalente dependiendo del sistema que tengan. Cuando estemos seguros que están cargados en Asterisk continuamos con la instalación de los certificados locales(Si usa Lets'encrypt omitir la generación de c

GNUDIALER en Asterisk

Hola Como están? GNUDIALER es un software de marcacion predictiva que nos ofrece varios modos, prediccion, modo automatico, modo preview, ademas de incluir un CRM y es muy dinamico. A pesar de que en el mercado existen muchos software de este tipo sean GNU o pagos, GNUDIALER es muy efectivo y lo mejor es GNU. Eso quiere decir que puedes modificarlo con un poco de conocimiento en lenguaje C y asterisk, bueno uno poco no, mucho conocimiento. He usado VICIDIAL en otras ocasiones y es también verdaderamente interesante, sin embargo como todo en este planeta hay ventajas y desventajas. Una de las ventajas que tiene sobre VICIDIAL(hasta el momento he podido observar en VICIDIAL) es que es mucho mas sencillo de administrar via web, puedo tener un numero ilimitado de campos en mi campaña,  puedo editar mis scripts ami antojo via web html(teniendo un conocimiento html). Desventajas es q aveces se puede comportar algo inestable si no tengo en cuenta el ratio vs cantidad de lineas vs agentes di