Está en la página 1de 16

FUNDAMENTOS TEÓRICOS

Servicio VoIP con Asterisk


1. Asterisk:
Asterisk es el mayor proyecto de software libre diseñado para la integración y unificación de los
sistemas de comunicaciones conocidos. Originalmente fue concebido como una plataforma para la
generación de un sistema PBX, pero con el tiempo ha ido evolucionando a otro tipo de usos, como
Pasarelas VoIP, sistemas integrales para call-centers, salas de conferencias, buzones de voz, y todo
tipo de aplicaciones que tengan relación con las comunicaciones en tiempo real [1].

2. Códec de audio:
Un códec es un dispositivo o software capaz de codificar o decodificar un flujo de datos digital o
una señal [2]. En VoIP, la señal de audio antes de ser transmitida a una red IP debe ser digitalizada,
comprimida y codificada, y para esto se utilizan los códec; y cuando se recibe la señal digital
también se utilizarán los códec para recuperar la señal de audio.
Tabla 1: Codec VoIp [3][4]

Codec Codec Bitrate Bandwidth Ethernet


G.711 64 Kbps 87.2 Kbps
G.729 8 Kbps 31.2 Kbps
GSM 13.2 Kbps 28,63 Kbps
G.723.1 6.3Kbps 21.9 Kbps

3. Instalación y ejecución del Asterisk en Ubuntu.


Para instalar el Asterisk.

# apt-get update
# apt-get install asterisk -y

Otra posibilidad, es instalar el Asterisk compilando desde sus fuentes (source code), los siguientes
pasos muestra esta alternativa.

# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-
1.8.10.1.tar.gz
# tar -zxvf asterisk-1.8.10.1.tar.gz
# cd asterisk-1.8.10.1/
# ./configure
# make menuconfig
# make
# make install

River 4
Redes de Computadoras – INF238 2018-2

Una vez instalado el Asterisk, por defecto ya estará ejecutándose; pero podemos verificar esto con:

# ps aux | grep asterisk

Si el servicio no se encuentra ejecutándose, podemos ejecutarlo de la siguiente manera:

# service asterisk start o # /etc/init.d/asterisk start

Los archivos de configuración se encuentran en la carpeta /etc/asterisk.

# ls /etc/asterisk/
… iax.conf … extensions.conf … sip.conf …

Cuando se crean, o se editen los archivos de configuración del Asterisk, recuerde mantener la
propiedad de los archivos; estos pertenecen al usuario asterisk y grupo asterisk. Esto se observa
haciendo.

# ls –l /etc/asterisk/

4. Línea de comandos (CLI) del Asterisk


Si el Asterisk se está ejecutándose podemos ingresar a su entorno de comandos. Asterisk dispone
de una interface de comandos (CLI). Para acceder a está interface se debe ejecutar el comando

# asterisk -vvvvr

Cada vez que se cambie los archivos sip.conf, extensions.conf o iax.conf, se debe actualizar en el
Asterisk, para esto se puede ingresar al CLI y se ejecutar:

CLI> reload

ó se puede reiniciar el Asterisk

# /etc/init.d/asterisk restart

Existen muchos comandos que se pueden ejecutar en el CLI para poder observar el
comportamiento de las llamadas telefónicas; como sip show peers, sip show channels, iax2 show
channels. Cada uno de estos comandos se puede listar ejecutando help.

CLI> help

5. Configuración de un servidor Asterisk con dispositivos SIP.


En la siguiente imagen se muestra un esquema de red donde se ha implementado el servicio de
telefonía IP utilizando Asterisk y Softphones.

River 5
Redes de Computadoras – INF238 2018-2

sip.conf
extensions.conf
Softphone Softphone Asterisk 1500
1510
1520 10.11.11.10/24
10.11.11.12/24 10.11.11.11/24

Switch

Imagen 1: Esquema de una red de Telefonía IP.

Para tener una comunicación telefónica entre dispositivos SIP se necesita configurar básicamente
dos archivos sip.conf y extensions.conf.

En sip.conf se especifican las características de los dispositivos SIP para su registro. Y en extensions.conf
se especifica la manera de cómo se realizará la comunicación entre los dispositivos registrados.

Abajo se muestra los archivos de configuración sip.conf del Servidor Asterisk 1500 mostrado en la
imagen anterior. Dentro de este archivo se observa la parte llamada [general] donde se especifica
parámetros que afectarán a cada uno de los siguientes dispositivos SIP. Se observa que el puerto
para SIP es el 5060; además el códec prioritario para ser usado por todos los dispositivos SIP es el
ulaw (G711u) porque está primero en la lista, como segunda prioridad está el códec alaw (G711a).
Después se especifica a cada uno de los dispositivos SIP; por ejemplo [1510] representa a un
dispositivo SIP. Los parámetros principales para configurar un dispositivos SIP, son el usuario
(username) y su clave (secret), además se especifica el contexto para las llamadas entrantes para
este dispositivo, en este ejemplo es central (conext=central); este contexto deberá existir en
extensions.conf para resolver las llamadas entrantes a este dispositivo.
Los parámetros que se especifican para cada dispositivo SIP en sip.conf deberán ser los mismos cuando
se configure el dispositivo SIP. Si en ambos se mantiene la misma configuración entonces el dispositivo
SIP podrá ser registrado en el Asterisk. Los comentarios en una línea empiezan con el punto y coma (;).

Tabla 1: sip.conf del servidor 1500


root@C060708:~# cat /etc/asterisk/sip.conf
[general]
;
bndport=5060
disallow=all
allow=ulaw
allow=alaw
allow=gsm
allow=g729
allow=g723
canreinvite=no
;
;
[1510]
type=friend
host=dynamic
language=es
context=central
secret=passwd
username=1510
callerid="User 1510" <1510>

River 6
Redes de Computadoras – INF238 2018-2

dtmfmode=rfc2833
qualify=yes
;
[1520]
type=friend
host=dynamic
language=es
context=central
secret=passwd
username=1520
callerid="User 1520" <1520>
dtmfmode=rfc2833
qualify=yes
;

Abajo se muestra los archivos de configuración extensions.conf del Servidor Asterisk 1500. Se
observa la parte denominada Macros (estas funcionan como las funciones creadas en Lenguaje C).
Los comentarios en una línea empiezan con el punto y coma (;).

Tabla 2: extensions.conf del servidor 1500


root@C060708:~# cat /etc/asterisk/extensions.conf
[general]
;
static=yes
writeprotect=no
autofallthrough=no
clearglobalvars=no
;priorityjumping=yes
;
;================================================================
; variables globales
;
[globals]
;
;================================================================
; macros
;
[macro-dial-local]
exten => s,1,Dial(${ARG1}/${ARG2},26)
exten => s,2,Hangup
exten => s,102,Hangup
;
;================================================================
; contexto principal
;
[central]
;
; llamadas area local
exten => 1510,1,Macro(dial-local,SIP,${EXTEN})
exten => 1520,1,Macro(dial-local,SIP,${EXTEN})
;

En este archivo se observa el contexto [central] especificado en sip.conf. Cuando el 1510 desea llamar al
1520, en extensions.conf buscará al 1520; en este caso se observa exten => 1520,1,Macro(dial-
local,SIP,${EXTEN}), por tanto se ejecutará esta línea; se ejecuta la macro dial-local que contiene como
parámetros SIP y la variable ${EXTEN} que representa a la extensión 1520. En la definición de la

River 7
Redes de Computadoras – INF238 2018-2

macro dial-local se observa el comando dial con los argumentos ${ARG1} y ${ARG2} que representa
respectivamente al SIP y al número telefónico con el que se desea comunicar.

El comando dial es utilizado en extensions.conf para permitir realizar la comunicación telefónica


entre los dispositivos registrados en el Asterisk. En la siguiente imagen se muestra un ejemplo del
uso del comando dial.

Contexto

Extensión Comando Canal

[central]
exten => 1510,1,Dial(SIP/${EXTEN},26)

Prioridad Tiempo de
timbrado
Imagen 2: Comando Dial
Donde:
Contexto: Encierra un plan de discado.
Extensión y Prioridad: Es un grupo de instrucciones agrupadas por un mismo identificador
(Extensión); cada una de estas instrucciones están ordenados de acuerdo a una prioridad. Estas
instrucciones se ejecutan comúnmente cuando ingresa una llamada que ha marcado la
identificación de la extensión. Comando: Ejecutan una respectiva función. Dial por ejemplo
establecerá una comunicación entre el llamante con el Canal que tiene configurado. La variable
${EXTEN} que representa a la Extensión (en este caso 1510) que aparece en la línea del comando.

Una vez configurado los archivos, de actualizar los cambios, de configurar los dispositivos
telefónicos SIP, y de verificar el registro de los dispositivos SIP en el Asterisk, ya se puede establecer
una comunicación telefónica.

6. Verificación del registro de los dispositivos SIP y de las


llamadas telefónicas.
Ingresando al CLI del Asterisk, podemos verificar que los dispositivos SIP estén registrados en el
Asterisk. En el siguiente resultado se observa que sólo está registrado el dispositivo 1510. Hasta
que no se registre el otro, este no podrá realizar llamadas telefónicas.

CLI> sip show peers


Name/username Host Dyn Forcerport ACL Port Status Description
1510/1510 10.11.11.11 D A 43330 OK (3 ms)
1520/1520 (Unspecified) D a 0 UNKNOWN
2 sip peers [Monitored: 1 online, 1 offline Unmonitored: 0 online, 0
offline] CLI>

Cuando dos dispositivos SIP están estableciendo una comunicación telefónica se puede observar
parámetros como el códec utilizando el comando sip show channels. En el siguiente resultado se

River 8
Redes de Computadoras – INF238 2018-2

observa que está estableciendo una comunicación SIP entre 1520 y 1510 y ambos están hablando
en ulaw.

CLI> sip show channels


Peer User/ANR Call ID Format Hold Last Message Expiry Peer
10.11.11.12 1520 64951f0d18b8da8 (ulaw) No Tx: ACK 1520
10.11.11.11 1510 75128f6ec86b3a9 (ulaw) No Tx: ACK 1510
2 active SIP dialogs
CLI>

7. Configuración para la interconexión entre Asterisk


utilizando IAX.
Con IAX podemos crear una troncal telefónica para que dispositivos SIP registrados en cada
servidor Asterisk pueden comunicarse.

sip.conf
extensions.conf
iax.conf

Softphone Softphone Asterisk 1500


1520 1510
10.11.11.10/24
10.11.11.12/24 10.11.11.11/24

Switch

sip.conf
extensions.conf
iax.conf
Softphone Softphone Asterisk 1600
1620 1610
10.11.11.20/24
10.11.11.22/24 10.11.11.21/24

Imagen 3: Interconexión entre Asterisk.

En el esquema de arriba se muestra una red con dos servidores Asterisk. El servidor Asterisk 1500
registra a los dispositivos 1510 y 1510 y el servidor Asterisk 1600 registra a los dispositivos 1610 y
1620. Para establecer la comunicación entre estos dispositivos registrados en distintos Asterisk se
utiliza el archivo iax.conf si se desea utilizar IAX como medio de interconexión.

En este ejemplo, y el laboratorio, el archivo iax.conf será el mismo para ambos servidores; porque
actuará como usuario y todos se comunican utilizando un mismo identificador que es iaxusuario.
Los comentarios en una línea empiezan con el punto y coma (;).

Tabla 3: iax.conf del servidor 1500 y del 1600


root@C060708:~# cat /etc/asterisk/iax.conf
[general]
;
bindport=4569
language=es
disallow=all
allow=ulaw

River 9
Redes de Computadoras – INF238 2018-2

allow=alaw
allow=gsm
allow=g729
allow=g723
;
[iaxusuario]
type=user
username=iaxusuario
secret=passwd
context=central
requirecalltoken=no
;

La configuración del archivo iax.conf es similar al sip.conf. En este archivo se observa que la troncal
IAX utilizará el códec ulaw porque esta primero en la lista; además el puerto por defecto que usa
IAX es 4569. Y también existe un usuario IAX identificado como iaxusuario con clave passwd. En
extensions.conf se adicionarán comandos para establecer la comunicación entre Asterisks. Cuando
el Asterisk 1600 desea establecer una comunicación IAX con el Asterisk 1500; el 1600 deberá
realizar la petición con el usuario iaxusuario y contraseña passwd con el servidor 1500. El Asterisk
1500 comparará la petición con archivo su iax.conf, si los parámetros coinciden entonces el 1500
dejará pasara las peticiones del 1600 al contexto central.

Cuando el dispositivo SIP 1510 desea establecer una comunicación telefónica con el 1610; desde el
1510 se marca 1610. Este va redirigido al contexto central del servidor 1500 en extensions.conf, ahí
deberá ubicar al 1610; y se observa que está contenido en exten => _16XX,1,Macro(dial-
remoto,10.11.11.20,${EXTEN}) y se ejecutará la macro dial-remoto, que contiene como parámetros la IP
del servidor remoto y el número del dispositivo con el que se desea comunicar en la variable ${EXTEN};
en la definición de la macro dial-remoto se observa que el comando dial contiene el iaxusuario:passwd,
y las variables ${ARG1} y ${ARG2} que respectivamente representan la IP del servidor y el numero con el
que se desea comunicarse. Al ejecutarse este comando se estable una comunicación con el Asterisk
1600, este servidor comparará el iaxusuario:passwd en su respectivo archivo iax.conf, si los parámetros
coinciden dejará pasar al 1510 al contexto central, ahí deberá encontrar al 1610 para establecer la
comunicación.

Tabla 4: extensión.conf del servidor 1500


;================================================================
; macros
;
[macro-dial-local]
exten => s,1,Dial(${ARG1}/${ARG2},26)
exten => s,2,Hangup
exten => s,102,Hangup
;
[macro-dial-remoto]
exten => s,1,Dial(IAX2/iaxusuario:passwd@${ARG1}/${ARG2},28)
exten => s,2,Hangup
exten => s,102,Hangup
;
;================================================================
; contexto principal
;
[central]
;
; llamadas area local
exten => 1510,1,Macro(dial-local,SIP,${EXTEN})
exten => 1520,1,Macro(dial-local,SIP,${EXTEN})
;
; llamadas a areas remotas
;exten => _15XX,1,Macro(dial-remoto,10.11.11.10,${EXTEN})

River 10
Redes de Computadoras – INF238 2018-2

exten => _16XX,1,Macro(dial-remoto,10.11.11.20,${EXTEN})


;

Tabla 5: extensión.conf del servidor 1600


;================================================================
; macros
;
[macro-dial-local]
exten => s,1,Dial(${ARG1}/${ARG2},26)
exten => s,2,Hangup
exten => s,102,Hangup
;
[macro-dial-remoto]
exten => s,1,Dial(IAX2/iaxusuario:passwd@${ARG1}/${ARG2},28)
exten => s,2,Hangup
exten => s,102,Hangup
;
;================================================================
; contexto principal
;
[central]
;
; llamadas area local
exten => 1610,1,Macro(dial-local,SIP,${EXTEN})
exten => 1620,1,Macro(dial-local,SIP,${EXTEN})
;
; llamadas a areas remotas
exten => _15XX,1,Macro(dial-remoto,10.11.11.10,${EXTEN})
;exten => _16XX,1,Macro(dial-remoto,10.11.11.20,${EXTEN})
;

8. Verificación de las llamadas telefónicas a través de


una troncal IAX.
Ingresando al CLI del Asterisk, podemos verificar el establecimiento de una comunicación IAX. En el
siguiente resultado se observa que el servidor 1500 está estableciendo una comunicación IAX con el
servidor Asterisk con la IP 10.11.11.20 y se está utilizando el codec ulaw.

CLI> iax2 show channels


Channel Peer Username ID (Lo/Rem) Seq (Tx/Rx) Lag Jitter
JitBuf Format FirstMsg LastMsg
IAX2/10.11.11.20:456 10.11.11.20 iaxusuario 05754/03082 00068/00069 00040ms -0001ms
0000ms ulaw Tx:NEW Rx:ACK
1 active IAX channel
CLI>

9. Flujo de audio y señalización en Asterisk.


Abajo se muestra un esquema que muestra cómo se comportan los flujos de audio y de señalización. El
flujo se señalización SIP pasará siempre por el servidor Asterisk si se usa la opción canreinvite=no en
sip.conf; con esta opción el flujo de audio entre los dispositivos SIP pasará a través del Asterisk; por
defecto el audio pasa sólo entre los dispositivos SIP. En IAX el flujo de señalización y el de audio

River 11
Redes de Computadoras – INF238 2018-2

pasarán por el mismo flujo, esto es útil si se desea travesar NAT sin muchos problemas comparados
con las troncales SIP.

IAX/Audio
SIP SIP

Audio Asterisk Asterisk Audio


Teléfono Teléfono

Audio Audio

SIP SIP
Teléfono Teléfono
Imagen 4: Flujo de audio y de señalización en una comunicación telefónica Asterisk.

10. Uso del jnettop y cálculo de flujo de voz.


Se puede utilizar la aplicación jnettop en Ubuntu para poder observar la cantidad de kbps que
consumen las aplicaciones de red; en este caso se utilizará para observar el consumo de una
comunicación telefónica.

Para instalar:
# apt-get install jnettop

Para utilizar la aplicación en un determinado interfaces (eth0) que usa el servidor para conectarse
con la red.
# jnettop -i eth0

En la siguiente imagen se muestra un ejemplo del resultado del jnettop en un instante. Podemos
detener la visualización presionado el punto (.) y regresamos a seguir observando presionando de
nuevo el punto.

En la primeria línea se observa que hay comunicación entre la 10.11.11.10 y 10.11.11.11; podemos
suponer que es audio porque se está usando UDP y usa puertos RTP que está en el rango
configurado por defecto en el Asterisk; lo mismo en la segunda línea. En las últimas dos líneas se
observa comunicación en el puerto 5060, esto correspondería por defecto a la señalización SIP.
En la primera línea se observa que existe un consume de 10.4KBps (10.4*8=83.2Kbps). Como el
Asterisk y en los dispositivos SIP se ha configurado para utilizar el códec G711, entonces este
consumo corresponde al flujo de voz con este codec. En la última línea se observa un consume de
0Bps (0*8=1.24Kbs), que corresponde netamente a la señalización SIP; realmente no es cero, si se
sigue observado el consumo de la señalización SIP puede llegar a unos 155Bps (155*8=1.24Kbs).

River 12
Redes de Computadoras – INF238 2018-2

Imagen 5: Visualización de los Kbps que consume la comunicación telefónica SIP utilizando jnettop.

11. Configuración de Softphone:


Zoiper:
Se utilizará el Sofphone Zopier de la versión Free para Windows o Linux (http://www.zoiper.com/).

Imagen 6: Vista inicial del Zopier

River 13
Redes de Computadoras – INF238 2018-2

Una vez instalado se creará una nueva cuenta SIP. Ingresar a “Settings” y después a “Create a New
Account”. Seleccionar SIP y después completar0 el Usuario SIP, la contraseña del usuario, y la
dirección IP o nombre del Servidor Asterisk.

Imagen 7: Creación de una SIP en el Zoiper

En siguiente ventana hacemos un check en “Skip auto-detection” para completar la configuración


después.

Ahora ingresar a “Settings” y después a “Preferences”. Y sobre la cuenta creada seleccionar la


pestaña de “Codec”. Se recomienda usar un códec a la vez; es decir en “Selected codecs” dejar sólo
un códec, y este será utilizado en la comunicación telefónica.

Imagen 8: Selección de una códec de audio en el Zoiper

River 14
Redes de Computadoras – INF238 2018-2

Si se usa un dispositivo de audio USB, en la pestaña “Audio”, en “Device” dejar las opciones como
se muestra en la imagen siguiente y guardar los cambios.

Imagen 9: Audio devices options

Además en la pestaña “Advanced” en Network deshabilitar la opción de “STUN”, guardar los cambios.

Imagen 10: Network preferences

River 15
Redes de Computadoras – INF238 2018-2

Regresamos a la pestaña “General” para poder registrar; y si esta ya está registrado podemos hacer
“Unregister” y después “Register”.

Imagen 11: Selección del códec u-law en la cuenta SIP 1520, en el Zoiper.

Si se tiene un dispositivo externos de audio, como un HeadPhone no se olvide de comprobar que el


audio y el micro estén funcionando correctamente; para esto se puede ingresar a “Settings” y
seleccionar “Audio Wizard” y seguir las indicaciones para elegir correctamente la entrada y salida
del audio y del micro.

Imagen 12 Prueba del audio para el uso en el Zoiper.

River 16
Redes de Computadoras – INF238 2018-2

3CX Softphone:

1. En la parte superior se ingresa a “New


account” y aparecerá la siguiente ventana.

2. Creamos una nueva cuenta, con “New”.

3. En la ventana siguiente se ingresa los


parámetros de configuración del cliente
SIP. Guardamos la configuración.

4. En la parte inferior esta la opción de


“Advanced settings”, ahí se priorizará el
codec a usar (la primera opción es el
codec ubicado en la parte más arriba).
Guardamos la configuración. Si se desea
usar un códec en particular asegúrese
que en sip.conf esté como primera
opción el códec con el que se desea
trabajar o dejarlo como única opción.

River 17
Redes de Computadoras – INF238 2018-2

5. Ahora la lista de cuentas SIP aparecerá de


la siguiente forma.

6. Después de configurar, se debe esperar a


que se registre. Si ya está registrado a
aparecerá en la parte central “On Hook”.

Zopier en Smartphone:
En la aplicación Zoiper se debe crear una cuenta. En “Ajustes”, ingresamos a “Cuentas” y se agrega
una cuenta SIP de forma manual. En la siguiente ventana están los parámetros de configuración
como el usuario, contraseña, códec (se habilita o deshabilita) y otros; se salva la configuración y se
espera su registro. En la pantalla “Discador” se podrá observar si se ha registrado o no.

River 18
Redes de Computadoras – INF238 2018-2

Referencias:
[1]. https://www.wikiasterisk.com/index.php/Introducci%C3%B3n
[2]. https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/voice/cube/configuration/cube-
book/cube-codec-basic.pdf
[3]. https://www.cisco.com/c/en/us/support/docs/voice/voice-quality/7934-bwidth-consume.html
[4]. https://www.voztovoice.org/?q=node/562
[5]. https://www.voip-info.org/
[6]. https://www.voip-info.org/asterisk-documentation-of-application-commands

River 19

También podría gustarte