Professional Documents
Culture Documents
INTRODUCCION A LA TELEFONIA IP Y
ASTERISK
Como hemos comentado con anterioridad en este mismo documento uno de los
objetivos del presente proyecto es la virtualización de servicios de telefonía IP (consolidación
de servidores centralita VoIP). De todas las soluciones de telefonía IP existentes en la actualidad
una destaca sobre el resto por su excelente funcionalidad y eficiencia: Asterisk. Asterisk nació
de la necesidad de disponer de un sistema telefónico software de bajo coste, lo que supuso una
revolución en el mundo de las comunicaciones, hasta ese momento basados en sistemas
hardware, menos flexibles y escalables.
1 La telefonía IP
La telefonía IP (Voice over Internet Protocol), nacida de la necesidad y la utilidad de
hacer uso de una sola red para la transmisión de datos en lo que a telefonía se refiere, es la
comunicación que viaja a través de la red, tanto de audio como de video, permitiendo un
ahorro elevado tanto en costes de comunicación como en costes de mantenimiento de las
infraestructuras de telefonía, teniendo al mismo tiempo grandes posibilidades de
escalabilidad, portabilidad, e integración con las redes locales internas y recursos de las
empresas e Internet.
Como vamos a ver a continuación, la mayoría de las ventajas de las que nos podemos
beneficiar al usar telefonía IP nacen del hecho de que sea una implementación software de
centralitas de telefonía. El abanico de características y posibilidades es muy amplio, lo que
unido al bajo coste hace que disponga de una gran atención e interés.
La inquietud por la tecnología que hoy es conocida mundialmente como VoIP comenzó
durante la década de los noventa, aunque también existen publicaciones anteriores, cuando
investigadores de varias instituciones se interesaron en este tipo de comunicaciones, en la
transmisión de datos de audio y video sobre redes IP. A grandes rasgos la comunicación que
tiene lugar en VoIP consiste en la fragmentación de datos de audio y vídeo, su transmisión, y la
unión de esos fragmentos en destino.
Desde la aparición en el año 1995 del primer teléfono software la evolución que ha
vivido esta tecnología ha tenido algunos altibajos. Al principio, sobre todo porque las redes de
transmisión de datos no disponían de un ancho de banda suficiente, no tuvo ningún éxito a nivel
comercial. Fue al final de esta década de los noventa cuando al posibilitar el uso de teléfonos
tradicionales en entornos VoIP un gran número de empresas se lanzaron a la comercialización
de productos y servicios VoIP. El porcentaje de uso de la VoIP en términos de tráfico de voz
aumentaba paulatinamente, en parte impulsado por la creación de las primeras plataformas
empresariales para trabajar con VoIP desarrolladas por una empresa como Cisco Systems. Todo
ello, unido a la gran mejora experimentada en las redes de transmisión de datos y la eclosión de
Internet, garantizaba los requisitos fundamentales en cuanto a calidad y fiabilidad de las
comunicaciones de voz.
• Reducción de costes: los costes que tendremos que asumir usando VoIP son
realmente bajos fundamentalmente debido al uso de Internet como medio de
transporte de las comunicaciones. El pago de llamadas quedará reducido al pago de
la conexión a Internet de la que dispongamos. Los costes asociados también a la
creación, desarrollo y mantenimiento de la infraestructura telefónica de la empresa
se verán disminuidos de manera importante. Además, también podemos disfrutar
del uso de teléfonos software en lugar de hardware, más caros.
• Integración con redes locales y recursos existentes e Internet: VoIP trabaja sobre
las redes TCP/IP, luego su integración con cualquier red local de una empres u
organización es sencilla. Ello aporta beneficios considerables al eliminar las redes
telefónicas tradicionales: no se necesita extender la red telefónica de la empresa al
disponer ya de conexiones de red Ethernet.
• Flexibilidad: las soluciones VoIP en general ofrecen una gran flexibilidad tanto en
su configuración como en uso, sobre todo si hablamos de soluciones software libre
como Asterisk, en cuyo caso podremos configurar y adaptar la solución
perfectamente a las necesidades que tengamos y los objetivos que queramos
alcanzar. Por ejemplo, unas de las características más importantes de Asterisk es la
posibilidad que tenemos de crear y configurar un completo plan de marcado o dial
plan, pudiendo establecer complejas y eficientes configuraciones de la lógica a
seguir en el procesado de llamadas.
Los softphones o teléfonos software nos permiten hacer uso de la VoIP en dispositivos
como ordenadores y PDAs, tan sólo disponiendo de una tarjeta de audio y micrófono instalados.
Existen clientes VoIP para diferentes protocolos, aunque el más usado de todos es SIP (Session
Initiation Protocol), por ejemplo por los conocidos teléfonos software X-Lite y Zoiper (este
último también puede trabajar sobre IAX).
Para que la comunicación entre los diversos dispositivos sea realizada con éxito debe
mediar un determinado protocolo de señalización. Esto, en las redes analógicas para telefonía
tradicional consiste en una reserva del medio previa a la comunicación. En las redes de
conmutación de paquetes el objetivo es análogo, garantizando al mismo tiempo diversos
parámetros de calidad. Los protocolos de señalización más utilizados en conmutación de
paquetes son H323 y SIP; este último lo vemos en el siguiente apartado.
sip:usuario@direccionIP[:puerto]
El dominio es el nombre del proxy SIP que conoce la dirección de red para el terminal
del usuario (por ejemplo, ual.es es el dominio del usuario 100@ual.es, y conoce su
dirección de red).
Para poder establecer una comunicación mediante SIP es necesario que varios
elementos estén presentes en la misma:
UAC: User Agent Client. Realiza peticiones SIP y recibe respuestas SIP del UAS
(por ejemplo un teléfono IP).
UAS: User Agent Server. Acepta peticiones SIP realizadas por el UAC y envía a
éste las respuestas SIP correspondientes. Un teléfono IP también es un ejemplo de
UAS, ya que acepta peticiones de inicio de comunicación enviadas otro teléfono IP
que actúa como UAC. Un servidor Proxy SIP también es un UAS.
• Servidor Proxy. Se encarga de reenviar las peticiones SIP de un UAC a un UAS y las
respuestas SIP correspondientes del UAS al UAC. Para ello traduce las direcciones SIP
de usuario@dominio a usuario@direccionIP.
• Location Server. Acepta peticiones de registro por parte de los UAC. Guarda toda la
información relativa a la localización física del UAC para permitir así su rápida
• Back-to-back User Agent (B2BUA). Como dijimos anteriormente, es una entidad que
media para el procesamiento de peticiones SIP entrantes por lo que actúa como un UAS,
y responde a las mismas actuando como un UAC generando una nueva petición SIP a
enviar a partir de la petición SIP original.
Los mensajes SIP intercambiados durante una comunicación SIP entre los diferentes
elementos que acabamos de ver pueden ser categorizados en peticiones y respuestas. Existen
seis peticiones SIP diferentes: INVITE (para establecer una comunicación), ACK (para el
reconocimiento de la respuesta SIP 200 OK que acepta el inicio de una comunicación), BYE
(para finalizar la comunicación), CANCEL (permite cancelar una petición anterior en
progreso), OPTIONS (para que un UAC realice una solicitud de cierta información a un UAS) y
REGISTER (las envían los UAC a un servidor de localización para informar de la posición
actual). Cada petición tiene asociada una respuesta SIP enumerada con un código desde 100 a
699, agrupadas en grupos de respuestas:
Para terminar, y antes de comenzar a hablar de Asterisk, en la Figura 4.4 podemos ver
un ejemplo de establecimiento de comunicación mediante SIP entre dos terminales.
2 Asterisk
Asterisk es la primera PBX (Private Branch Exchange o central secundaria privada
automática-central telefónica) software ideada y desarrollada por Mark Spencer. Al tratarse de
software la flexibilidad y escalabilidad de esta solución es superior a la de las tradicionales
centralitas hardware. Asterisk, además, al confluir con el proyecto Zapata Telephony logró unir
la telefonía tradicional y la VoIP.
Uno de los puntos fuertes de Asterisk, además de ser software libre, es su arquitectura
modular. Esto permite que la aplicación sea completamente adaptable a las necesidades del
usuario que ampliar su funcionalidad sea sencillo. Es decir, podemos habilitar o deshabilitar
diferentes módulos si vamos a usarlos o no, pudiendo dedicar recursos a otras tareas si lo
requerimos, y añadir o programar nuevos módulos para Asterisk. Los módulos que Asterisk debe
cargar son especificados en el archivo modules.conf; para ver los que actualmente se han
cargado podemos ejecutar la orden siguiente en el intérprete en línea de comandos CLI de
Asterisk:
2.1 INSTALACION
Comenzamos por tanto con la instalación de las dependencias necesarias. Para ello
ejecutamos el comando apt-get install:
# wget
http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-
1.4.28.tar.gz
# ./configure
Después ejecutamos el comando make menuselect. Así podemos ver los módulos que
van a ser instalados y elegir los que queramos incluir, eliminar los que no, etc. Si vemos un
módulo marcado con una ‘X’ quiere decir que hace falta alguna librería adicional para poder
realizar su instalación (se nos indica cuál); instalada la librería faltante podemos volver a
ejecutar configure y el módulo aparecerá marcado con un ‘*’, por lo que podemos incluirlo sin
problemas:
# make menuselect
# make
# make install
# make config
# make samples
A la instalación del paquete asterisk sumamos la instalación del paquete que contiene
módulos adicionales asterisk-addons. Procedemos de manera similar; primero descargamos las
fuentes del paquete para la versión de Asterisk que hemos instalado anteriormente:
# wget
http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-
addons-1.4.10.tar.gz
# ./configure
# make
# make install
Para comprobar que hemos instalado Asterisk correctamente podemos por ejemplo
acceder a la interfaz de línea de comandos para la administración de Asterisk, CLI. Para ello
antes debemos iniciar el servicio ejecutando el script disponible en el directorio /etc/init.d/ tras
la instalación:
# /etc/init.d/asterisk start
# asterisk -rvvv
Asterisk 1.4.28, Copyright (C) 1999 - 2009 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show
warranty' for details.
This is free software, with components licensed under the GNU
General Public
License version 2 and other licenses; you are welcome to
redistribute it under
certain conditions. Type 'core show license' for details.
====================================================================
=====
== Parsing '/etc/asterisk/asterisk.conf': Found
== Parsing '/etc/asterisk/extconfig.conf': Found
Connected to Asterisk 1.4.28 currently running on deb1 (pid = 25485)
Verbosity was 0 and is now 3
deb1*CLI>
Una vez que Asterisk ha sido compilado e instalado una completa estructura de
directorios se encuentra disponible para dar soporte a las distintas partes y funcionalidades de
Asterisk. De entre todos los directorios disponibles destacan los siguientes:
Para la manipulación del estado del servicio podemos hacer uso como en la mayoría de
los casos del script instalado en el directorio /etc/init.d/ al hacer make config y que permite
iniciar de forma automática Asterisk:
# /etc/init.d/asterisk start
# /etc/init.d/asterisk stop
# /etc/init.d/asterisk restart
# asterisk
# asterisk –c
CLI>
# asterisk -rvvvd
CLI> quit
En este último apartado del capítulo vamos a ver los aspectos más fundamentales de la
configuración de Asterisk. Lo vamos a hacer de forma práctica, aprendiendo cómo es posible
configurar un dispositivo SIP (por ser considerado como un estándar para la VoIP y ser el que
vamos a utilizar en el desarrollo del proyecto, presentado antes en este mismo capítulo) así
como un dialplan o plan de marcado básico.
[general]
parametro1=valor1
parametro2=valor2
[nombre_de_usuario]
parametro3=valor3
[nombre_de_usuario]
parametro4=valor4
La sección general contiene valores para los parámetros que son aplicables a todos los
usuarios SIP de forma global. Por ejemplo, el puerto a usar en las comunicaciones (5060), las
interfaces en las que escuchar peticiones, etc. Después, en la sección dedicada para cada usuario
SIP, se definen los valores específicos para algunos de los parámetros. Existen tres tipos de
usuarios SIP:
Lo normal es que el tipo friend sea utilizado para los teléfonos y el tipo peer para los
proveedores de telefonía IP. Veamos un pequeño ejemplo para la definición de dos usuarios
introduciendo algunos parámetros y valores:
[general]
port=5060
bindaddr=0.0.0.0
[eugenio]
type=friend
username=eugenio
secret=123
context=desde-usuarios
host=dynamic
callerid= Eugenio <2000>
[carmen]
type=friend
username=carmen
secret=321
context=desde-usuarios
host=dynamic
callerid= Carmen <2001>
En la sección general:
En los usuarios:
Si existe algún error en los cambios introducidos se nos advierte de ello en este
momento. Como vimos en la tabla 4.1, si queremos consultar en cualquier momento un listado
(incluyendo nombres de usuario, host, dirección IP, puerto, estado, etc.) de los usuarios SIP
podemos ejecutar los comandos show sip users y show sip peers en el CLI.
[general]
[desde-usuarios]
exten => 2000,1,Dial(SIP/eugenio)
exten => 2001,1,Dial(SIP/carmen)
Así, gracias a este diminuto dialplan podemos llamar al usuario eugenio marcando la
extensión 2000, y al usuario carmen marcando la 2001. Para ello podemos configurar cualquier
teléfono IP o softphone que soporte SIP (X-Lite, Zoiper que es gratuito,…).
El número de una extensión puede ser especificado como tal como un patrón
cuando queremos hacer referencia a un grupo de extensiones. En la tabla 4.2
podemos ver los diferentes caracteres especiales que es posible utilizar para la
definición de patrones o variables en las extensiones (siempre deben empezar con
guión bajo _).
Las etiquetas son utilizadas para marcar e identificar una determinada prioridad de
una extensión para poder hacer referencia a ella mediante la aplicación Goto, por
ejemplo así:
…
exten => 1234,n,Goto(salto)
…
exten => 1234,n(salto),Noop(¡Prioridad con etiqueta salto!)
…