Conectando dos Asterisk mediante el protocolo SIP

De Laboratorio de VoIP

En esta sección realizaremos un enlace troncal entre dos servidores Asterisk utilizando para ello el protocolo SIP. Supondremos que ambos servers se encuentran geográficamente separados, uno en la Ciudad de Monterrey y el otro en la Cd. de México, para darle un poco de realismo al ejercicio.

  SIPphone(5XXX)<--->Asterisk_MTY<---------(Troncal SIP)-------->Asterisk_DF<--->SIPphone(3XXX)

Para tal propósito editaremos sólo un par de archivos de configuración Asterisk. Nos referimos a los archivos sip.conf y extensions.conf.

NOTA: Se considera que se ha configurado al menos una extension SIP en cada servidor Asterisk. De no ser así, refiérase a las secciones anteriores para aprender como dar de alta una extensión SIP.

Tabla de contenidos

Editando el archivo sip.conf

El archivo sip.conf nos sirve para configuirar las características de los canales Asterisk que utilicen este protocolo. Deberemos primero definir una extensión de prueba para cada caso y, en segundo lugar, una extensión especial que nos servirá de enlace troncal. Aquí es donde le daremos características de troncal a nuestro canal.

Asterisk Mty

En el caso del servidor

  [general]
  ;; Cadena de registro SIP
  ;; register => user[:secret[:authuser]]@host[:port][/extension]
  register => mx-mty:passwd@IP_host_DF/mx-df
  
  ;; Definición de extensión que servirá como troncal SIP
  [mx-df]
  type=friend
  secret=passwd
  context=df-incoming
  host=dynamic
  disallow=all
  allow=alaw
  allow=alaw
  allow=gsm
  
  ;; Extensión de prueba
  [5001]
  type=friend
  secret=5001
  context=local-sip
  callerid="Nayeli" <5001>
  host=dynamic
  dtmfmode=rfc2833
  nat=no
  careinvite=no
  disallow=all
  allow=ulaw
  allow=alaw
  allow=gsm

Asterisk DF

  [general]
  ;; Cadena de registro SIP
  ;; register => user[:secret[:authuser]]@host[:port][/extension]
  register => mx-df:passwd@IP_host_MTY/mx-mty
  
  ;; Definición de extensión que servirá como troncal SIP
  [mx-mty]
  type=friend
  secret=passwd
  context=mty-incoming
  host=dynamic
  disallow=all
  allow=alaw
  allow=alaw
  allow=gsm
  
  ;; Extensión de prueba
  [3001]
  type=friend
  secret=3001
  context=local-sip
  callerid="test-trunk" <3001>
  host=dynamic
  dtmfmode=rfc2833
  nat=no
  careinvite=no
  disallow=all
  allow=ulaw
  allow=alaw
  allow=gsm

Editando el archivo extensions.conf

Ya hemos definido la troncal en ambos extremos, ahora es necesario decirle a Asterisk cuando hará uso de ella, es decir, configurar nuestro plan de marcación en el archivo extensions.conf.

NOTA: El uso de prefijos para toma de troncal es práctica común. Es en la regla de marcado en donde podemos apreciar como se usan.

Asterisk Mty

  ....
  
  [df-incoming]
  
  ;; Se incluyen todas las extensiones dentro del contexto local-sip
  include => local-sip
  
  [local-sip]
  
  ;; Incluyendo este contexto, todas las extensiones dentro de local-sip
  ;; podrán hacer uso de la troncal SIP
  include => df-outgoing
  
  exten => _5XXX,1,Dial(SIP/${EXTEN},10,tT)
  exten => _5XXX,2,Hangup()
  
  [df-outgoing]
  
  ;; Regla de marcado para hacer llamadas salientes hacia DF por la troncal SIP
  ;; Note el uso de prefijos.
  exten => _63XXX,1,NoOp(Llamada SIP saliente hacia Oficinas DF)
  exten => _63XXX,n,Dial(SIP/mx-df/${EXTEN:1})
  exten => _63XXX,n,Hangup()
  ....

Asterisk DF

  ....
  [mty-incoming]
  
  ;; Se incluyen todas las extensiones dentro del contexto local-sip   
  include => local-sip
  
  [local-sip]
  
  ;; Incluyendo este contexto, todas las extensiones dentro de local-sip
  ;; podrán hacer uso de la troncal SIP
  include => mty-outgoing
  
  exten => _3XXX,1,Dial(SIP/${EXTEN},10,Ttr)
  exten => _3XXX,n,Hangup
  
  [mty-outgoing]
  
  ;; Regla de marcado para hacer llamadas salientes hacia Mty por la troncal SIP   
  ;; Note el uso de prefijos.
  exten => _75XXX,1,NoOp(Llamada SIP saliente hacia Oficinas Mty)
  exten => _75XXX,n,Dial(SIP/mx-mty/${EXTEN:1})
  exten => _75XXX,n,Hangup()
  ....

¡¡Listo!!

Pruebas

Realizamos llamadas entre los extremos y el resultado fue el siguiente:

Llamada desde Mty hacia DF

Del lado de Mty

  console_mty*CLI> dial 63001@df-outgoing
      -- Executing [63001@df-outgoing:1] NoOp("Console/dsp", "Llamada SIP saliente hacia Oficinas DF") in new stack
      -- Executing [63001@df-outgoing:2] Dial("Console/dsp", "SIP/mx-df/3001") in new stack
      -- Called mx-df/3001
      -- SIP/mx-df-08b81fd8 is ringing
      -- SIP/mx-df-08b81fd8 answered Console/dsp
   << Console call has been answered >> 
    == Spawn extension (df-outgoing, 63001, 2) exited non-zero on 'Console/dsp'
   << Hangup on console >> 

Del lado del DF

  console_df*CLI>
      -- Executing [3001@mty-incoming:1] Dial("SIP/mx-df-b770a470", "SIP/3001|10|Ttr") in new stack
      -- Called 3001
      -- SIP/3001-098fe4d0 is ringing
      -- SIP/3001-098fe4d0 answered SIP/mx-df-b770a470
    == Spawn extension (mty-incoming, 3001, 1) exited non-zero on 'SIP/mx-df-b770a470'

Llamada desde DF hacia Mty

Del lado del DF:

  console_df*CLI>
      -- Executing [75001@local-sip:1] NoOp("SIP/3001-b770a470", "Llamada SIP saliente hacia Oficinas Mty") in new stack
      -- Executing [75001@local-sip:2] Dial("SIP/3001-b770a470", "SIP/mx-mty/5001") in new stack
      -- Called mx-mty/5001
      -- SIP/mx-mty-098fe4d0 is ringing
    == Spawn extension (local-sip, 75001, 2) exited non-zero on 'SIP/3001-b770a470'

Del lado de Mty

  console_mty*CLI> 
      -- Executing [5001@df-incoming:1] Dial("SIP/mx-mty-b751f628", "SIP/5001|10|tT") in new stack
      -- Called 5001 
      -- SIP/5001-08b81fd8 is ringing
    == Spawn extension (df-incoming, 5001, 1) exited non-zero on 'SIP/mx-mty-b751f628'

¡¡Listo!!

--g!0 13:57 2 jul 2008 (CDT)

Herramientas personales