Articulos de interes

Implementando un servidor de Asterisk (método Julio Restrepo)

Última actualización: 18 Junio 2013
He realizado esta implementación hoy martes 18 de Junio de 2013 sobre el distribución Ubuntu Server 12.04 , encontrandome con las siguientes novedades:
  • La versión de Asterisk va en 11.4.0 ( wooowww, como avanza el tiempo !!!! )
  • El procedimiento de instalación de la versión 1.8.8.1 (documentada a continuación) es identico al de la versión 11.4.0 (qué maravilla! ) a excepción del siguiente mensaje durante la ejecución del comando ” ./configure  –disable-xmldoc ” :
checking for sqlite3_open in -lsqlite3… no
configure: WARNING: *** Asterisk now uses SQLite3 for the internal Asterisk database.
configure: WARNING: *** Please install the SQLite3 development package.
Esta advertencia logra resolverse satisfactoriamente instalando el paquete de desarrollo de SQLite3, mediante el siguiente comando:
aptitude install libsqlite3-dev
Que disfruten este artículo.
Este artículo tiene como propósito documentar una implementación de Asterisk como servidor de Voz IP, cimentando de la mejor manera posible los conocimientos esenciales desde los cuales el lector podrá continuar edificando por su cuenta su propia estructura mental sobre el tema.
Tal vez, no lo se… no exista en todo el planeta tierra mejor definición de Asterisk que la publicada en la WIKI de Asterisk… y que resumiré de la siguiente forma:
En redes de datos y telecomunicaciones, Asterisk es a la comunicación oral, lo que Apache es a la comunicación escrita.
Casi todas las personas asocian Asterisk con un sistema PBX gratuito… pero NO ES ASI.
Asterisk es simultáneamente, MUCHO MÁS que un PBX y a la vez MUCHO MENOS que un PBX.
Mucho más: Video-conferencias en tiempo real, Sistemas de Call Center, Gateways de VozIP, Servidores de Correo de Voz y muchísimas aplicaciones relacionadas con comunicaciones en tiempo real.
Mucho menos: Es la infraestructura, la tubería lógica, por la cual viajan las comunicaciones en tiempo real independientemente de su formato (audio, video, etc) , de su medio de transmisión (ethernet, wifi, fibra óptica), de su protocolo (IAX, SIP, etc) y de la aplicación de origen y de destino.
Lo que yo entiendo como Asterisk
Simplificando la cuestión, Asterisk es una aplicación instalable en sistemas operativos Linux y que emplea una conexión de red para comunicarse con otros dispositivos (teléfonos, computadores, etc) y servicios (bases de datos, aplicaciones, etc)
En este artículo se abordará el uso de Asterisk es un contexto sencillo: Intercomunicar teléfonos entre si. Sin embargo, siempre será posible enriquecer el proceso de comunicación integrando a Asterisk muchos servicios, tecnologías y dispositivos que permitan generar un mayor valor agregado a dicho proceso de comunicación, siempre de acuerdo a nuestro contexto y necesidades específicas.
Análogo vs Digital.
El transporte digital de la información es mucho más eficiente que el transporte analógico ya que, por ejemplo, usando un único medio de transmisión (como un único par trenzado de cobre) podremos transportar varios flujos de información digital de manera concurrente.
Asterisk procesa las llamadas telefónicas de manera digital y está orientado al uso de redes de dispositivos digitales, pero la humanidad está inmersa en infinidad de redes análogas y dispositivos análogos (aparatos de televisión, teléfonos móviles, teléfonos tradicionales, citófonos, etc).
FXO
Un ejemplo muy importante de red análoga es la PSTN (Public Switched Telephone Network), nuestra red clásica de telefonía que ha existido desde la decada de 1870. Si queremos conectar directamente nuestro Asterisk a la red análoga PSTN debemos establecer algún mecanismo mediante el cual la voz digital usada en Asterisk sea convertida a voz análoga para ser transportada por la PSTN y viceversa, convertir la voz análoga transportada por la PSTN para que pueda ser procesada por Asterisk de manera digital.
Existen unos dispositivos llamados FXO mediante los cuales esta labor puede realizarse de manera simple. En el caso particular de este artículo, usaremos un FAX MODEM PCI Motorola 62802 ( ENF656 PCIG MOPR ) para conectar una sola y única línea análoga (respecto al uso de Fax Modems como FXO lease http://www.voip-info.org/wiki/view/X100P+clone ) . En caso de desear conectar directamente, por ejemplo, 4 líneas análogas de la PSTN a nuestro Asterisk, podría usarse una tarjeta Digium TDM400P
Funcionamiento de un FXO
FaxModem PCI Motorola 62802 ( ENF656 PCIG MOPR )
Digium TDM400P
Otro de los casos posibles es que nuestro proveedor de telefonía nos suministre una linea RDSI PRI o BRI (del tipo E1, o T1, o J1) la cual nos comunica de manera digital con la PSTN. En un caso como este podriamos usar una tarjeta como la DIGIUM TE122 para conectar Asterisk a la RDSI de nuestro proveedor
Digium TE122
Otro de los posibles casos (mi favorito, bastante práctico por cierto) es que nuestro proveedor de telefonía cuente con un servidor de protocolo SIP. En esta situación el proveedor nos suministrará una dirección IP, un usuario y una contraseña para conectarnos a la PSTN. Solo necesitaremos una simple tarjeta de red Ethernet para conectar nuestro Asterisk a la red pública de telefonía.
FXS
Del lado del usuario final, Asterisk está diseñado para ser usado con teléfonos digitales o teléfonos IP. Tanto nuestro servidor de Asterisk como nuestros teléfonos IP tendrá una dirección de red IP y se conectará a un Switch Ethernet usando conectores RJ45. Esto significa que nuestros teléfonos análogos con el clásico conector RJ11 no funcionarán al conectarlos a un Switch Ethernet a menos que contemos con un dispositivo que convierta dicho conector RJ11 en RJ45 y adicionalmente convierta de análoga a digital la voz de nuestro teléfono análogo para que pueda ser entendible por Asterisk.
Funcionamiento de un FXS
En el comercio podemos encontrar algunos dispositivos llamados FXS, tambien conocidos como ATA (Analog Telephone Adapter) que permiten conectar nuestros teléfonos análogos a un switch Ethernet y a su vez a Asterisk. Otra de las posibles opciones es el uso de teléfonos por software (SOFTPHONE) los cuales pueden instalarse en cualquier computador. En el caso particular de este artículo carecemos tanto de teléfonos IP como de dispositivos ATA, por lo que emplearemos softphone como clientes de Asterisk.
Teléfono IP marca GrandStream
ATA marca GrandStream
Código fuente
En este procedimiento vamos a instalar Asterisk a partir del código fuente disponible en www.asterisk.org/downloads . Descargaremos y compilaremos dicho código fuente de Asterisk en nuestra máquina Linux, para lo cual necesitaremos tener instalado previamente el código fuente de nuestro Kernel Linux, el paquete build-essential y la versión de desarrollo de la librería NCURSES.
# uname -r
# aptitude install linux-headers-$(uname -r) build-essential ncurses-dev
DAHDI
Mark Spencer fue el creador de Asterisk y el fundador de la empresa DIGIUM, la cual se dedica a la fabricación de Appliance y tarjetas PCI para ser usadas con Asterisk. DIGIUM ha desarrollado DAHDI (Digium/Asterisk Hardware Device Interface), un conjunto de controladores que permite que el hardware fabricado por DIGIUM (o compatible con las tecnologìas de DIGIUM) sea reconocido por Asterisk como FXO o FXS segun el caso. En versiones antiguas, Dahdi recibía el nombre de Zaptel.
Dahdi puede ser descargado desde la página de internetwww.asterisk.org/downloads como se observa en la imagen inferior:
Procederemos entonces a instalar Dahdi para que nuestro FaxModem PCI Motorola 62802 ( ENF656 PCIG MOPR ) cuente con los controladores necesarios para ser reconocido por Asterisk.
cd –wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.5.0.2+2.5.0.2.tar.gz
cp dahdi-linux-complete-2.5.0.2+2.5.0.2.tar.gz /usr/src
cd /usr/src
tar xvfz dahdi-linux-complete-2.5.0.2+2.5.0.2.tar.gz
ln -s /usr/src/dahdi-linux-complete-2.5.0.2+2.5.0.2/ dahdi
cd dahdi
make all
make install
make config
DAHDI has been configured.
List of detected DAHDI devices:
pci:0000:07:01.0     wcfxo+       1057:5608 Wildcard X100P
run ‘dahdi_genconf modules’ to load support for only
the DAHDI hardware installed in this system.  By
default support for all DAHDI hardware is loaded at
DAHDI start.
dahdi_genconf modules
Nuestro FAX MODEM Motorola fue reconocido como una Wildcard X100P.
Luego de lo anterior, debemos asegurarnos de que Dahdi se esté ejecutando, con el comando dahdi status
/etc/init.d/dahdi status
### Span  1: WCFXO/0 “Wildcard X100P Board 1″ (MASTER)
1 FXO                    (battery)
En caso que “dahdi status” arroje una salida en blanco, podemos iniciarlo manualmente mediante el comando dahdi start
/etc/init.d/dahdi start
Loading DAHDI hardware modules:
wcfxo: done
Running dahdi_cfg: done.
y verificamos nuevamente la adecuada ejecución con dahdi status
/etc/init.d/dahdi status
### Span  1: WCFXO/0 “Wildcard X100P Board 1″ (MASTER)
1 FXO                    (battery)
Si pese a lo anterior el comando “dahdi status” continua mostrando una salida en blanco, debemos revisar la salida del log messages (o syslog) del sistema operativo para verificar la adecuada carga de nuestro controlador Dahdi.
Log “Messages” al cargar exitosamente del driver
# tail -f /var/log/messages
Jan  4 08:13:34 squeeze kernel: dahdi: Telephony Interface Registered on major 196
Jan  4 08:13:34 squeeze kernel: dahdi: Version: 2.5.0.2
Jan  4 08:13:34 squeeze kernel: Found a Wildcard FXO: Wildcard X100P
Jan  4 08:13:34 squeeze kernel: FXO PCI Master abort
Log “Messages” al fallar la carga del driver
# tail -f /var/log/messages
Jan  4 08:08:40 squeeze kernel: dahdi: Telephony Interface Registered on major 196
Jan  4 08:08:40 squeeze kernel: dahdi: Version: 2.5.0.2
Jan  4 08:08:40 squeeze kernel: FXO PCI Master abort
Jan  4 08:08:40 squeeze kernel: NOTICE-wcfxo: WCFXO/0: Unknown DAA chip revision: REVB=0
Jan  4 08:08:40 squeeze kernel: Failed to initailize DAA, giving up…
Jan  4 08:08:40 squeeze kernel: wcfxo: probe of 0000:07:01.0 failed with error -5
En caso de presentarse esta falla, debemos re-compilar y re-instalar el controlador, para lo cual debemos ubicarnos en /usr/src/dahdi/ , ejecutar un make clean (para limpiar la compilación anterior) y efectuar nuevamente el proceso de instalación desde el comienzo.
# make clean
# make all

make install
make config# dahdi_genconf modules
Luego de tener Dahdi funcionando, procederemos a instalar Asterisk. Los instaladores pueden obtenerse en www.asterisk.org/downloads como se observa en la imagen
Recordemos que antes de proceder con la instalación de Asterisk debemos tener instaladas las fuentes de nuestro kernel Linux, el paquete build-essential y la libreria de desarrollo de NCURSES.
# uname -r
# aptitude install linux-headers-$(uname -r) build-essential ncurses-dev
Procedamos entonces con la instalación de Asterisk
cd –
wgethttp://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.8.1.tar.gz
cp asterisk-1.8.8.1.tar.gz /usr/src
cd /usr/src
tar xvfz asterisk-1.8.8.1.tar.gz
ln -s /usr/src/asterisk-1.8.8.1/ asterisk
cd asterisk
./configure –disable-xmldoc
Al finalizar el proceso “configure” deberemos obtener la siguiente salida (en este caso particular lo hemos compilado dentro de un kernel linux de 64 bits (amd64):
configure: Package configured for:
configure: OS type  : linux-gnu
configure: Host CPU : x86_64
configure: build-cpu:vendor:os: x86_64 : unknown : linux-gnu :
configure: host-cpu:vendor:os: x86_64 : unknown : linux-gnu :
Procederemos ahora con la ejecución de make menuselect para personalizar nuestra instalación de Asterisk con las opciones disponibles. En nuestro caso seleccionaremos los paquetes de Audio GSM en Idioma Español, como se observa en las imágenes:
# make menuselect
make menuselect
Luego de ejecutar el make menuselect, ejecutaremos el comando make
# make
Al finalizar el “make” veremos el siguiente mensaje:
A continuación procedemos con la ejecución de “make install”
# make install
Al finalizar el “make install” veremos el siguiente mensaje:
Siguiendo las instrucciones, ejecutaremos el comando “make samples”
make samples
Luego, ejecutaremos “make config”. Este comando realizará las tareas necesarias para asegurarse de que Asterisk se inicie como un servicio de red siempre que iniciemos nuestro sistema operativo.
make config
update-rc.d: using dependency based boot sequencing
En este punto Asterisk ya se encuentra funcionando en nuestra máquina. Podemos verificar su estado ejecutando “asterisk status”
/etc/init.d/asterisk status
asterisk is running.
Ahora podemos conectarnos de manera básica a su consola de administración por texto (CLI o Command Line Interface) mediante el comando “asterisk -r” o tambien con el comando “rasterisk”
# rasterisk
Asterisk 1.8.8.1, Copyright (C) 1999 – 2011 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.
=========================================================================
Connected to Asterisk 1.8.8.1 currently running on squeeze (pid = 2324)
squeeze*CLI>
Para cerrar nuestra sesión de usuario en rasterisk y volver a nuestro shell Linux, digitamos quit en la terminal
squeeze*CLI> quit
Ahora que tenermos Asterisk instalado, es importante que tengamos una copia de seguridad de sus archivos originales de configuración que nos permita, en caso de requerirse, volver a la configuración original de nuestra instalación. Vamos entonces a generar una copia de las carpetas /etc/asterisk y /var/lib/asterisk . Dicha copia la alojaremos dentro de /root
# mkdir -p /root/asterisk/etc-original
# mkdir -p /root/asterisk/var-original
# cp -fRv /etc/asterisk /root/asterisk/etc-original
# cp -fRv /var/lib/asterisk /root/asterisk/var-original
Asterisk cuenta con la posibilidad de ser administrado vía web y cuenta con un micro-servidor HTTP embebido para tal fin. Mencionada posibilidad viene deshabilitada por defecto. A continuación procederemos con su activación.
# vi /etc/asterisk/manager.conf
Editaremos las siguientes líneas
SECCIÓN 1:
[general]
enabled = no
;webenabled = yes
port = 5038
Esta sección permite activar o desactivar el administrador y definir el puerto TCP de acceso al mismo.
Cambiaremos los parámetros por defecto de la siguiente manera:
[general]
enabled = yes
webenabled = yes
port = 5038
SECCIÓN 2:
;[mark]
;secret = mysecret
;deny=0.0.0.0/0.0.0.0
;permit=209.16.236.73/255.255.255.0
Esta sección permite generar un nombre de usuario y una contraseña para el acceso al administrador, además de definir una lista explicita de direcciones IP desde las cuales está permitido o denegado el acceso administrativo.
Realizaremos la siguiente modificación:
[admin]
secret = asterisk
deny=0.0.0.0/0.0.0.0
permit=0.0.0.0/0.0.0.0
SECCIÓN 3:
;read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
;write = system,call,agent,user,config,command,reporting,originate
Esta sección define el nivel de privilegio otorgado al usuario (para más información léase el archivo manager.conf )
Haremos las siguientes modificaciones (simplemente descomentaremos estas 2 líneas):
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,config,command,reporting,originate
[OPCIONAL] De igual forma, podríamos definir una lista de usuarios adicionales con sus respectivos privilegios, como se observa a continuación:
[super-admin]
secret = powerfull
deny=0.0.0.0/0.0.0.0
permit=0.0.0.0/0.0.0.0
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,config,command,reporting,originate
[read-admin]
secret = limited
deny=0.0.0.0/0.0.0.0
permit=0.0.0.0/0.0.0.0
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
Modificaremos ahora el archivo http.conf
# vi /etc/asterisk/http.conf
Modificaremos las siguientes líneas
;enabled=yes
bindaddr=127.0.0.1
;bindport=8088
;enablestatic=yes
;redirect = / /static/config/index.html
cambia por
enabled=yes
bindaddr=0.0.0.0
bindport=8088
enablestatic=yes
redirect = / /static/config/index.html
Luego de lo anterior, reiniciaremos el servicio Asterisk
# /etc/init.d/asterisk restart
Hasta este momento solo hemos habilitado el micro-servidor HTTP de Asterisk, el cual por defecto NO ALOJA ningún sitio web. Debemos entonces descargar desde http://downloads.asterisk.org/pub/telephony/asterisk-gui/releases/ el código fuente de ASTERISK-GUI, una de las tantas aplicaciones web disponibles para administrar Asterisk.
Allí encontraremos varias versiones. En el caso específico de este artículo, descargaremos la última versión disponible hasta la fecha (el archivo asterisk-gui-2.1.0-rc1.tar.gz )
cd –
wget http://downloads.asterisk.org/pub/telephony/asterisk-gui/releases/asterisk-gui-2.1.0-rc1.tar.gz
cp asterisk-gui-2.1.0-rc1.tar.gz /usr/src/
cd /usr/src
tar xvfz asterisk-gui-2.1.0-rc1.tar.gz
ln -s /usr/src/asterisk-gui-2.1.0-rc1 asterisk-gui
cd asterisk-gui
./configure
configure: Package configured for:
configure: OS type  : linux-gnu
configure: Host CPU : x86_64
make
make install
make checkconfig
— Checking Asterisk configuration to see if it will support the GUI —
* Checking for http.conf: OK
* Checking for manager.conf: OK
* Checking if HTTP is enabled: OK
* Checking if HTTP static support is enabled: OK
* Checking if manager is enabled: OK
* Checking if manager over HTTP is enabled: OK
— Everything looks good —
Luego de esto, ingresaremos a http://-direccion-ip-nuestro-servidor-asterisk:8088 y aparecerá la siguiente imagen:
… lo cual significa que ASTERISK-GUI se ha integrado exitosamente con el resto de ASTERISK y que debemos reiniciar el servicio Asterisk para comenzar a disfrutar del fruto de nuestro arduo trabajo.
# /etc/init.d/asterisk restart
Luego de reiniciar el servicio, ingresaremos nuevamente a la interface web ( http://-direccion-ip-nuestro-servidor-asterisk:8088 ).
Esta vez nos aparecerá el siguiente mensaje, en el cual daremos clic en Aceptar.
A continuación podremos acceder a la totalidad de la interface GUI para administrar Asterisk.
Asterisk non root
Continua…

No hay comentarios.:

Publicar un comentario