• Categorías

  •  

    Septiembre 2014
    L M X J V S D
    « Sep    
    1234567
    891011121314
    15161718192021
    22232425262728
    2930  
  • Acerca del Autor

    Mi nombre es Sergio Serrano y soy socio-fundador de Avanzada 7(empresa pionera en España en Asterisk) y un apasionado de Linux y el software libre. Desde el 2002 empecé a trabajar con Asterisk y desde entonces sigo aprendiendo cosas día a día.

Asterisk – Paso a Paso

Escrito por tron el 28 de Septiembre de 2007

Asterisk

1. Introduccción

2. Cosas a tener en cuenta antes de empezar

3. Proceso de compilación

4. Configurar una línea analógica

5. Configurar una línea RDSI Básica

6. Configurar una línea RDSI primaria

7. Configurar una extensión SIP

8. Configurar una extensión IAX

9. Configurar un operador IP por SIP

10. Configurar una operador IP por IAX

11. Realizar llamadas por una línea ZAP

12. Realizar llamadas por una línea SIP

13. Realizar llamadas por una línea IAX


1. Introducción

Dentro de esta página voy a ir describiendo poco a poco lo que yo voy haciendo para configurar un asterisk por si le sirve a alguien. No creo que sea posible explicar todas y cada una de las cosas, pero espero ser bastante claro para que alguien que lea esta página pueda configurar un equipo con asterisk y configurar lo básico para poder echar a andar el sistema, es decir, configurar las tarjetas, poder hacer una llamada, etc. , etc.

La forma en la que yo describa la cosas no es la única forma ya que lo bueno que tiene asterisk es que una misma cosa se puede hacer de distintas formas. Posiblemente haya algunas mejores que otras, pero para eso está la experiencia. Así que no toméis lo que aquí explico como si fuera lo único ya que habrá gente que no piense así y siempre es mejor experimentar por uno mismo.

Espero que os sirva de ayuda a cualquiera que entre en el blog y que con estos pequeños pasos os entre el gusanillo para pasaros a Asterisk.


2. Cosas a tener en cuenta antes de empezar

Antes de empezar a trabajar con Asterisk hay que tener una serie de cosas en cuenta para que el resultado de una instalación sea un éxito.

La primera de ellas es saber que estamos trabajando con un sistema en constante evolución y que debido a esto siempre cabe la posibilidad de que existan fallos en el código por lo que siempre es recomendable trabajar con versiones estables de asterisk para minimizar riesgos. Además es importante saber siempre en que estado se encuentra el sistema por lo que siempre es bueno conocer las siguientes páginas:

De esta forma podemos tener más o menos claro cuales son los posibles problemas que nos podemos encontrar a la hora de instalar una versión de Asterisk.

La segunda de las cosas a tener en cuenta es que estamos montando un SERVIDOR y de COMUNICACIONES, es decir, no estamos montando un messenger, ni siquiera un servidor de correo, etc. Las comunicaciones dentro de una empresa son críticas y cuando un correo tarda 5 minutos en llegar ya nos estamos enfandando. Ni que decir tiene, que no tener teléfono puede cabrear a más de uno. Las empresas a las que nos dirigimos están acostumbrados a que llega el técnico correspondiente, le monta el sistema y ellos descuelgan y listo(aunque a veces tienen problemas).

Con esto sólo quiero decir que hay que estudiar algo el sistema que vamos a montar para ver que arquitectura hardware vamos a montar. No es lo mismo una instalación de 4 extensiones y una línea analógica, que una instalación de 1000 extensiones con 3 primarios fijos y 1 primario móvil. Toda instalación de asterisk debe ser precedida por un estudio en profundidad del sistema, teniendo en cuenta la conexión a internet la infraestructura de red, etc, etc para poder dar la mejor solución al mejor precio.

Cuando escogamos el servidor que vamos a utilizar vamos a tener estas cosas en cuenta, para ver si ponemos una placa base u otra, un servidor u otro, uno o varios procesadores, cantidad de memoria, de discos, etc. Mi recomendación es que como estamos hablando de las comunicaciones de la empresa, hay que dar una redundancia en el sistema, ya sea con dos servidores replicados o con un conector RJ11 doble, pero algo con lo que le podams asegurar al cliente que siempre va a poder hacer y recibibr llamadas. De hecho si a un cliente por precio, no se le puede poner la más mínima redundancia, bien no es interesante o bien hay que dejarle muy claro que no podemos garantizar la instalación.

Hoy por hoy se están desarrollando tarjetas en pci express con lo que no tendremos el problema de la interrupciones(como bien explica elio aquí: Interrupciones y las ventajas del PCI-Express), pero si tenemos tarjetas PCI debemos tener en cuenta la placa base o servidor que escogemos. Yo la mejor experiencia la he tenido con las placas base ASUS y con servidores DELL y HP, he tenido muy malas experiencias con servidores Fujitsu e IBM, pero me consta que hay gente que les va bien, depende mucho también del modelo y de la distribución de Linux que utilizamos. Siempre es bueno ir a los foros para ver que modelos de servidores les ha ido bien a que usuarios.

Una vez que hemos decidido el servidor que se va a utilizar tenemos que decidir que distribución de Linux vamos a utilizar. En este tema hay muchas opiniones y todas válidas. Actualmente se están montando soluciones de Asterisk sobre Debian, Redhat, Suse, Fedora, Centos, Ubuntu, etc., etc. Yo particularmente utilizo Debian porque me he hecho bien a esta distribución y considero que es una de las más estables pero no voy a decir que una distribución u otra es mejor o peor, no nos olvidemos que al final necesitamos un kernel, unas librerías y unas herramientas para compilar el sistema. Desde Digium se recomienda siempre RedHat, pero me consta que muchos técnicos de Digium utilizan Debian(me lo han dicho ellos mismos, jeje).

Otra cosa a tener en cuenta es saber el número y tipo de conexiones que tenemos en la empresa donde vamos a hacer la instalación. Por ejemplo, si tenemos líneas analógicas, rdsi básico(ya haré un artículo partícular sobre esto), rdsi primario, si vamos a conectar con alguna centralita por delante o por detrás, etc. Toda esta información hay que tenerla antes de empezar la instalación para no perder tiempo una vez que empezamos con la instalación y os digo que nos podemos llevar muchar sopresas.

Otra cosa que hay que hablar con el cliente para ver si quiere conectar con operadores IP(para abaratar costes) y el tipo de extensiones que quiere tener en la centralita(si quiere mantener su viejos teléfonos analógicos, si quiere teléfonos IP, softphone, faxes, etc.) para ver si la infraestructura de red está preparada para la Voz y si la conexión a Internet es buena para conectar con un operador IP.

A veces, con poner switches para la voz y switches para los datos basta. A veces no, hay que implementar calidad de servicio, y dos conexiones a internet, etc. Si se ponen sofphone hay que tener en cuenta que las tarjetas de sonido por defecto de los ordenadores es mala y es recomendable poner cascos USB con DSP propio para que el punto débil de la instalación no sean los cascos. REPITO, los cascos normales de NGS no valen para la voz IP.

Y por último, tenemos que recopilar la lista de servicios que tenían antes en la centralita y hablar con el cliente para definir lo servicios que se le vana implementar y como quieren configurarlos, si mediante códigos en el teléfono o mediante una interfaz web. Este punto es un poco complicado ya que hay clientes que no tienen ni idea y ponerles un AsteriskNOW es sufciente y otros clientes que preieren un interfaz más completo o incluso administrarlo por consola.

Pues bien, una vez que tenemos todos estos datos ya podemos ponernos con la instalación de asterisk.


3. Proceso de compilación

Una vez que hemos tenido en cuenta las cosas anteriores pasamos al proceso de compilación de Asterisk. En principio debería ser compilar y listo, pero es recomendable que no sea así, me explico, antes de empezar a compilar debemos tener en cuenta lo que tenemos que hacer. Hoy en día hay mucha gente que no compila el kernel en la distribución de linux, sino que utiliza la que viene con la distribución(actualmente 2.6.XX). Pues bien, antes de compilar debemos saber si hay algún problema con el kernel que viene con la distribución. Por ejemplo, que le digan a mi amiga Rosa, que quieren compilar mISDN con Centos o Trixbox(je,je) Los kernel por defecto para centos 4.5 y 5 vienen con problemas de incompatibilidad con mISDN y habrá que actualizar el kernel para no tener problemas en la compilación.

Con esto, lo único que quiero que tengáis en cuenta es que para compilar tenemos que conocer la distribución con la que trabajamos, el kernel que trabajamos, así como las librerías de compilación y versiones del compilador que vamos a utilizar. Para ello siempre hay que tener en cuenta los ficheros README y ChangeLog de la release de Asterisk que estamos utilizando para saber la versión del compilador así como las librerías de compilación que son necesarias para compilar.

Una vez que tenemos todo claro y que estamos seguros que todo en nuestro sistema está bien, pasamos al proceso de compilación. Para eso hay que seguir unos pasos muy simples.

Proceso de compilación

La compilación de Asterisk correcta dependerá de las tarjetas que se vayan a utilizar. Los paquetes que componen asterisk son:

  • Libpri
  • Zaptel
  • Asterisk
  • Asterisk-addons

Libpri, son las librerías que implementan los protocolos de comunicación RDSI de capa 2 y 3(Q.921 y Q.931), necesarias para poder operar con las tarjetas de comunicaciones que utilizan la tecnología Zap con líneas RDSI.

Zaptel, es el paquete que se encarga de hacerle saber a Linux el comportamiento que tienen las tarjetas de comunicaciones Digium, lo que viene a ser el driver de Windows.

Asterisk, es el paquete encargado de mover el mundo de Asterisk, dentro de este paquete se encuentran los canales que vamos a poder utilizar, las aplicaciones, funciones, recursos, etc.

Por último, el asterisk-addons, es el paquete que incluye funcionalidades que por una razón u otra no se incluyen en el paquete básico de distribución. Es bueno leerse el README para saber que por ejmplo, configurar el res_mysql con el res_odbc_config puede producir inestabilidad al sistema, por ejemplo.

Una vez que tenemos todo esto claro, ¿que necesitamos para compilar? Pues bien, lo primero es saber como está nuestro sistema para que Asterisk funcione de la mejor forma posible. Esto se consigue mediante las cabeceras del kernel que estamos utilizando en el sistema. Además de las cabeceras del kernel, como poco vamos a necesitar las siguientes librerías:

  • OpenSSL
  • ncurses
  • zlib

Una vez que cumplimos todos los requisitos pasamos a la compilación de los paquetes de la siguiente forma:

Libpri

Este paquete no tiene ninguna complicación y sólo es necesario el típico “make && make install” aunque con un “make install sería suficiente” ya que ejecuta el “make” automáticamente.

Zaptel

Este paquete ya tiene alguna cosilla más. La primera de ella es el fichero zconfig.h. Dentro de este fichero podemos encontrar los distintos algoritmos de cancelación de eco software que proporciona Asterisk, ¿cual es mejor?, pues no hay repuesta válida, depende mucho de las líneas de comunicaciones que tenemos configuradas. Aquí siempre es bueno el famoso “ensayo y error”.

Lo primero que debemos ejecutar el el “./configure”(nuevo en 1.4) e invetir 5 minutos en ver lo que pone. Si lo vemos bien, nos podemos dar cuenta de librerías que faltan, por ejemplo en la línea “-lnewt no”. Esta línea nos indica que no tenemos instalada la librería de desarrollo para newt, ¿bueno y para que sirve?, pues bien, para que compile la herramienta zttool(que sirve para obtener infomración sobre las tarjetas) hace falta esta librería. Pues bien, ¿como podemos saber que nos hace falta?, Una vez que hemos ejecutado el “./configure” podemos ejecutar el “make menuselect” para ver y configurar los módulos que queremos compilar así como las utilidades zaptel que queremos tener disponibles. Ésta es una forma de optimizar nuestro sistema y que no tengamos cargados más módulos de los necesarios.

Si queremos dar este paso de forma automática, dentro de los fuentes ddel zaptel, tenemos un directorio que se llama build_tools que tiene algunos scripts que nos pueden ayudar a tener los requisitos necesarios para la compilación como el script “install_prereq”.

Pues bien, después de haber ejecutado el make menuselect y haber seleccionado lo que queremos instalar, podemos ejecutar el “make && make install” y es bueno seguir el proceso de compilación, por lo menos una vez para ver de que estamos hablando. Una vez terminado el “make && make install” podemos ejecutar el “make config” que nos instalar un script de inicio en /etc/init.d con los correspondientes enlaces simbólicos en los niveles de ejecución correspondientes.

¿Y si no utilizamos tarjetas Zap? ¿necesitamos el zaptel? En principio, no, pero si queremos utilizar algunas funcionalidades como las salas de conferencia(meetme), necesitamos una fuente de sincronización que se extrae de las tarjetas Zap o del módulo ztdummy, incluído en los fuentes del zaptel y que no necesita de ninguna tarjeta, sino del reloj interno del sistema para conseguir una fuente de sincronización apta para funcionalidades como el meetme.

Todo esto y más se encuentra dentro del fichero README que se incluye en los fuentes de Zaptel y que es altamente recomendable leer.

Además siempre es bueno revisar el fichero Makefile para ver las distintas opciones de compilación, como por ejemplo el make b410p para instalar mISDN para la B410P o el make firmware(para versiones previas a 1.4.6) para instalar de forma correcta el firmware de los canceladores de echo o del firmware de la tarjeta de transcoding.

Asterisk

Una vez que tenemos ya compilados los paquetes anteriores pasamos a compilar el asterisk, el núcleo de todo el sistema y que desde la versión 1.4 viene con bastantes mejoras. La forma de compilar se ha facilitado bastante y con un poco de atención podemos ver lo que falta en el sistema.

El primer paso es el ./configure que después de ejecutarlo viene bien revisarlo porque nos indica las librerías que está o no están en el sistema y dependiendo de su existencia se habilitarán algunas funciones para la compilación. Si este paso es un poco complicado podemos hacer esta misma revisión en el siguiente paso, el “make menuselect”. Con esta opción se habilita un menú de texto donde podemos seleccionar lo que queremos instalar en nuestro sistema. Las opciones disponibles son:

*************************************
Asterisk Module Selection
*************************************

Press ‘h’ for help.

—> 1. Applications
2. Call Detail Recording
3. Channel Drivers
4. Codec Translators
5. Format Interpreters
6. Dialplan Functions
7. PBX Modules
8. Resource Modules
9. Voicemail Build Options
10. Compiler Flags
11. Module Embedding
12. Core Sound Packages
13. Music On Hold File Packages
14. Extras Sound Packages

Dentro de cada una de las opciones de menú podemos ir seleccionando lo que queremos instalar en nuestro sistema y además cada vez que nos situamos en una de las opciones podemos ver los paquetes de los que depende. Si vemos que no está disponible y la necesitamos, abajo pondrá de que librerías depende y mediante el gestor de paquetes de nuestra distribución(apt-get, aptitude, yum o yast) podemos instalar la librería que nos falta, volver a ejecutar el ./configure y el make menuselect y veremos como la opción queda activa. Para salvar los cambios realizados, pulsamos la x.

Una vez hecho los cambios ejecutamos el make && make install. Después podemos ejecutar el make config para que se instale en el sistema los scripts de inicio de asterisk y después un make samples para que se copien los ficheros de configuración de ejemplo en el directorio de configuración(/etc/asterisk) y listo.

Después de esto ya podemos utilizar asterisk y empezar a configurar el funcionamiento que queremos que tenga nuestro sistema. Pero antes de pasar a la configuración vamos a compilar el paquete asterisk-addons.

Asterisk-addons

Éste, es un paquete, que contiene módulos que por unas razones u otras(licencias, etc) no se incluyen dentro del paquete principal. Ésto no significa que los módulos sean inestables y de hecho dan alguna que otra funcionalidad añadida al sistema. Al igual que con el resto de módulos de asterisk(salvo por libpri) tenemos el ./configure para ver que podemos compilar en nuestro sistema. Tres de los paquetes más interesantes dentro de asterisk-addons son MySQL, H.323 y MP3. El primero de ellos nos servirá para poder almacenar la configuración de asterisk en una base de datos MySQL o almacenar ek detalle de nuestras llamadas en una base de datos MySQL. El segundo de los paquetes nos servirá para dotar a Asterisk del protocolo H.323 y el tercero de ellos nos servirá para poder entender los ficheros MP3 para música en espera.

Para poder compilar de forma correcta el módulo MySQL es necesario la librería de desarrollo de MySQL(en debian libmysqlclient15-dev).

Con respecto a H.323 hay que hacer un alto en el camino para recordar que desde el principio de los tiempos siempre ha habido dos líneas a seguir en el protocolo H.323, una el cahn_h323 y otra el chan_oh323. Siempre ha habido una pequeña batalla con respecto a cual es mejor pero no me atrevería a decir cual de ellos es el más apropiado, por eso siempre instalo los dos. Dentro del paquete de Asterisk hay una de las versiones y dentro del asterisk-addons otro. Para el paquete que viene dentro de asterisk debemos tener instaladas librerías de desarollo de pwlib, expat o ssl, así como la librería de desarollo de H323, mientras que para el H323 del asterisk-addons, vienen las librerías dentro del propio paquete.

Una vez que tenemos todas las librerías necesarias el proceso de instalación es el de siempre:

./configure

make && make install

make samples

Dentro del subdirectorio doc, tenemos la estructura de la tabla MySQL para almacenar los datos de nuestras llamadas.


4. Configurar una línea analógica

¿Que es una línea analógica? es lo que todos estamos acostumbrados a tener en nuestras casas. Pero ahora imaginaros en una empresa donde tiene varias líneas analógicas, pero muchos más teléfonos analógicos. Bien, al final todas son conexiones analógicas, pero aquí es donde se deben introducir los famosos términos FXO vs FXS. ¿Que leche es esto? La verdad es que es un poco líoso al principio, porque todos nos dicen que para una línea que viene de la calle, debemos utilizar un módulo FXO y configurarlo como FXS y si queremos conectar un teléfono debemos poner un módulo FXS y configurarlo como FXO. Pues bien, esto no es tan complicado. Sólo hay que saber de donde vienen estos términos.

  • FXO: Foreign exchange Office u Oficina de intercambio remoto
  • FXS: Foreign exchange station u estación de intercambio remoto.

Es decir, cuando nos conectamos a la línea analógica que viene de la central de teléfonica utilizamos un módulo para conectarme a la oficina de intercambio remoto(FXO), pero para que nos podamos entender, debemos comportarnos como una estación de intercambio remoto(FXS) y cuando queremos conectar un teléfono, utilizamos un módulo para conectarnos con una estación de intercambio remoto(FXS), pero para que podamos entendernos, debemos comportarnos como una oficina de intercambio remoto(FXO). ¿Queda claro? espero que sí, pero bueno vamos al lío.

Para este apartado, vamos a suponer que tenemos una línea analógica y un teléfono de toda la vida(un domo) y pedimos una TDM11B. Para poder configurarlo necesitamos modificar dos ficheros:

  • /etc/zaptel.conf: En este fichero le indicamos al Sistema Operativo que es lo que tenemos en la tarjeta y como funciona.
  • /etc/asterisk/zapara.conf: En este fichero le indicamos a Asterisk como queremos que se comporte el módulo de la tarjeta.

Con estas tarjetas hay que tener dos cosas en cuenta, una, es que cada módulo de la tarjeta(esté pinchado o no) debe tenerse en cuenta. En nuestro ejemplo, la TDM11B suele venir con el módulo FXS en el puerto 1 y el módulo FXO en el puerto 4. La segunda cosa a tener en cuenta es que si vamos a conectar teléfonos les tenemos que proporcionar la corriente para que el teléfono pueda funcionar. Esto lo conseguimos conectando la tarjeta a un conector MOLEX(el del disco duro) de la fuente de alimentación, por lo que tenemos que tener conectores libres en el ordenador en el que vamos a poner la tarjeta.

El primero de los fichero que vamos a configurar es el zaptel.conf en el que tenemos que indicar dos cosas. La primera de ellas es indicarle que tipo de módulos que tenemos(mediante el comportamiento que deben tener), en nuestro caso que tenemos el módulo FXS en el puerto 1 y el módulo FXO en el puerto 4 debemos poner:

fxoks=1

fxsks=4

Si nos fijamos en el zaptel de ejemplo vemos que poner fxoks, fxols o fxogs, ¿porque he escogido fxoks? simplemente porque es el que se suele utilizar hoy día, pero es posible que en alguna instalación antigua tengáis que utilizar fxls(Loop Start), pero no es tema de este mini manual explicar las diferencias.

Lo segundo que tenemos que configurar en el zaptel.conf es que tonos queremos utilizar en las líneas analógicas, es decir, nuestros tonos no son los mismos que los de los Estados Unidos y para eso tenemos que configurar el loadzone y defaultzone. ¡¡¡OJO!!! que en el fichero de ejemplo si os fijáis España viene como sp, cuando realmente tenemos que poner es, para que sepáis los tonos que hay, o si queréis añadir cualquier otro, podéis echarle un ojo al fichero zonedata.c de los fuentes del paquete zaptel.

Pues bien, una vez que tenemos el zaptel configurado ya podemos arrancar lso módulos necesarios para que la tarjeta quede operativa para asterisk, mediante los comandos

modprobe zaptel && modprobe wctdm && ztcfg

o bien mediante la ejecución del script de inicio /etc/init.d/zaptel start

Una vez que tenemos cargados los módulos podemos ejecutar un cat /proc/zaptel/* para ver algo como lo siguiente:

Span 1: WCTDM/0 “Wildcard TDM400P REV I Board 1″

1 WCTDM/0/0 FXOKS (In use)
2
3
4 WCTDM/0/3 FXSKS (In use)

o podemos ejecutar un zttool para ver algo como lo siguiente:

zttool

Ahora vamos a configurar el /etc/asterisk/zapata.conf para decirle a Asterisk como se van a comportar nuestras líneas analógicas.