Asterisks federados: Administrador Asterisk
De Guifi.net - Wiki Hispano
Contenido
Introducción
El montaje de una centralita asterisk en el entorno federado es un proceso más complejo que el de dar de alta una extensión, aunque accesible para cualquiera que se maneje mínimamente con Linux y Asterisk. Veámolo.
La infraestructura propone realizar un proceso de registro e instalación/configuración de la centralita mediante un proceso semi-automático, donde reservaremos un prefijo telefónico para las extensiones de nuestra centralita, y estableceremos un enlace con el enrutador SIP Kamailio (sip.guifi.net) que nos permitirá realizar llamadas telefónicas no sólo a los usuarios de dentro de nuestra centralita sino a cualquier extensión de usuario de una centralita unida a esta infraestructura.
Debemos entender el diseño conceptual del montaje, donde una centralita puede tener hasta 999 extensiones registradas con clientes que únicamente tienen que tener conexión a la red guifi.net. Pero para que nuestra centralita pueda comunicarse con otras centralitas de la península deberá tener también conexión a Internet, ya que a través de Internet se establecerá el enlace con el enrutador SIP que nos interconectará con otras islas guifi.net.
Requisitos previos
- Tener un usuario dado de alta en la web de guifi.net.
- Tener dado de alta un nodo guifi.net, un enlace y una dirección IP guifi.net.
- Tener un recurso "Computadora Servidor" dado de alta en guifi.net.
- En este servidor deberemos tener conexión tanto con guifi.net como con Internet (al estilo de los servidores de gráficas o los proxies federados), de manera que podamos interconectar contra sip.guifi.net.
- A nivel físico, necesitaremos una máquina que corra un sistema operativo preferiblemente open-source (Linux, FreeBSD) que tenga acceso a la red guifi.net a la que nos conectamos.
Registro de la centralita en la web de guifi.net
Antes de poder montar nuestra centralita deberemos dar de alta nuestra centralita, y esperar a que nos aprueben el enlace con el enrutador SIP (un puro trámite). Veamos cómo hacerlo.
Paso 1: Registrar un nuevo servicio
- Desde la web de guifi.net accederemos al menú "Crear Continguts", y eligiremos la opción "Guifi.net Service".
- Crearemos un nuevo servicio del tipo "Asterisk VOIP server in the sip.guifi.net infraestructure".
- Importante que a la hora de crear el servicio añadamos la información de la máquina "Computadora Servidor" que hemos dado de alta previamente (ver pantallazo).
Paso 2: Registramos el FQDN de nuestra máquina al nuevo servicio
Para formar parte de la infraestructura sip.guifi.net necesitamos enlazar contra la máquina en la que está el servidor kamailio, y de momento esta máquina tiene pata únicamente en Internet. Por tanto, nuestro servidor deberá poder verse en internet de alguna manera, necesitaremos un FQDN o hostname público (podemos utilizar dyndns para obtenerlo).
- Una vez guardado nuestro nuevo servicio, veremos que en la página de edición del servicio nos permite introducir un campo "FQDN" que podemos rellenar.
- Introducimos nuestro nombre de host público, y guardamos la página del servicio.
Paso 3: Servicio registrado, falta la aprobación en la infraestructura sip.guifi.net
Llegados a este punto ya tenemos creada nuestra solicitud de unión de una nueva centralita en la infraestructura sip.guifi.net, así que los administradores de la infraestructura verán una nueva solicitud pendiente de aprobación.
Podemos observar la página de enlaces pendientes de aprobación accediendo a una zona guifi.net, y desde allí pinchando en el enlace "sip.guifi.net". Por ejemplo, podemos ver absolutamente todos los enlaces creados y pendientes aquí:
Enlaces pendientes sip.guifi.net en la zona World
Paso 4: Servicio aprobado
Una vez aprobado el servicio por los administradores Kamailio, se nos enviará un e-mail de notificación. Además, la página de información del servicio que ha creado el usuario indicará el estado de "centralita aprobada", para que el administrador sepa que ya puede empezar a configurar su centralita.
Llegados a este punto, pasamos a la parte de instalación/configuración del servidor Asterisk con los datos que hemos obtenido.
Instalación de Asterisk en el sistema
Instalar Asterisk hoy en día es muy sencillo. Si utilizamos una distribución Linux podremos hacer uso del paquete que distribuyan los desarrolladores, aunque también podemos optar por compilarlo desde fuentes si utilizamos una distribución más a medida.
Instalación de Asterisk en las principales distribuciones
La instalación de Asterisk en un distribución oficial de Linux suele ser un proceso sencillo, y es la opción recomendada siempre ya que el empaquetado del software a la medida de la distribución es importante y nos evitará posibles problemas de mantenimiento a largo plazo. Aún así hay que ir con pies de plomo, ya que hay distribuciones que tienen abandonado el empaquetado de Asterisk, o que distribuyen una versión muy antigua. Es importante que tengamos unificadas en la medida de lo posible las versiones utilizadas en la infraestructura, ya que nos facilitará la solución de problemas de compatibilidades y se puede mantener mejor un sistema homogéneo.
Tenéis toda la información relativa a la instalación de asterisk en una distribución Linux en el wiki oficial de Asterisk:
Instalación de Asterisk desde fuentes
Para facilitar la instalación de un servidor Asterisk, hemos desarrollado un script escrito en bash, que nos permitirá llevar a cabo una instalación a medida de la última versión de Asterisk en nuestro entorno. Basta con ejecutar dicho script y él se encargará de descargar los sources de la versión 1.8.2.3 de Asterisk, compilarlos, y añadir otro tipo de contenido como los códecs necesarios y las voces en castellano.
Dicho script está pensado para platafornmas GNU/Linux. Ya tiene una primera versión, en fase de desarrollo, aquí:
La versión actual permite una instalación de asterisk limpia, junto con los codecs y las voces de asterisk necesarias para el funcionamiento de la centralita. La instalación se realiza por defecto en /opt/asterisk y podemos realizarla como usuario no privilegiado en ese u otro directorio (editando el archivo asterisk_install.sh). Es conveniente de momento no instalar ni dahdi, ni libpri ni asterisk-addons ya que no son necesarios para el correcto funcionamiento de la centralita, y hay algunos fallos en el script que quedan por pulir.
dave@lateralus:~/dev$ git clone git@github.com:tombatossals/voz.git Cloning into voz... remote: Counting objects: 19, done. remote: Compressing objects: 100% (17/17), done. remote: Total 19 (delta 4), reused 0 (delta 0) Receiving objects: 100% (19/19), 5.60 KiB, done. Resolving deltas: 100% (4/4), done. dave@lateralus:~/dev/a$ cd voz/ dave@lateralus:~/dev/voz$ ./asterisk_install.sh *************************************** ****** Asterisk installation ********** *************************************** ** You are using Debian or Ubuntu, we are going to test for the development packages... * Done ** We are going to download, extract, compile and install the asterisk framework on these directories: * Installation dir: /opt/asterisk * Compilation dir: /opt/asterisk/src But first, we need to ask some questions to you. ** Optional packages ** Download, compile, and install libpri: yes or no (default no)? Download, compile, and install dahdi: yes or no (default no)? Download, compile, and install asterisk-addons: yes or no (default no)? ** Asterisk (15 minutes installation approx.) ** * Retrieving packages... * Compiling packages... * Installing packages... * Done. ** Addition Codec Installation ** * Installing G.729 codec * Installing G.723 codec * Done. ** Spanish Sounds Installation ** * Downloading... * Finished.
Configuración de Asterisk
Una vez instalado Asterisk, ya sea desde paquete de una distribución Linux o desde fuentes, deberemos configurarlo. La configuración Asterisk, como ya conocerás, es bastante compleja y extensa. Si todavía no has leido ningún documento al respecto, es recomendable este libro: [1].
En nuestro caso, la configuración para integrarse en los Asterisk federados puede automatizarse gracias a los datos que hemos conseguido al registrar nuestro servicio en la página web de guifi.net. Por tanto, tenemos 2 opciones para echar a andar nuestra centralita: utilizar el script de auto-configuración, o configurar a mano nuestra centralita Asterisk.
Configuración automática
Para la configuración automática haremos uso de uno de los scripts proporcionados en el repositorio Git que hemos comentado antes. El script se denomina asterisk_configure.sh. Simplemente deberemos ejecutarlo y seguir los pasos que se nos indica. Este es el repositorio GIT donde está el script:
Ejemplo de ejecución:
dave@lateralus:~/dev/voz$ ./asterisk_configure.sh **************************************** ****** Asterisk configuration ********** **************************************** ** We are going to configure your asterisk installation to integrate with guifi.net federated Asterisk. ** WARNING!!! This is going to overwrite your Asterisk configuration files. * Configuration dir: /opt/asterisk/etc/asterisk First of all, we need to ask some questions to you. These are important, please answer carefully. You must have your Asterisk PABX registered as a service on guifi.net, and the Kamailio trunk must be approved by a Kamailio administrator. Read this document if you haven't done it yet: http://es.wiki.guifi.net/wiki/Asterisks_federados:_Administrador_Asterisk Do you understand the pre-requisites? yes Ok, let's go on. Assigned kamailio username: kamailiocas1 Assigned kamailio password: 832lkdslksd8 Assigned prefix (example: 701201XXX): 701201XXX The FQDN (hostname) of your asterisk server: castalia.dyndns-server.com The LOCALNET parameter of your network (example: 10.0.0.0/8): 10.0.0.0/8 Backup your actual Asterisk configuration directory? yes Backing up /opt/asterisk/etc/asterisk to /opt/asterisk/etc/asterisk.2011-07-29...ok. Copying configuration files to asterisk...done! dave@lateralus:~/dev/voz$
Configuración manual
Una vez tenemos el Asterisk instalado desde el script de instalación que se facilita para esta labor habrá que copiar una serie de archivos de configuración al directorio de instalación de Asterisk, y modificar algunas variables generales con la información de autenticación que hemos obtenido registrando nuestro servicio Asterisk en la web de guifi.net.
En el repositorio GIT de los scripts de instalación/configuración Asterisk podemos encontrar las plantillas de los archivos de configuracion:
Veamos cómo deberíamos modificarlos para terminar de configurar nuestra centralita.
sip.conf
- localnet: indicamos la subred en la que se encuentra el servidor
- externhost: si el equipo tiene un FQDN en Internet se lo deberemos asignar en esta variable
- fromdomain: guifi
localnet=XXX.XXX.XXX.XXX/XXX.XXX.XXX.XXX externhost=host.tld fromdomain=guifi
- nat: yes|no dependiendo de si se hace NAT entre Asterisk y los teléfonos IP
[sip-local](!) nat=yes
sip.local.conf
Permite dar de alta extensiones a mano
- username: se corresponde con la extensión que queramos dar de alta
- callerid: nombre que aparecerá en pantalla al llamar
- secret: password asignado a la extensión
[NNXXYYZZZZ](sip-local) username=NNXXYYZZZZ callerid="<nombre>" <NNXXYYZZZZ> secret=<password>
sip.trunk.conf
Fichero que contiene los datos del trunk con Kamailio
- register: cadena para registro contra el Kamailio, contiene username y password
- username: usuario para registro con Kamailio
- password: contraseña para el registro con Kamailio
- nat: yes|no en función si se hace NAT entre Kamailio y Asterisk
- auth: cadena de autenticación contra el Kamailio
; registramos con kamailio register => <username>@sip.guifi.net:<password>@sip.guifi.net/<username> [kamailio] type=peer username=<username> secret=<password> auth=<username>:<password>@sip.guifi.net fromuser=<username> host=sip.guifi.net canreinvite=no context=from-kamailio nat=<yes|no> insecure=port,invite fromdomain=sip.guifi.net qualify=no [kamailio-incoming] type=peer host=sip.guifi.net context=from-kamailio qualify=no
extensions.conf
- PBXID: identificador de PABX ofrecido por el gestor web de guifi.net
- RANGE: rango de extensiones que contiene la PABX Asterisk
[globals] PBXID=<identificador de PABX> RANGE=<rango ID de PABX> SIPTRUNK=kamailio
exten.apps.conf
- *43: sala de echo para comprobar el funcionamiento de los Teléfonos
- *98: Acceso al buzón de voz
- *100: sala de multiconferencia
[apps] ; Acceso a Voicemail exten => *98,1,Answer() exten => *98,n,VoiceMailMain(${CALLERID(num)}) exten => *98,n,Hangup() ; Sala de Echo exten => *43,1,Answer() exten => *43,n,Echo() exten => *43,n,Hangup() ; Sala meetme exten => *100,1,Answer() exten => *100,n,MeetMe(100) exten => *100,n,Hangup()
voicemail.conf
- XXYYZZNNNN => XXXX,,correo@example.tld: extensión y su correspondiente correo al que se le enviará un mail cada vez que se deje un mensaje en el buzón de voz
[default] XXYYZZNNNN => XXXX,,correo@example.tld [..]
XXYYZZNNNN: Extensión larga asignada
XXXX: extensión corta dentro de la PABX
Tareas de mantenimiento
Una vez montado nuestro servidor, es conveniente recoger las nuevas altas de extensiones que se producent en nuestra centralita desde la web, y activarlas. Esta tarea puede ser automatizada con un script que se encargará de conectar a la web de guifi.net, y en base a nuestros datos de centralita, obtener una copia del archivo sip.local.conf que contendrá todas las extensiónes nuevas creadas desde la última ejecución.
En el archivo sip.local.conf están todas las extensiones de nuestra centralita, y para obtenerlo utilizamos un sistema de autenticación donde la contraseña va implícita en la llamada URL. Básicamente, obtenemos la huella md5 de la contraseña del enlace kamailio de la centralita, y utilizamos este hash para obtener el archivo sip.local.conf llamando a la siguiente URL:
http://guifi.net/guifi/pabx/<pabx-service-id>/getcfg/<passwd-md5sum>
Con ello podremos descargar la lista de nuevas extensiones en un proceso automatizado de cron.
Existe un script que nos facilita la labor de generar la URL de obtención del archivo, y de crear un script de actualización del fichero sip.local.conf. Está localizado en el repositorio GIT, como el resto, y se llama generate_cron_job.sh:
Veamos un ejemplo de ejecución:
dave@lateralus:~/dev/voz$ ./generate_cron_job.sh ********************************************* ****** Asterisk cron job generator ********** ********************************************* The node if of this URL 'http://guifi.net/node/40175' is '40175' Insert the node ID of your asterisk service on guifi.net: 12345 Now, insert the password of the kamailio trunk of your asterisk service: hola Your cron script is located here: /tmp/tmp.oavqtmPfN2 Move it to your cron jobs and schedule the execution every 10min. dave@lateralus:~/dev/voz$ cat /tmp/tmp.oavqtmPfN2 #!/bin/bash ASTERISK_CONFIG_DIR=/opt/asterisk/etc/asterisk [ -d "$ASTERISK_CONFIG_DIR" ] || (echo "The asterisk configuration dir is not found."; exit -1) SIPLOCAL=$ASTERISK_CONFIG_DIR/sip.local.conf [ -f "$SIPLOCAL" ] || touch $ASTERISK_CONFIG_DIR/sip.local.conf TMP=$(mktemp) wget --timeout=240 http://guifi.net/guifi/pabx/12345/getcfg/4d186321c1a7f0f354b297e8914ab240 -qO $TMP OK=`cat $TMP|wc -l` NEW=`diff $SIPLOCAL $TMP|wc -l` if [ $OK != "0" ]; then if [ $NEW != "0" ]; then cp $TMP $SIPLOCAL asterisk -rx 'sip reload' fi; fi; rm -f $TMP
Recursos didácticos
Introduccion VoIP Recomendaciones para iniciarse en Asterisk The Future Of Telephony