jueves, 17 de abril de 2008

Conectando 3 Servidores Asterisk con IAX

En esta ocasión les traigo una pequeña demostración de como conectar servidores asterisk con IAX. Esto es parte de mi proyecto de grado, asi que es una version inicial y muy simple, seguro que le faltan muchos comandos y mejoras, esto ha funcionado en mi laboratorio.

Explicaré de forma rápida en que consiste mi proyecto. tengo que instalar tres servidores Asterisk ubicados en diferentes ciudades y que se comuniquen a traves del protocolo IAX por medio de Intenet. Tambien tengo pensado usar el codec g729 por ahora esta con el codec gsm.
Dentro de cada LAN, puedo usar el protocolo SIP o IAX y tengo tres alternativas a usar:
  1. Softphone
  2. Teléfono IP
  3. ATA+Teléfono analógico
me parecen mejor las dos últimas opciones porque asi no depende de una computadora, su tarjeta de sonido, etc. ademas que debo conectar a la consola de radio, ya que el sonido debe ir en dos direcciones, hacia el Asterisk y hacia el transmisor de radio.
en la siguiente figura pueden apreciar mas claramente.

sino se ve muy bien tb esta aqui :


Bien, entonces tengo tres maquinas con Asterisk:
chuquisaca: 192.168.2.253
potosi: 192.168.2.252
tarija: 192.168.2.251

ahora paso a mostar los codigos de configuracion de cada maquina.

;iax.conf chuquisaca
[general]
autokill=yes
language=es
register => chuquisaca:welcome@192.168.2.252 ;registrarse en potosi
register => chuquisaca:welcome@192.168.2.251 ;registrarse en tarija

[potosi]
type=friend
host=dynamic
trunk=yes
secret=welcome
context=llamadas_entrantes
deny=0.0.0.0/0.0.0.0
permit=192.168.2.252/255.255.255.255

[tarija]
type=friend
host=dynamic
trunk=yes
secret=welcome
context=llamadas_entrantes
deny=0.0.0.0/0.0.0.0
permit=192.168.2.251/255.255.255.255

[1001]
type=friend
host=dynamic
context=telefonos
secret=123

;sip.conf chuquisaca
[general]
language=es

[1101]
type=friend
host=dynamic
context=telefonos
secret=123

;extensions.conf iax chuquisaca
[globals]

[general]
autofallthrough=yes

[default]

[telefonos]
include => internos
include => potosi
include => tarija

[internos]
exten => _1XXX,1,NoOp()
exten => _1XXX,n,Dial(IAX2/${EXTEN},10)
exten => _1XXX,n,Meetme(1000|M)
exten => _1XXX,n,Hangup()

[potosi]
exten => _2XXX,1,NoOp()
exten => _2XXX,n,Dial(IAX2/potosi/${EXTEN})
exten => _2XXX,n,Hangup()

[tarija]
exten => _3XXX,1,NoOp()
exten => _3XXX,n,Dial(IAX2/tarija/${EXTEN})
exten => _3XXX,n,Hangup()

[llamadas_entrantes]
include => internos

;meetme.conf
[general]

[rooms]
conf => 1000,123,456 ;Creamos el cuarto 1000


;iax.conf potosi
[general]
autokill=yes
language=es
register => potosi:welcome@192.168.2.253 ;chuquisaca
register => potosi:welcome@192.168.2.251 ;tarija

[chuquisaca]
type=friend
host=dynamic
trunk=yes
secret=welcome
context=llamadas_entrantes
deny=0.0.0.0/0.0.0.0
permit=192.168.2.253/255.255.255.255

[tarija]
type=friend
host=dynamic
trunk=yes
secret=welcome
context=llamadas_entrantes
deny=0.0.0.0/0.0.0.0
permit=192.168.2.251/255.255.255.255

[2001]
type=friend
host=dynamic
context=telefonos
secret=123

;sip.conf potosi
[general]
language=es

[2101]
type=friend
host=dynamic
context=telefonos
secret=123

;extension.conf iax potosi
[globals]

[general]
autofallthrough=yes

[default]

[telefonos]
include => internos
include => chuquisaca
include => tarija

[internos]
exten => _2XXX,1,NoOp()
exten => _2XXX,n,Dial(SIP/${EXTEN},30)
exten => _2XXX,n,Playback(vm-goodbye)
exten => _2XXX,n,Hangup()

[chuquisaca]
exten => _1XXX,1,NoOp()
exten => _1XXX,n,Dial(IAX2/chuquisaca/${EXTEN})
exten => _1XXX,n,Hangup()

[tarija]
exten => _3XXX,1,NoOp()
exten => _3XXX,n,Dial(IAX2/tarija/${EXTEN})
exten => _3XXX,n,Hangup()

[llamadas_entrantes]
include => internos



;iax.conf tarija
[general]
autokill=yes
language=es
register => tarija:welcome@192.168.2.253 ;chuquisaca
register => tarija:welcome@192.168.2.252 ;potosi

[chuquisaca]
type=friend
host=dynamic
trunk=yes
secret=welcome
context=llamadas_entrantes
deny=0.0.0.0/0.0.0.0
permit=192.168.2.253/255.255.255.255

[potosi]
type=friend
host=dynamic
trunk=yes
secret=welcome
context=llamadas_entrantes
deny=0.0.0.0/0.0.0.0
permit=192.168.2.252/255.255.255.255

[3001]
type=friend
host=dynamic
context=telefonos
secret=123

;sip.conf tarija
[general]
language=es

[3101]
type=friend
host=dynamic
context=telefonos
secret=123

;extension.conf iax tarija
[globals]

[general]
autofallthrough=yes

[default]

[telefonos]
include => internos
include => chuquisaca
include => potosi

[internos]
exten => _3XXX,1,NoOp()
exten => _3XXX,n,Dial(SIP/${EXTEN},30)
exten => _3XXX,n,Playback(vm-goodbye)
exten => _3XXX,n,Hangup()

[chuquisaca]
exten => _1XXX,1,NoOp()
exten => _1XXX,n,Dial(IAX2/chuquisaca/${EXTEN})
exten => _1XXX,n,Hangup()

[potosi]
exten => _2XXX,1,NoOp()
exten => _2XXX,n,Dial(IAX2/potosi/${EXTEN})
exten => _2XXX,n,Hangup()

[llamadas_entrantes]
include => internos


Aun tengo una duda con respecto a la contreseña de la funcion register, me funciona bien cuando pongo la misma contraseña todos incluyendo los contextos, pero si cambio ya no puedo hacer llamadas entre ellos. yo entiendo que al ServidorA debo definirlo en el ServidorB y viceversa. bueno algun dia encontrare la respuesta.
aqui estoy uniendo mis asterisk todos contra todos, a modo de una red Mesh. creo que tb se puede unir usando Dundi.

otra cosa importante que debo implementar son las conferencias, esto parece simple pero me costó unas dos semanas hacer funcionar, la conferencia solo debe estar en un solo servidor, en este caso Chuquisaca, y los otros dos redireccionan sus llamadas a ese servidor para entrar a la sala de conferencias. Para esto tengo un placa TDM400P para que haga de temporizador, aunque dice que tb se puede usar el driver ztdummy, cualquiera de estos es indispensable para hacer conferencias.

esito seria por ahora.
hasta pronto....

saludos
Jhonvels

2 comentarios:

Unknown dijo...

MUCHAS GRACIAS

Me resolviste muchas dudas :)

Leandro Peñalver dijo...

Estoy armando algo asi, voy a probar esta solución y te comento si me funciona.