Universidad de Costa Rica Facultad de Ingenierı́a Escuela de Ingenierı́a Eléctrica Diseño e implementación de una central telefónica IP basada en RaspBerry Pi y Asterisk Por: Jose Pablo Fernandez Zamora Ciudad Universitaria “Rodrigo Facio”, Costa Rica Diciembre 2013 Diseño e implementación de una central telefónica IP basada en RaspBerry Pi y Asterisk Por: Jose Pablo Fernandez Zamora IE-0499 Proyecto eléctrico Aprobado por el Tribunal: M.Sc. Teodoro Willink Castro Profesor guı́a M.Sc. Geovanny Delgado Profesor lector Ph.D. Jaime Cascante Vindas Profesor lector Resumen En este proyecto se busca diseñar e implementar una PBX IP basada en RaspBerry Pi & Asterisk. A su vez determinar de forma teórica y práctica las capacidades básicas que podrı́a ofrecer esta plataforma. Inicialmente se procedió a describir la información existente referente a los posibles resultados que se podrı́an obtener al realizar la implementación de la PBX IP mencionada. Se determinó que no existe una forma teórica de definir esto, debido principalmente al procesador que utiliza RaspBerry Pi. Posteriormente se realizó la implementación de este sistema sin agregar servicios extras que eventualmente podrı́an ofrecerse. Se detallaron todos los pasos seguidos, recolectando información de una amplia variedad de fuentes. Ademas se brindó información referente a las posibles limitantes que pueden existir al momento de considerar de forma errónea el uso de dispositivos de alimentación o almacenamiento. Se describieron las formas en las que es posible implementar Asterisk y se determinó que la forma mas rápida y menos compleja de hacer esta implementación es por medio de dos distribuciones en particular, de las cuales una aún es una versión de prueba. Con base a toda la información consultada también se concluyó que no existe literatura formal que haga referencia a la implementación de Asterisk en RaspBerry Pi. Se hicieron pruebas de desempeño simulando tráfico de llamadas por medio de clientes dentro y fuera de la red local. Con base en los resultados experimentales obtenidos, se hicieron recomendaciones referentes a la cantidad de llamadas simultáneas que puede soportar RaspBerry Pi & Asterisk. Luego se recolectó información referente a servicios adicionales que se podrı́an implementar en esta plataforma. Por último, se implementaron dos de estos servicios: el uso de troncales inalámbricas y la utilización de teléfonos R VoIP marca Cisco. v Índice general Índice de figuras ix Índice de cuadros ix Nomenclatura xi 1 Introducción 1.1 Introducción del informe . . . . . . . . . . . . . . . . . . . . . . 1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Metodologı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 2 2 Marco teórico 2.1 PBX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 RaspBerry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 9 3 RaspBerryPi y Asterisk 13 3.1 Llamadas simultáneas . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 Tiempos de respuesta . . . . . . . . . . . . . . . . . . . . . . . 14 4 Implementación 4.1 Alimentación . . . . . . . . . . 4.2 Memoria de almacenamiento . 4.3 Instalación Asterisk . . . . . . 4.4 Configuración post-instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 16 17 17 19 5 Pruebas de desempeño 21 5.1 SIPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5.2 Comunicaciones usuarios red local . . . . . . . . . . . . . . . . 22 5.3 Comunicaciones usuarios red extendida utilizando Internet . . . 23 6 Funciones adicionales 29 6.1 Descripción de funciones adicionales . . . . . . . . . . . . . . . 29 6.2 Implementación de funciones adicionales . . . . . . . . . . . . . 31 7 Conclusiones y recomendaciones vii 35 8 Anexos 37 8.1 Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 8.2 Pruebas de desempeño . . . . . . . . . . . . . . . . . . . . . . . 60 8.3 Implementación de funciones adicionales . . . . . . . . . . . . . 68 Bibliografı́a 73 viii Índice de figuras 2.1 2.2 2.3 2.4 PBX manual . . . . . . . . . . . . . . . . . . . . . . . Ejemplo escabilidad de Asterisk (Akb77, 2013) . . . . Estructura modular Asterisk . . . . . . . . . . . . . . Configuración Puerto GPIO - RaspBerry Pi (Cynthec 2013) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y Pimoro, . . . . . . . 12 4.1 Diagrama de conexion - PBX IP servicios basicos . . . . . . . . . . 15 5.1 5.2 5.3 5.4 5.5 5.6 5.7 Diagrama de conexion - Pruebas de desempeño . . . . Llamadas generadas simultáneamente - Red local . . . Llamadas generadas alternadas - Red local . . . . . . Carga promedio CPU - Red local . . . . . . . . . . . . Llamadas generadas simultáneamente - Red extendida Llamadas generadas alternadas - Red extendida . . . . Carga promedio CPU - Red extendida . . . . . . . . . . . . . . . . 22 23 24 24 26 26 27 6.1 Cambios en configuración extensión 100 - FreePBX . . . . . . . . . 34 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 8.11 8.12 Configuración Configuración Configuración Configuración Configuración Configuración Configuración Configuración Configuración Configuración Configuración Configuración . . . . . . . . . . . . 49 50 51 52 54 56 56 58 59 60 69 70 Caracterı́sticas RaspBerry Pi . . . . . . . . . . . . . . . . . . . . . 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . avanzada - FreePBX . . . . . . . . . . . . . . . SIP - FreePBX . . . . . . . . . . . . . . . . . . IAX - FreePBX . . . . . . . . . . . . . . . . . . extensión SIP - FreePBX . . . . . . . . . . . . extensión IAX2 - FreePBX . . . . . . . . . . . enlace al Servidor 2 Parte 1 - FreePBX . . . . enlace al Servidor 2 Parte 2 - FreePBX . . . . ruta de salida al Servidor 2 Parte 1 - FreePBX ruta de salida al Servidor 2 Parte 2 - FreePBX ruta de entrada - FreePBX . . . . . . . . . . . troncal GSM - FreePBX . . . . . . . . . . . . . ruta de salida GSM - FreePBX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6 9 Índice de cuadros 2.1 ix 3.1 Requerimientos mı́nimos recomendados - Asterisk . . . . . . . . . . 14 8.1 8.2 8.3 8.4 8.5 8.6 Parámetros extensiones SIP . . . . . . . . . . . . . Parámetros extensiones IAX2 . . . . . . . . . . . . Parámetros enlaces IAX2 - Configuración saliente . Parámetros enlaces IAX2 - Configuración entrante Numeración local de extensiones en cada servidor . Parámetros de configuración rutas de salida . . . . 53 53 55 55 57 58 x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nomenclatura <x> Todo texto escrito entre los signos mayor que y menor que, debe sustituirse por la variable descrita por x. texto Texto que debe ser ingresado en la terminal o lı́nea de comandos de Asterisk. IP Por sus siglas en inglés, “Internet Protocol”. Es un protocolo usado para la comunicación de datos a través de una red. VoIP Por sus siglas en inglés, “Voice over IP”. Grupo de recursos que hacen posible que la señal de voz viaje a través de Internet empleando un protocolo IP. PBX Por sus siglas en inglés, “Private Branch Exchange”. Es cualquier central telefónica conectada directamente a la red pública de telefonı́a por medio de lı́neas troncales para gestionar además de las llamadas internas, las entrantes y salientes con autonomı́a sobre cualquier otra central telefónica. PABX Por sus siglas en inglés, “Private Automatic Branch Exchange”. Es una PBX automática. PCI Por sus siglas en inglés, “Peripheral Component Interconnect”. Es un bus de ordenador estándar para conectar dispositivos periféricos directamente a su placa base. PSTN Por sus siglas en inglés, “Public Switched Telephone Network”. Conjunto de elementos constituido por todos los medios de transmisión y conmutación necesarios para enlazar a voluntad dos equipos terminales mediante un circuito fı́sico que se establece especı́ficamente para la comunicación y que desaparece una vez que se ha completado la misma. Se trata por tanto, de una red de telecomunicaciones conmutada. IRC Por sus siglas en inglés, “Internet Relay Chat”. Es un protocolo de comunicación en tiempo real basado en texto, que permite debates entre dos o más personas. xi SMS Por sus siglas en inglés, “Short Message Service”. Servicio disponible en los teléfonos móviles que permite el envı́o de mensajes cortos (también conocidos como mensajes de texto) entre teléfonos móviles . API Por sus siglas en inglés, “Application Programming Interface”. Es el conjunto de funciones y procedimientos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. FXS Por sus siglas en inglés, “Foreing Exchange Station”. Es el conector en una central telefónica o en la pared de nuestro hogar, que permite conectar un teléfono analógico estándar. ISDN Por sus siglas en inglés, “Integrated Services Digital Network”. Red que procede por evolución de la Red Digital Integrada (RDI) y que facilita conexiones digitales extremo a extremo para proporcionar una amplia gama de servicios, tanto de voz como de otros tipos, y a la que los usuarios acceden a través de un conjunto de interfaces normalizados. SIP Por sus siglas en inglés, “Session Initiation Protocol”. Es un protocolo desarrollado con la intención de ser el estándar para la iniciación, modificación y finalización de sesiones interactivas de usuario donde intervienen elementos multimedia como el vı́deo, voz, mensajerı́a instantánea, juegos en lı́nea y realidad virtual. H.323 Es un conjunto de normas ITU (“International Telecommunication Union”) para comunicaciones multimedia que hacen referencia a los terminales, equipos y servicios estableciendo una señalización en redes IP. IAX Por sus siglas en inglés, “Inter-Asterisk eXchange protocol”. Es uno de los protocolos utilizado por Asterisk para manejar conexiones VoIP entre servidores Asterisk, y entre servidores y clientes que también utilizan protocolo IAX. MGCP Por sus siglas en inglés, “Media Gateway Control Protocol”. Es un protocolo interno de VoIP cuya arquitectura se diferencia del resto de los protocolos VoIP por ser del tipo cliente ? servidor. xii RAM Por sus siglas en inglés, “Random-Access Memory”. Se utiliza frecuentemente para describir a los módulos de memoria utilizados en los computadores personales y servidores. . PoE Por sus siglas en inglés, “Power over Ethernet”. es una tecnologı́a que incorpora alimentación eléctrica a una infraestructura LAN estándar. Permite que la alimentación eléctrica se suministre a un dispositivo de red usando el mismo cable que se utiliza para la conexión de red. SD Por sus siglas en inglés, “Secure Digital”. Formato de tarR jeta de memoria inventado por Panasonic. WiFi Por sus siglas en inglés, “Wireless Fidelity”. Es un mecanismo de conexión de dispositivos electrónicos de forma inalámbrica. USB Por sus siglas en inglés, “Universal Serial Bus”. Estándar industrial que define los cables, conectores y protocolos usados en un bus para conectar, comunicar y proveer de alimentación eléctrica entre ordenadores y periféricos y dispositivos electrónicos. ARM Por sus siglas en inglés, “Advanced RISC Machine”. Es una familia de microprocesadores producidos por la empresa ARM Holdings. NTP Por sus siglas en inglés, “Network Time Protocol”. Es un protocolo de Internet para sincronizar los relojes de los sistemas informáticos a través del enrutamiento de paquetes en redes con latencia variable. SSH Por sus siglas en inglés, “Secure SHell”. Es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. URL Por sus siglas en inglés, “Uniform Resource Locator”. Es una secuencia de caracteres, de acuerdo a un formato modélico y estándar, que se usa para nombrar recursos en Internet para su localización o identificación. LAN Por sus siglas en inglés, “Local Area Network”. Son redes de propiedad privada, de hasta unos cuantos kilómetros de extensión. xiii WAN Por sus siglas en inglés, “Wide Area Network”. Son redes que se extienden sobre un área geográfica extensa. Las WAN pueden abarcar ciudades, estados, paı́ses o continentes. G.711 Es un estándar de codificación digital para representar una señal de audio en frecuencias de la voz humana, mediante palabras de 8 bits de resolución, con una tasa de 8000 muestras por segundo. Por tanto, el codificador G.711 proporciona un flujo de datos de 64 Kbit/s. GSM Por sus siglas en inglés, “Global System for Mobile communications”. Es un estándar de codificación digital que consume casi la quinta parte de ancho de banda que G.711. Este proporciona un flujo de datos de 13kbit/s. GPIO Por sus siglas en inglés, “General Purpose Input/Output”. Es es un pin genérico en un chip, cuyo comportamiento se puede controlar por el usuario en tiempo de ejecución. UAC Por sus siglas en inglés, “User Agent Clients”. En una comunicación SIP, se define como agente de usuario cliente a los usuarios que realizan una petición de comunicación. UAS Por sus siglas en inglés, “User Agent Servers”. En una comunicación SIP, se define como agentes de usuario servidor cuando se recibe una petición de comunicación. xiv 1 Introducción 1.1 Introducción del informe A medida de que pasan los años, el mundo de las telecomunicaciones depende mayormente de sistemas de comunicación VoIp (voz sobre IP), esto debido principalmente al elevado costo que conlleva el tráfico internacional por medio de la telefonı́a convencional. Sin embargo, una de las barreras para la transición a telefonı́a VoIP es el costo de los dispositivos necesarios para adoptar esta tecnologı́a. Con este proyecto se busca desarrollar una central telefónica IP basada principalmente en software de código abierto (Asterisk 1 ) y hardware de bajo costo (RaspBerry Pi 2 ), dirigido a micro y pequeñas empresas que necesitan migrar a dicha tecnologı́a sin que esto involucre gastos excesivos e inclusive innecesarios. Para facilitar la comprensión de esta propuesta, en este documento se inicia describiendo todas las capacidades con las que cuenta el hardware (RaspBerry Pi), posteriormente se describen los servicios básicos que por sı́ mismo podrı́a proporcionar el software (Asterisk ) y luego se ajustan las capacidades de estos servicios con base a las capacidades con las que cuenta el hardware seleccionado (RaspBerry Pi & Asterisk ). Luego de esto se describe la forma en la que se implementa esta plataforma y se documentan todas las pruebas realizadas con el fin de analizar la congruencia con las capacidades teóricas determinadas anteriormente. Posteriormente se describen capacidades adicionales posibles de implementar y se implementan algunas de estas capacidades adicionales. Por último, se realizan conclusiones y recomendaciones que se consideren pertinentes. 1.2 Objetivos Objetivo general Diseñar e implementar una central telefónica IP basada en RaspBerry Pi y Asterisk. 1 2 http://www.asterisk.org/ http://www.raspberrypi.org/ 1 2 1 Introducción Objetivos especı́ficos Para el desarrollo de este proyecto se establecieron los siguientes objetivos especı́ficos: • Determinar las capacidades básicas que puede ofrecer una central telefónica IP basada en una plataforma de RaspBerry PI con [ Asterisk]. • Implementar una central telefónica con las capacidades descritas en el objetivo anterior. • Describir capacidades adicionales que se pueden implementar en esta plataforma. • Implementar algunas de las capacidades adicionales en esta plataforma. 1.3 Metodologı́a El desarrollo del trabajo incluyó los siguientes pasos y procedimientos, listados en secuencia: 1. Identificación de las capacidades del hardware de RaspBerry PI. 2. Descripción de los requerimientos de los servicios básicos proporcionados por Asterisk. 3. Análisis teórico de la capacidad de los servicios básicos que podrı́a proporcionar Asterisk siendo ejecutado sobre RaspBerry PI. 4. Implementación de los servicios básicos proporcionados por una central telefónica IP basada en RaspBerryPi & Asterisk 5. Ejecución de pruebas sobre la central telefónica IP implementada. 6. Comparación de resultados del análisis teórico con las pruebas experimentales obtenidas. 7. Identificación de servicios adicionales que se podrı́an incluir en la central telefónica IP implementada. 8. Implementación de algunos servicios adicionales a la central telefónica IP implementada originalmente. 2 Marco teórico En este capı́tulo se describen las principales caracterı́sticas de PBX, RaspBerryPi y Asterisk, esto debido principalmente a que son los temas en los que se fundamenta este proyecto. 2.1 PBX Siglas en inglés de Private Branch Exchange. Según Rosa (2009) no es más que un panel de conexiones que se instalaba en las empresas con el fin de enlazar manualmente canales de comunicación telefónicos. En la figura 2.1 se muestra una PBX manual. Conforme pasaba el tiempo se fueron desarrollando nuevos descubrimientos tecnológicos y alrededor de 1960 empezaron a aparecer las primeras PBX automáticas, las cuales en su momento se conocieron como PABX (Private Automatic Branch Exchange) en donde la conmutación ahora se realizaba por medio de dispositivos electromecánicos o circuitos integrados. El desarrollo de la PABX permitió ventajas principalmente en rapidez y regularidad en el establecimiento de las comunicaciones. Sin embargo, debido a la popularidad de la PBX se le siguió llamando de esta manera a los sistemas que realizaban la conmutación de forma automática (PABX). Posteriormente a esto debido a la intervención del transistor y el de la electrónica digital nace la telefonı́a digital, las PBX se implementan con electrónica digital haciéndose más complejas. Actualmente las PBX han dado un paso más allá, a tal grado de llegar a ser implementadas mediante software y ofrecer servicios como conferencias, buzón de voz, operadora automática, administración remota, etc. Actualmente una PBX se define como una central telefónica conectada a una red pública por medio de lı́neas troncales la cual gestiona además de las llamadas internas, las llamadas entrantes y salientes. Es importante destacar que comúnmente se le denomina PBX a cualquier central telefónica, lo cual es erróneo. Aunque las centrales telefónicas y las PBX administran tráfico telefónico, la PBX gestiona las llamadas salientes y una central telefónica únicamente interconectarı́a el terminal con una lı́nea externa. 3 4 2 Marco teórico Figura 2.1: PBX manual 2.2 Asterisk Según Bryant et al. (2013), Asterisk es actualmente la PBX más exitosa en el mundo y ya es una tecnologı́a aceptada en la industria de las telecomunicaciones. Asterisk es una PBX por software que puede ser ejecutado sobre cualquier ordenador estándar siempre y cuando cumpla con las capacidades de procesamiento y almacenamiento mı́nimas. Este software además está basado en el concepto de software libre, lo cual no lo convierte únicamente en una aplicación gratuita sino también en una aplicación sin restricciones para su ejecución, distribución e incluso modificación. Fue creada por Mark Spencer y actualmente su principal desarrollador es Digium 1 . Es una aplicación multiplataforma, sin embargo, la plataforma nativa es Linux, la cual además es en la que se cuenta con mayor soporte. La gran diferencia entre Asterisk y otros software propietarios, es que Asterisk no tiene restricciones en cuanto a la forma en la que debe funcionar un sistema de telefonı́a o bien que tecnologı́as se deben emplear. Debido a su estructura modular y la su gran flexibilidad, es posible incorporar casi cualquier tecnologı́a a esta aplicación. Sin embargo, una de sus desventajas es que no es simple de configurar, por lo que es necesario contratar a un experto en el tema al momento de hacer la implementación, o adquirir las habilidades necesarias para realizar esta tarea. 1 http://www.digium.com/ 2.2. Asterisk 5 Principales ventajas Según Garcia (2008) entre las principales ventajas de Asterisk podemos destacar: • Reducción de costos: Esto no se refiere únicamente a que la licencia es de código abierto, sino también en factores determinantes como la unificación de la red, la utilización de plataformas para servidores estándar (por medio del puerto PCI), etc. • Funcionalidad: Asterisk ofrece una variedad de servicios inclusive mayor a la que muchos otros programas propietario ofrecen por lo que es otra de sus ventajas. • Escalabilidad: El sistema es tan flexible que ofrece inclusive la posibilidad de paralelizar sus servicios en diversos servidores. Además es posible conectar cada PBX Asterisk con otras, lo que hace posible implementar cualquier topologı́a de red que sea necesaria (multi-departamental, multi-sedes, etc). En la figura 2.2 se muestra un ejemplo. • Inter-operabilidad y Flexibilidad: Esto hace referencia a que soporta una gran cantidad de estándares telefónicos tanto analógicos como para IP. Lo que permite una amplia posibilidad de interacción con otros sistemas. Interfaces Hasta ahora se ha mencionado a Asterisk como una PBX por software que puede correr sobre cualquier ordenador estándar, sin embargo, parte importante de las PBX es la posible interactuar con troncales analógicas y está claro que un ordenador estándar no cuenta con puertos fı́sicos que nos permitan administrar estos canales. Según Bryant et al. (2013), cuando el proyecto Asterisk nació, habı́an otros posibles proyectos de telefonı́a de código abierto, uno de esos proyectos era la asociación de Asterisk con Zapata Telephony Project para el desarrollo de interfaces PSTN (public switched telephone network). Hoy en dı́a se ha incrementado la cantidad de fabricantes como también la variedad de tipos de interfaces, entre los más destacados podemos mencionar a Digium, OpenVox2 , Pika3 , Sangoma4 , Dialogic5 , etc. 2 http://www.openvox.cn/ http://www.pikatechnologies.com/ 4 http://www2.sangoma.com/ 5 http://www.dialogic.com/ 3 6 2 Marco teórico Figura 2.2: Ejemplo escabilidad de Asterisk (Akb77, 2013) Comunidad Bryant et al. (2013) afirman que otra de las indiscutibles ventajas con las que cuenta Asterisk actualmente es la extensa y apasionada comunidad de desarrollo y soporte (dirigida por Digium). Lo cual nace a raı́z de la gran cantidad de usuarios satisfechos. Además la comunidad cuenta diversos medios de comunicación como listas de correos, sitios wiki, canales IRC, etc. Los cuales facilitan la interacción con el resto de usuarios. Servicios Según Garcia (2008) algunas de las principales servicios que ofrece Asterisk son: • Receptor de alarmas 2.2. Asterisk 7 • Asistencia automatizada • Autentificación • Lista negra • Grabación de llamadas • Monitoreo de llamadas • Llamadas en espera • Recuperación de llamadas • Guı́a de llamadas • Transferencia de llamadas • Identificación de usuarios • Conferencias • Integración de base de datos • Marcado por nombre • Lógica flexible de las extensiones • Lista de directorio interactivo • Respuesta de voz interactivo • Mensajerı́a SMS • Detección de conversaciones Módulos Como se ha mencionado anteriormente la estructura de Asterisk es modular. Es como una estructura de legos en donde cada lego (modulo) cumple una función en especı́fico y al unirlos todos obtenemos un sistema con una amplia diversidad de servicios, desde los más simples hasta los más complejos(Bryant et al., 2013). Según Garcia (2008), dependiendo de su función los módulos pueden agruparse en los siguientes grupos: • Núcleo de PBX: Aquı́ se agrupan todos los módulos relacionados con un sistema de conmutación de intercambio de rama privada o bien las capacidades esenciales de una PBX. 8 2 Marco teórico • Lanzador de aplicaciones: Este grupo contiene aplicaciones que mejoran servicios y van un poco más allá de los servicios primitivos de una PBX. Ejemplo de esto puede ser voicemail, lista de directorios, mensajerı́a SMS, grabación de llamadas, etc. • Codecs y traductor de codecs: Contiene todos los codificadores y decodificadores con los que dispone la PBX para comunicarse con el resto de dispositivos. Estos son indispensables para realizar un eficiente uso del ancho de banda (G723, G729, iLBC, GSM, LPC10). • Gestor de entra y salida: Contiene organización de tareas de bajo nivel y sistemas de operación. Su función primordial es mantener un buen rendimiento ante cambios en la demanda de servicios. • Cargador de módulos API (Application Programming Interface): Aquı́ se agrupan los módulos que permiten el uso flexible de las aplicaciones para ejecutar las acciones requeridas. Además permite el desarrollo de aplicaciones de acuerdo a requerimientos especı́ficos. Se clasifican en 4 tipos: – Canal API – Aplicación API – Traductor de codec API – Formato de archivo API • Canales: Contiene todos los módulos necesarios para la utilización de diversos canales de comunicación (FXS, ISDN, Bluetooth, ITU, PSTN, etc). • Protocolos: Contiene información de señalización al momento de establecer comunicación y además determinar punto de destino (SIP, H323, IAX, MGCP, etc). En ocasiones maneja aspectos relacionados con tono, tiempo de repique, identificación de llamadas, etc. En la figura 2.3 se muestra gráficamente la estructura de Asterisk, en donde PBX Core representa el grupo de módulos con las funciones más primitivas de Asterisk, todos los rectángulos azules los módulos que conforman el grupo de protocolos, y los rectángulos morados y rojos el resto de agrupaciones según su función. 2.3. RaspBerry Pi 9 Figura 2.3: Estructura modular Asterisk (Asterisk.do, 2013) 2.3 RaspBerry Pi Según RaspBerryPi-Foundation (2013), RaspBerry Pi es un ordenador de placa reducida de bajo costo, desarrollada en el Reino Unido, cuyo propósito inicialmente era promover la educación de adultos y niños principalmente en el campo de la informática. En el cuadro 2.1 se resumen las principales caracterı́sticas de este dispositivo. Puntos a considerar: • No es posible iniciar el sistema sin una tarjeta SD. • No existe ningún interruptor de encendido/apagado. • No cuenta con un reloj de tiempo real. • La memoria RAM no es removible ni intercambiable. • No soporta PoE (Power over Ethernet). 10 2 Marco teórico • El tamaño mı́nimo recomendado para la tarjeta SD es 2GB. Además se le han hecho pruebas con memorias de hasta 32GB y ha funcionado correctamente. • Ninguno de los modelos cuenta con Wi-Fi (es posible incorporar vı́a USB). • Para incrementar la cantidad de puertos USB se recomienda el uso de un HUB con alimentación independiente. Además este ordenador puede comunicarse con dispositivos externos mediante el conector GPIO incorporado. En la figura 2.4 se muestra información recopilada por Cyntech Components6 y Pimoroni7 acerca de la estructura del conector. En donde es posible observar que este cuenta con 4 pines de alimentación (2 a 5V y 2 a 3.3V), 5 pines a tierra y 17 pines entrada/salida. Los pines de entrada/salida están divididos en 5 secciones dependiendo de las capacidades especiales o uso predeterminado para los mismos. A continuación se describe dicha división y el uso de destinado para cada uno(Cynthec y Pimoro, 2013): 1. I 2 C(Inter-Integrated Circuit):Es una interfaz de comunicación de baja velocidad (usualmente de 10kbit/s hasta 100kbit/s) originalmente diseñada para la comunicación entre circuitos integrados. Solo requiere dos lı́neas para transmitir información, SDA para datos y SCL para el reloj. 2. CLK: Se genera una señal de reloj de onda cuadrada para uso general con una frecuencia alrededor de 75MHz. 3. SPI(Serial Peripheral Interface Bus): Conector serial sincrónico de dos vı́as. El tipo de comunicación es entre un dispositivo maestro y otro esclavo en donde el dispositivo maestro provee la señal de sincronı́a. La información se transfiere por medio de los puertos MOSI y MISO. Cada transmisión está sincronizada por el pulso en SCLK. 4. UART(Universal Asynchronous Receiver/Transmitter):Este es un método de transmisión de datos bajo conexión en serie. Cada uno de los dispositivos de comunicación contiene un registro de desplazamiento que convierte los bytes de datos que se transmiten en un flujo de bits. 6 http://www.cyntech.co.uk - Proveedor especializado en componentes electromecánicos para una variedad de fabricantes lideres de la industria. 7 http://shop.pimoroni.com - Distribuidor de RaspBerry Pi y componentes adicionales. 2.3. RaspBerry Pi 11 Cuadro 2.1: Caracterı́sticas RaspBerry Pi Descripción M odeloA M odeloB Precio CPU GPU RAM Memoria Puertos USB Salida de Video Salida de Sonido Red Local Consumo (tı́pico) Alimentación Dimensiones Sistema operativo $25 ARM1176JZF-S a 700MHz Videocore 4 256MB Puerto SD 1 RCA y HDMI Jack de 3.5mm y HDMI No disponible 300mA 5V - puerto MicroUSB 85.60mm x 56mm x 21mm Fedora, Debian y ArchLinux $35 ARM1176JZF-S a 700MHz Videocore 4 512MB Puerto SD 2 RCA y HDMI Jack de 3.5mm y HDMI Ethernet 10/100 (RJ45) 700mA 5V - puerto MicroUSB 85.60mm x 56mm x 21mm Fedora, Debian y ArchLinux 5. PWM(Pulse-width modulation):Esta es una manera de controlar la cantidad de energı́a entregada a un dispositivo por medio de rápidas interrupciones. Tı́picamente miles de veces por segundo. Este pin puede ser utilizado para controlar motores, leds, entre otros. 12 2 Marco teórico Figura 2.4: Configuración Puerto GPIO - RaspBerry Pi (Cynthec y Pimoro, 2013) 3 RaspBerryPi y Asterisk Este capı́tulo busca determinar las capacidades básicas que puede ofrecer una central telefónica IP basada en RaspBerry Pi & Asterisk. A continuación se describe por secciones toda la información recolectada referente a los posibles resultados y aspectos a considerar luego de ejecutar Asterisk en RaspBerry Pi. 3.1 Llamadas simultáneas En cuanto a PBX o centrales telefónicas este aspecto constituye uno de los parámetros primordiales, dado que determina las capacidades de comunicación simultáneas que es soportado por el equipo. Este parámetro dependiendo del tráfico de llamadas simultáneas y total de colaboradores en una empresa puede ser traducido en el total de usuarios (no simultáneos) para los cuales es posible brindar una solución de comunicación. Lo indicado anteriormente significa que la cantidad de llamadas simultáneas que puede administrar una central telefónica no necesariamente equivale a la cantidad de usuarios que está puede administrar. Pues para una empresa con 100 usuarios en donde el tráfico estimado es de 7 llamadas simultáneas significa que una central telefónica que soporte hasta 10 llamadas simultáneas seria capaz de administrar poco más de 100 usuarios. Sin embargo, para otra empresa en donde únicamente se cuenta con 10 usuarios y el tráfico de llamadas sigue siendo 7 llamadas simultáneas, la misma central telefónica descrita anteriormente únicamente podrá brindar una solución adecuada para poco más de 10 usuarios. La diferencia entre llamadas simultáneas y usuarios adquiere especial importancia para determinar a que sectores va dirigida la solución en estudio. Meggelen et al. (2007) brinda una tabla con requerimientos mı́nimos recomendados y la cantidad llamadas simultáneas soportadas, en donde además aclaran que los valores son muy conservadores y que no son definitivos. En el cuadro 3.1 se muestra la información indicada. En cuanto a las capacidades de RaspBerry Pi comparadas con las del cuadro 3.1 es importante hacer algunas observaciones: 13 14 3 RaspBerryPi y Asterisk Cuadro 3.1: Requerimientos mı́nimos recomendados - Asterisk Propósito Número de canales Mı́nimo recomendado Sistema como hobby SOHO (pequeña oficina/oficina en casa) Sistema para una pequeña empresa Sistema mediano/grande No más de 5 5 a 10 hasta 25 más de 25 400MHz x86, 256 MB RAM 1 GHz x86, 512 MB RAM 3GHz x86, 1GB RAM Dual CPUs o múltiples servidores • Todos los procesadores indicados en la tabla son arquitectura x86 y el procesador de RaspBerry Pi es ARM. Según Lyzanor (2012) los procesadores x86 están basados en arquitectura CISC (Complex Instruction Set Computing), lo que significa que son diseñados para instrucciones complejas, simultáneas y ejecución lenta. Por otro lado los procesadores ARM son estructura RISC (Reduced Instruction Set Computer) cuyo objetivo es facilitar el paralelismo en la ejecución de instrucciones y permitir realizar tareas de menor tamaño con procesos más cortos lo que conlleva a disminución de energı́a empleada. Dado que la arquitectura x86 tiene ventajas sobre ARM relacionadas al rendimiento es necesario aplicar alguna equivalencia para hacer compatibles los resultados del cuadro 3.1 a las capacidades de RaspBerry Pi. Sin embargo, dicha equivalencia no existe por lo que el cuadro 3.1 puede ser utilizado únicamente como referencia. En el capı́tulo siguiente se busca determinar dicha capacidad de forma experimental. • La memoria RAM con la que cuenta RaspBerry Pi es la recomendada para equipos SOHO. 3.2 Tiempos de respuesta Según Meggelen et al. (2007) las necesidades de Asterisk son similares a las de una aplicación embebida de tiempo real. Esto debido principalmente a que debe tener prioridad al momento de acceder al procesador y buses del sistema. En sistemas pequeños esto no podrı́a causar inconvenientes, sin embargo, para sistemas de mayor capacidad puede provocar problemas de calidad en el audio. Debido a esto, independientemente del hardware o sistema operativo en el que se ejecuta Asterisk es importante determinar adecuadamente los privilegios de ejecución del mismo. 4 Implementación En esta sección se busca detallar las consideraciones que se hicieron y los pasos que se siguieron para implementar una central telefónica IP basada en RaspBerry Pi & Asterisk. Dispositivos utilizados: • RaspBerry Pi versión B. R • Cargador marca Enercellmodelo 2301775. R • Memoria microSDHC de 16GB clase 4 marca Silicon Powercon un adaptador microSD-SD de la misma marca. En la figura 4.1 se muestra el diagrama de conexión utilizado durante la implementación. A continuación se describen todos los aspectos relevantes a la implementación, en donde el orden de las secciones representa la secuencia cronológica realizada: Figura 4.1: Diagrama de conexion - PBX IP servicios basicos 15 16 4 Implementación 4.1 Alimentación RaspBerry Pi Según RaspBerryPi-Foundation (2013) el consumo de corriente es aproximadamente de 300mA y 700mA para las versiones A y B respectivamente, en donde se consideró el uso del dispositivo de red y periféricos USB. En cuanto al nivel de tension este debe ser 5V y el tipo de conector debe ser MicroUSB. Debido a esto es indispensable tener una fuente de alimentación que por lo menos proporcione la corriente requerida de acuerdo al modelo que tengamos. De no cumplirse la corriente mı́nima requerida, un error tı́pico es que el dispositivo no encienda o bien que los periféricos como el ratón o teclado no funcionen adecuadamente. Para esta implementación se utilizó una RaspBerry Pi versión B por consiR guiente una fuente de poder marca Enercellmodelo 23017751 con capacidad de proveer hasta 1.2A a 5V. Por último es importante agregar que según RaspBerryPi-Foundation (2013), RaspBerry Pi si puede ser alimentado por medio de baterı́as (4 x AA), sin embargo, no por PoE2 (por si misma). Dispositivos externos (USB) Este es un aspecto de gran relevancia debido principalmente a que normalmente cuando se utiliza dispositivos USB en computadores ordinarios rara vez se piensa en el consumo de los dispositivos o bien en las limitaciones que tenga nuestro ordenador para alimentarlos. En ordenadores de placa reducida como RaspBerry Pi en donde se diseña principalmente con el fin de mantener un consumo energético bajo, existen limitaciones en cuanto a la cantidad de corriente que este puede transmitir. Todo lo dicho anteriormente se resume principalmente en que cuando se deba conectar dispositivos USB como módemes o discos duros es indispensable para un correcto funcionamiento del dispositivo el uso de un hub USB con alimentación independiente, para que de esta forma el dispositivo se energice por medio del hub y no desde el RaspBerry Pi. 1 R Este dispositivo puede ser adquirido en cualquier sucursal de RadioShackcon un precio equivalente a $21. 2 Power Over Ethernet 4.2. Memoria de almacenamiento 4.2 17 Memoria de almacenamiento Como ya se mencionó anteriormente RaspBerry Pi cuenta con un puerto SD para este propósito. Las memorias SD (en sus siglas en inglés Secure Digital) R Según SDes un formato de tarjetas de memorias inventado por Panasonic. Association (2013) las memorias SD se clasifican principalmente de acuerdo a su capacidad de almacenamiento, velocidad en el bus y la velocidad de transferencia. • Capacidad de almacenamiento: Se clasifica en SD, SDHC o SDXD con una capacidad máxima de 2GB, 32GB y 2TB respectivamente. • Velocidad en el bus: Se clasifica en normal speed, high speed, UHS-I y UHS-II con velocidades de bus de 12.5MB/s , 25MB/s y 156MB/s respectivamente. • Velocidad de transferencia: Esta clasificación garantiza la velocidad mı́nima de transferencia. Para speed class3 se clasifican en clase 2, 4, 6 y 10 en donde cada una equivale a 2MB/s, 4MB/s, 6MB/s y 10MB/s respectivamente. Según RaspBerryPi-Foundation (2013) la capacidad de almacenamiento mı́nima recomendada es de 4GB, además se han realizado pruebas exitosas con memorias de hasta 32GB lo cual implica que se debe usar una memoria SDHC. En cuanto a la velocidad en el bus ninguna representa limitaciones de desempeño para RaspBerryPi por lo que se recomienda normal speed (menor precio). Por último, la velocidad de transferencia si puede afectar el desempeño al momento de que el procesador intente acceder a los datos y dicha velocidad sea limitada por lo que se recomienda clase 10. Para esta implementación se utilizó una microSDHC de 16GB clase 4 marR ca Silicon Powercon un adaptador microSD-SD de la misma marca. 4.3 Instalación Asterisk Como ya se mencionó en el capı́tulo 2, Asterisk es una aplicación multiplataforma, lo que significa que puede ser ejecutada sobre diferentes sistemas operativos. Sin embargo, la plataforma nativa es Linux y se recomienda la ejecución de esta aplicación en dicha plataforma. Debido a lo anterior, para esta implementación se utilizó Linux como sistema operativo, en particular la distribución recomendada para RaspBerry Pi, raspbian. 3 Existe otra clasificación para UHS class. 18 4 Implementación Hay muchas formas de instalar Asterisk, en esta sección se describen dos. Una la cual se recomienda para sistemas que necesiten ser implementados de forma muy rápida y fácil, y otra requiere un mayor tiempo de implementación, además es un poco más compleja pero es ideal para conocer la estructura y el funcionamiento primitivo de Asterisk. Los alcances de esta sección son hasta la instalación de Asterisk. En otras secciones se detallará la forma de configuración de ciertas funciones, en donde en dichas etapas se tomará como primicia que la instalación se ha realizado con base a una distribución de Linux con Asterisk integrado, en particular RasPBX. En la implementación se realizó la instalación en RaspBerry Pi utilizando una distribución de Linux con Asterisk integrado. Sin embargo, también se realizó la instalación de una distribución de debı́an (cubian4 ) y posteriormente Asterisk en un ordenador de placa reducida llamado Cubieboard2 5 con el fin de hacer pruebas de comunicación entre la PBX montada en RaspBerry Pi y la PBX montada en Cubieboard2. Instalando una distribución de Linux con Asterisk integrado Según Bryant et al. (2013) se han creado muchas distribuciones basadas fundamentalmente en la ejecución de Asterisk. Estas distribuciones han ganado tanta popularidad que las personas suelen incluso confundirlas con el mismo Asterisk. Normalmente estas distribuciones incluyen Asterisk, las dependencias fundamentales de Asterisk, una interfaz de administración WEB, una compleja base de datos y un conjunto de instrucciones para que se puedan realizar cambios en la configuración. Existen además distribuciones que inclusive ya tienen integrado el sistema operativo. Entre las distribuciones más conocidas podemos mencionar: • Asterisk NOW • Elastix • Trixbox • FreePBX Distro • PBX in a Flash 4 5 http://cubian.org/ http://cubieboard.org/ 4.4. Configuración post-instalación 19 Sin embargo, no todas estas distribuciones están disponibles para RaspBerry Pi, al recopilar información respecto al tema únicamente se encontraron las siguientes: • RasPBX • Trixbox De las cuales Trixbox aún se encontraba en una versión beta. Debido a ello para esta implementación se realizó la instalación de RasPBX. RasPBX está basada en Rasbian (Debian7/Wheezy) e incluye: • Asterisk 11.5.0 • FreePBX 2.11.0.10 Los pasos seguidos para esta instalación se detallan en los anexos. Instalando Raspbian y posteriormente Asterisk Esta es otra alternativa al momento de instalar Asterisk en RaspBerry Pi. Para la implementación no se considero este método, debido a que por ser una instalación mas primitiva y requiere mas tiempo. Sin embargo, en la sección de anexos se detallan los pasos recomendados para realizar esta instalación. 4.4 Configuración post-instalación Luego de realizar la instalación de RasPBX fue necesario hacer lo siguiente: • Configuración Raspi-Config. • Instalar programas relacionados al servidor NTP. • Asignación IP estática. • Actualización del sistema. • Configuración inicial Asterisk. • Configuración de extensiones. • Configuración de troncales. • Configuración de rutas de entrada/salida. La descripción y los pasos seguidos para realizar las acciones antes indicadas se detallan en los anexos. 5 Pruebas de desempeño El objetivo de esta sección es determinar el comportamiento de RaspBerry Pi & Asterisk posteriormente a la generación de tráfico VoIp, en particular utilizando protocolo SIP. Para lograr este propósito se utilizó una herramienta llamada SIPP, es de código libre exclusivo para pruebas y generación de tráfico sobre el protocolo SIP. Esta incluye un par de escenarios elementales para agentes de usuario UAC y UAS. Esta herramienta permite establecer y liberar múltiples llamadas utilizando los métodos INVITE y BYE. Además permite ejecutar escenarios personalizados a partir de archivos XML, entre ellos escenarios con tráfico UDP. Se realizaron pruebas utilizando dos codificadores, G711 y GSM. Se escogieron estos debido a que el primero tiene una buena calidad de audio, requiere bajo procesamiento y alto ancho de banda, por lo que se recomienda para enlaces dentro de la red local. El segundo por su parte muestra un deterioro en la calidad del audio, además requiere más procesamiento y un menor ancho de banda, por lo que es ideal para aplicaciones móviles o bien enlaces desde la red extendida. En la figura 5.1 se muestra el diagrama de conexión utilizado durante estas pruebas. En las subsección siguiente se indica todo lo referente a la aplicación utilizada para generar tráfico, además se muestra el código utilizado en cada uno de los escenarios. En las subsecciones siguientes se muestran y analizan los resultados obtenidos. 5.1 SIPP Como ya se mencionó anteriormente, SIPP es un generador de tráfico SIP el cual utiliza agentes de usuario UAC y UAS (esto básicamente hace referencia a desde donde se está generando el tráfico). En este caso el tráfico se generó desde un dispositivo cliente (UAC) con linux-debian, por lo que el procedimiento descrito es aplicable a equipos similares. En los anexos se describen los pasos seguidos para la instalación y configuración de SIPP. 21 22 5 Pruebas de desempeño Figura 5.1: Diagrama de conexion - Pruebas de desempeño 5.2 Comunicaciones usuarios red local Para generar tráfico desde la red local, se accedió a la red en la cual se encontraba la PBX IP y posteriormente se apuntó a dicha PBX IP por medio de la IP local. Para hacer esto, desde el ordenador en donde se instaló SIPP, se debe acceder a la carpeta que se creó al momento de la instalación y posteriormente ejecutar un comando similar al siguiente: $ sudo ./sipp -sf uac_pcap_u.xml -s 5005 192.168.12.20 -r 1 -l 1 El comando anterior lo que hace es generar tráfico hacia la extensión 5005, en donde -sf hace referencia al escenario a ejecutar (para G711 -sf uac pcap u.xml y para GSM -sf uac pcap g.xml ) , -r la taza de generación de llamadas (llamadas/segundo) y -l la cantidad limite de llamadas simultáneas. Además en la configuración del escenario se asignó una duración de cada llamada de 9 segundos. En cada una de las pruebas se efectuó alrededor de 50 llamadas en total, en donde se vario el limite de llamadas simultáneas desde 1 hasta 27 y obteniendo ası́ un porcentaje de llamadas perdidas para cada uno de estos valores. Además se guardó el registro de la carga promedio en el procesador durante la ejecución de cada prueba. 5.3. Comunicaciones usuarios red extendida utilizando Internet 23 Figura 5.2: Llamadas generadas simultáneamente - Red local En la figura 5.2 se muestra el resultado obtenido iniciando y finalizando todas las llamadas simultáneamente cada 9 segundos. En la figura 5.3 se muestra el resultado obtenido iniciando y finalizando todas las llamadas en momentos diferentes posteriormente a los 9 segundos de haber sido ejecutadas, lo cual reduce substancialmente el porcentaje de llamadas perdidas. En la figura 5.4 se muestra el aumento en la carga promedio del procesador de acuerdo a la cantidad de llamadas simultáneas realizadas. Como se puede observar, el comportamiento es el esperado, dado que al utilizar un codificador GSM se requiere mayor uso del procesador. Con base a las figuras 5.2, 5.3 y 5.4 se determinó que la perdida de llamadas no es un factor determinante en cuanto a comunicaciones locales. Esto debido a que se requiere generar un tráfico cercano a las 14 llamadas simultáneas (en el escenario con mayor exigencias) para que se provoque un porcentaje de llamadas perdidas significativo. Sin embargo, la carga promedio en el procesador si aumenta constantemente, por lo que en este caso es la mayor limitación. Debido a esto, para no exceder una carga promedio de 0.7 se deben de ejecutar como máximo 6 o 7 llamadas simultáneas para codificadores GSM o G711(u-law) respectivamente, todas desde la red local. 5.3 Comunicaciones usuarios red extendida utilizando Internet Para generar tráfico desde la red extendida, se accedió a una red distinta a la cual se encontraba la PBX IP y posteriormente se apuntó a dicha PBX 24 5 Pruebas de desempeño Figura 5.3: Llamadas generadas alternadas - Red local Figura 5.4: Carga promedio CPU - Red local 5.3. Comunicaciones usuarios red extendida utilizando Internet 25 IP por medio de la IP pública. Para hacer esto, desde el ordenador en donde se instaló SIPP, se debe acceder a la carpeta que se creó al momento de la instalación y posteriormente ejecutar un comando similar al siguiente: $ sudo ./sipp -sf uac_pcap_u.xml -s 5005 163.178.124.149 -r 1 -l 1 El comando anterior lo que hace es generar tráfico hacia la extensión 5005, en donde -sf hace referencia al escenario a ejecutar (para G711 -sf uac pcap u.xml y para GSM -sf uac pcap g.xml ) , -r la taza de generación de llamadas (llamadas/segundo) y -l la cantidad limite de llamadas simultáneas. Además en la configuración del escenario se asignó una duración de cada llamada de 9 segundos. En cada una de las pruebas se efectuó alrededor de 50 llamadas en total, en donde se vario el limite de llamadas simultáneas desde 1 hasta 12 y obteniendo ası́ un porcentaje de llamadas perdidas para cada uno de estos valores. Además se guardo el registro de la carga promedio en el procesador durante la ejecución de cada prueba. En la figura 5.5 se muestra el resultado obtenido iniciando y finalizando todas las llamadas simultáneamente cada 9 segundos. En esta figura se puede observar que al cambiar de codificador no se logró reducir el porcentaje de llamadas perdidas, esto posiblemente debido a que al momento de terminar e iniciar las llamadas, se hace simultáneamente, lo cual requiere un mayor ancho de banda en lapsos muy cortos por lo que esto aumenta considerablemente dicho porcentaje el cual modifica el comportamiento esperado. En la figura 5.6 se muestra el resultado obtenido iniciando y finalizando todas las llamadas en momentos diferentes posteriormente a los 9 segundos de haber sido ejecutadas, lo cual reduce substancialmente el porcentaje de llamadas perdidas. De esta forma se logró observar el comportamiento esperado luego de cambiar de codificador, puesto que al utilizando un codificador el cual requiere un menor ancho de banda, se observó la disminución nuevamente en el porcentaje de llamadas perdidas. En la figura 5.7 se muestra el aumento en la carga promedio del procesador de acuerdo a la cantidad de llamadas simultáneas realizadas. Como se puede observar, al realizar una cantidad inferior a 7 llamadas simultáneas el comportamiento es el esperado, dado que al utilizar un codificador GSM se requiere mayor uso del procesador. De acuerdo a los resultados obtenidos en las figuras 5.5,5.6 y 5.7, se observó que para no exceder un porcentaje de llamadas perdidas superior al 10 % y una carga promedio de 0.7 se deben de ejecutar como máximo 3 llamadas simultáneas (G711 o GSM), todas desde la red extendida (por Internet). 26 5 Pruebas de desempeño Figura 5.5: Llamadas generadas simultáneamente - Red extendida Figura 5.6: Llamadas generadas alternadas - Red extendida 5.3. Comunicaciones usuarios red extendida utilizando Internet Figura 5.7: Carga promedio CPU - Red extendida 27 6 Funciones adicionales Posteriormente a la implementación y pruebas de desempeño de RaspBerry Pi & Asterisk funcionando como PBX IP con los servicios básicos, este capı́tulo busca describir servicios adicionales que podrı́an ser implementados a esta plataforma. Posteriormente se implementan algunos de estos servicios. 6.1 Descripción de funciones adicionales Troncal por GSM Según Raspberry&asterisk-community (2013a) entre las ultimas caracterı́sticas desarrolladas para RaspBerry Pi & Asterisk es la capacidad para hacer llamadas directamente desde una red GSM/3G por medio de un módem USB R el modulo chan-dongle de Asterisk. Con esta nueva caractemarca Huaweiy rı́stica se podrı́a utilizar una ruta externa más económica para aquellos casos en los que el proveedor de servicios GMS/3G tenga precios más bajos que los proveedores de servicios de troncales SIP, además en lugares en donde solo exista cobertura GSM/3G y no por parte del resto de proveedores. El hecho de contar con una troncal de este tipo incluso podrı́a utilizarse como respaldo ante problemas de conectividad con el resto de proveedores de servicios alámbricos. Por último, es importante hacer indicar que según Raspberry&asteriskcommunity (2013a) el consumo total por parte de RaspBerry Pi y el módem USB es aproximadamente 5W, por lo que es una solución que sigue contando con un bajo consumo energético. Integración con actuadores Como ya se mencionó en el capı́tulo 2, RaspBerry Pi cuenta con pines GPIO, por lo que existe la posibilidad de integrar la PBX IP con diferentes actuadores. Esto cobra principal interés en aquellos casos en los que eventualmente es necesario realizar acciones de control de forma remota, inclusive cuando no se cuente con acceso a Internet. A continuación se describen algunos ejemplos para los cuales se podrı́a utilizar esta caracterı́stica: • Permitir acceso a áreas restringidas (puertas con chapas eléctricas, etc) 29 30 6 Funciones adicionales • Encender o apagar iluminación. • Abrir o cerrar portón eléctrico (motores). • Variar la velocidad de un motor. • Activar alarma. • Conocer el estado de algún dispositivo (ON/OFF). • Conocer el valor de algún sensor resistivo. En donde cada una de las acciones descritas podrı́an realizarse desde una extensión local o incluso desde una llamada externa. Debido a que RaspBerry Pi cuenta únicamente con puertos GPIO, es importante resaltar que no cuenta con entradas ni salidas analógicas por lo que generalmente podrı́a activar dispositivos únicamente de 2 estados (ON/OFF). Además al utilizar los pines como salidas digitales se manejan tensiones de 3.3V por lo que en la mayorı́a de los casos seria necesario utilizar electrónica adicional para controlar dispositivos de mayor potencia. En el ejemplo en donde se menciona la posibilidad de variar la velocidad de un motor, esto se propone obtener gracias a que RaspBerry Pi cuenta con un puerto PWM. Sin embargo, se considera importante recalcar que RaspBerry Pi cuenta únicamente con un puerto PWM. En el caso del último ejemplo mencionado, en el cual se pretende conocer el valor de algún sensor, esto podrı́a hacerse por medio de una técnica llamada RCTIME, en la cual básicamente por medio de un puerto de entrada digital se determina el tiempo de descarga de un capacitor y posteriormente a esto se deduce el valor resistivo del sensor. Debido a lo anterior es un requisito indispensable que el sensor sea de tipo resistivo. En el mercado existen varias tarjetas que se utilizan como interfaz para los puertos GPIO, en este apartado se mencionaran las caracterı́sticas de una R en particular: PiFace. R se ajusta fı́sicamente sobre RaspBerry Según element14 (2013)1 , PiFace Pi, en especı́fico sobre el puerto GPIO. Cuenta con las siguientes caracterı́sticas: • Dos reles de hasta 20V y 5A. • Cuatro interruptores tactiles. • Ocho entradas digitales. • Ocho LEDs indicadores. 1 Uno de los principales distribuidores de RaspBerry Pi. 6.2. Implementación de funciones adicionales 31 • Buffers para proteger las entradas y salidas de RaspBerry Pi. R cuenta con una librerı́a para Python lo que hace su Además PiFace implementación menos compleja. R Hardphone marca Cisco Este apartado va dirigido principalmente a aquellas situaciones en las cuales se requiere migrar desde una solución con Cisco Call Manager2 hacia una basada en Asterisk. Esto principalmente porque al momento de contemplar dicha migración, generalmente se desea conservar la mayor cantidad de equipo instalado originalmente, tal es el caso de los teléfonos y adaptadores VoIP. R Los teléfonos Ciscode gama empresarial son terminales de alta calidad y fiabilidad, sin embargo, originalmente utilizan un protocolo de comunicación diferente (SCCP). Por lo que es necesario cambiarles el firmware a uno que soporte un protocolo SIP3 (si está disponible) para poder utilizarlos con Asterisk. Todo esto a cambio del costo por el nuevo firmware el cual es bastante inferior al costo del dispositivo. En el siguiente capı́tulo describen los pasos que se siguieron para actualizar R y configurar un teléfono Ciscomodelo CP-7940, además de las consideraciones adicionales al momento de configurar la extensión para este dispositivo en una PBX IP basada en Asterisk. 6.2 Implementación de funciones adicionales En esta sección se busca detallar las consideraciones que se hicieron y los pasos que se siguieron para implementar algunas de las capacidades adicionales descritas en el sección anterior utilizando como plataforma una PBX IP basada en RaspBerry Pi & Asterisk. Dispositivos utilizados: R • Módem GSM marca Huaweimodelo E1750. • Chip GSM proveedor Claro. R • Telefono VoIP marca Ciscomodelo CP-7940. En la figura 5.1 se muestra el diagrama de conexión utilizado durante esta implementación. 2 R Software PBX propietario de Cisco R El siguiente enlace muestra una lista con algunos modelos de teléfonos Ciscoy los firmware disponibles: http://www.cisco.com/en/US/docs/voice ip comm/cucme/requirements/guide/cme71spc.htm. 3 32 6 Funciones adicionales A continuación se describen todos los aspectos relevantes a la implementación por medio de subsecciones. En donde además el orden de dichas secciones representa la secuencia cronológica realizada: Troncal por GSM En esta sección se detallan los pasos seguidos para la implementación de troncales GSM una PBX IP basada en RaspBerry Pi & Asterisk. • Requerimientos del hardware: Primero que nada es importante indicar que existe una tabla recopilada por Raspberry&asterisk-community (2013b) en la que se indican los modelos que han sido probados y el soporte que ofrece cada uno (transmitir voz, SMS y USSD). Siendo todos R los modelos soportados marca Huawei. Debido a lo anterior esta implementación se realizó con un módem GSM, R modelo E1750. marca Huawei, • Alimentación: Según Raspberry&asterisk-community (2013a) el consumo de energético de RaspBerry Pi y un módem GSM es de 5W, por lo que seria necesario una fuente de alimentación que proporcione una corriente igual o superior a 1A. Sin embargo, se recomienda para el módem GSM la utilización de un hub USB con alimentación independiente. • Instalación y Configuración: Estos se detallan en los anexos. Debido a que al configurar las rutas de entrada en el capitulo 4, ya se habı́an redireccionado todas las llamadas entrantes a la extensión 100, no fue necesario configurar una ruta de entrada diferente para la troncal GSM. Para enviar SMSs desde cualquier equipo conectado a la red, basta con abrir el explorador e ingresar a la direccion http://<IP de la PBX>/sms. Para enviar USSDs se debe instalar un paquete llamado “ussd-webpage”. Para instalarlo, en la terminal: $ apt-get install ussd-webpage Posteriormente a la instalación, se pueden enviar USSDs desde cualquier equipo conectado a la red, abrir el explorador e ingresar a la dirección http://<IP de la PBX>/ussd. Durante la instalación del controlador del módem GSM, se ingresó un número de teléfono y un correo electrónico. Al momento de recibir algún mensaje de texto por medio del módem GSM, RaspBerry Pi enviara una copia de ese mensaje al número telefónico y correo electrónico indicados. En dado de que 6.2. Implementación de funciones adicionales 33 existan problemas al momento de recibir mensajes de texto, un posible problema es que la memoria del chip GSM este llena. Para eliminar la información contenida en el chip GSM, en la terminal: $ asterisk -r El código ingresado anteriormente nos dará acceso a la lı́nea de comandos de Asterisk, accediendo al mismo en modo de segundo plano, lo que significa que aunque posteriormente cerremos la lı́nea de comandos, Asterisk seguirá ejecutándose. Para borrar la información en el chip GSM es necesario conocer el nombre que se le asignó a el módem GSM, para esto; ejecutar en la lı́nea de comandos de Asterisk : dongle show devices Posteriormente en la lı́nea de comandos de Asterisk : dongle cmd <nombre del dongle> AT+CPMS=\"SM\",\"SM\",\"SM\" dongle cmd <nombre del dongle> AT+CMGD=1,4 Por último, para salir de la lı́nea de comandos de Asterisk : exit R Hardphone marca Cisco En esta sección se detallan los pasos seguidos para actualización y configuraR ción de un teléfono marca Ciscomodelo CP-7940, además de las consideraciones adicionales al momento de configurar la extensión para este dispositivo en una PBX IP basada en RaspBerry Pi & Asterisk. • Actualización y configuración Teléfono VoIP: Algunos teléfonos VoIP R en particular este modelo, durante el proceso de arranque exCiscoy traen información de actualización y configuración desde algún servidor tftp dentro de la red. Por lo que para este proceso se asumirá que se cuenta con dicho servidor funcionando adecuadamente. En los anexos se indican los pasos seguidos para configurar los parámetros de red, la actualización del firmware, configuración general y configuración de identificación SIP. • Configuración extensión SIP en Asterisk : Al momento de configurar exR tensiones SIP para dispositivos marca Ciscose debe prestar especial atención a dos parámetros. El primero es el de “NAT”, el cual debe estar 34 6 Funciones adicionales Figura 6.1: Cambios en configuración extensión 100 - FreePBX configurado para que nunca sea tomado en cuenta. El segundo es “Qualify”, el cual debe estar desactivado. De no configurar de esta manera las extensiones es posible que el teléfono no se registre correctamente o que presente algún otro tipo de problema. En las figuras 6.1 se muestra la sección FreePBX Administration→ Applications→Extensions de FreePBX con las modificaciones en la configuración de la extensión 100 para un correcto funcionamiento con R un teléfono VoIP marca Cisco. 7 Conclusiones y recomendaciones Conclusiones Se enumeran las principales conclusiones derivadas de este proyecto. 1. No es posible determinar de forma teórica las capacidades básicas que podrı́a proporcionar una PBX IP basada en RaspBerry Pi & Asterisk. Esto porque además de que son muchos los factores que intervienen, los principales desarrolladores de Asterisk ofrecen parámetros de referencia en los cuales no se consideran procesadores ARM. Por lo que a pesar de que lo que se brinda es solo una referencia poco exacta, no está referida a equipos con capacidades parecidas al utilizado en este documento. 2. La implementación de una PBX IP basada en RaspBerry Pi & Asterisk puede llevarse acabo de muchas formas, desde las más simples y rápidas, hasta las más complejas y lentas. Sin embargo, las que suelen ser más rápidas tienden a limitar la flexibilidad natural de Asterisk. 3. Factores de alimentación y dispositivos de almacenamiento pueden limitar considerablemente las capacidades ofrecidas por el hardware utilizado. 4. Actualmente existen únicamente dos distribuciones que incluyen el sistema operativo, Asterisk y el resto de paquetes complementarios, en donde una de estas distribuciones aún se encuentra en una versión de prueba. 5. Para realizar una instalación de Asterisk sin utilizar ninguna de las distribuciones recomendadas en este proyecto, es necesario tener un amplio conocimiento sobre dicha aplicación. 6. Existe mucha literatura muy completa y extensas sobre Asterisk. Sin embargo, es muy poca la documentación formal para su aplicación en ordenadores de placa reducida como RaspBerry Pi. 7. Existen muchas herramientas que facilitan la realización de pruebas de desempeño en sistemas de telecomunicaciones como el implementado. En cada uno de estos programas se pueden simular diversos escenarios dependiendo de el nivel de estrés al que se desea garantizar que el equipo responda adecuadamente. Sin embargo, los resultados obtenidos no dejan 35 36 7 Conclusiones y recomendaciones de ser simulaciones y contienen un margen de error con respecto a los resultados obtenidos ante un tráfico de llamadas real. 8. Los resultados obtenidos posteriormente a la generación de tráfico desde la red extendida manifiesta un comportamiento no constante debido a que depende del ancho de banda proporcionado por los proveedores de Internet. 9. Debido a la diversidad de puertos con los que cuenta RaspBerry Pi, es posible implementar servicios adicionales acorde a necesidades comunes. Recomendaciones Se enumeran las principales recomendaciones derivadas de este proyecto. 1. De acuerdo a los resultados experimentales obtenidos en el capı́tulo referente a las pruebas de desempeño, se recomienda el uso de PBX IP basados en RaspBerry Pi & Asterisk para situaciones en las cuales no se requiera un tráfico superior a 6 o 7 llamadas simultáneas utilizando codificadores GSM o G711(u-law) respectivamente entre usuarios en la red local y 3 llamadas simultáneas por Internet utilizando codificadores GSM o G711(u-law) entre usuarios en la red extendida. 2. De acuerdo a las capacidades de procesamiento requeridas en troncales GSM, no se recomienda la utilización de más de 1 módemes. 3. Debido a los tiempos de respuesta manifestados por el servidor apache durante esta implementación. Para situaciones en las que es indispensable un acceso continuo a la administración WEB de Asterisk por más de un usuario simultáneamente, se recomienda paralelismo este servicio por medio de otro ordenador (posiblemente otro RaspBerry Pi dedicado únicamente a dicho servicio). 8 Anexos 8.1 Implementación Instalando una distribución de Linux con Asterisk integrado A continuación se detallan los pasos seguidos para la instalación de una distribución de Linux con Asterisk integrado, en particular RasPBX. 1. Se descargó la imagen de RasPBX (comprimida en un archivo .zip). Esto puede hacerse desde: http://www.raspberry-asterisk.org/download/raspbx12-08-2013.zip 2. Se extrajo la imagen del archivo .zip descargado. 3. Posteriormente a esto fue necesario quemar la imagen en la tarjeta SD indicada en secciones anteriores. El procedimiento a seguir depende del sistema operativo que utilice el equipo en donde se desea quemar la memoria SD. A continuación se describe este procedimiento para usuarios de Windows y posteriormente Linux. Para Windows: a) Descargar el programa Win32Manager, esto puede hacerse desde: http://sourceforge.net/projects/win32diskimager/ b) Extraer el archivo ejecutable del archivo .zip descargado y ejecutar como administrador el archivo Win32DiskImager. c) Seleccionar la ubicación de la imagen de RasPBX descargada al inicio y luego definir la letra asignada la memoria SD. Atención: El siguiente paso eliminará toda la información actual en la memoria SD o en su defecto la del dispositivo asociado a la letra indicada anteriormente. d) Hacer click en “Write” y esperar a que el proceso finalice. Para Linux (con lı́nea de comandos): 37 38 8 Anexos a) Primero fue necesario determinar que dispositivos están actualmente montados, para ello, antes de insertar la tarjeta SD se ejecuto en la terminal: $ df-h Posteriormente se insertó la tarjeta SD y se ejecutó la lı́nea anterior nuevamente: $ df-h b) Se identificó la diferencia entre la primer y segunda lista para determinar a que archivo del sistema se asoció la memoria SD. c) Se desmontó la memoria SD utilizando el archivo del sistema asociado a la memoria SD (filesystem). En la terminal: $ umount <filesystem> d) Se escribió en la memoria SD bloques de 4MB provenientes del archivo que contiene la imagen de RasPBX. En la terminal: $ dd bs=4M if=<fuente:ubicacion imagen RasPBX> of=<destino:filesystem> Es importante tomar en consideración lo siguiente: • Es posible utilizar bloques de 1MB, sin embargo, el proceso será considerablemente más lento. • La instrucción anterior debe ejecutarse como superusuario. • Este proceso puede ser lento. • No existe indicador del avance del mismo, para conocerlo es necesario abrir otra terminal y ejecutar: $ pkill -USR1 -n -x dd Luego de esto se consideró como terminada la instalación. Para la implementación en RaspBerry Pi posteriormente a esta subsección se realizaron los pasos indicados en la sección denominada “Configuración post-instalación” ubicada más adelante. Para acceder al sistema por SSH: • Nombre de usuario root. • Contraseña raspberry. Para acceder a FreePBX (administrador web): • Nombre de usuario admin. 8.1. Implementación 39 • Contraseña admin. Contraseña de administrador Mysql: raspberry. Instalando Raspbian y posteriormente Asterisk En esta subsección primero se indican dos posibles formas de instalar Raspbian, posteriormente a ello se instala Asterisk de acuerdo a la forma recomendada por Bryant et al. (2013). Instalando Raspbian: Existen principalmente dos formas de realizar esta instalación. Una es muy semejante a la forma en la que se realiza la instalación de RasPBX indicada en la subsección anterior, la cual consiste en quemar en la memoria SD una imagen descargada desde Internet. Otra de las formas es la que recomienda RaspBerryPi-Foundation (2013) para usuarios principiantes la cual consiste en copiar en la memoria SD un paquete de archivos descargado desde Internet, posteriormente a ello insertar la memoria SD en el RaspBerry Pi y continuar la instalación desde allı́. A continuación se describen los pasos seguidos para cada una de las formas de instalación descritas anteriormente: 1. Instalando Raspbian desde imagen a) Se descargó la imagen de Raspbian (comprimida en un archivo .zip). Esto puede hacerse desde: http://downloads.raspberrypi.org/raspbian latest b) Seguir los pasos 2 y 3 de la subsección anterior. Modificando únicamente la ubicación de la imagen de RasPBX por la ubicación de la imagen de Raspbian en donde corresponda. 2. Instalando Raspbian desde NOOBS (New Out of Box Software) a) Se formateó la memoria SD, posteriormente se creó una partición FAT32 que abarque todo el espacio de la memoria. Para usuarios de Windows una alternativa puede ser Formatter 4. Puede descargarse desde: https://www.sdcard.org/downloads/formatter 4/ Para usuarios de Linux una alternativa puede ser GParted. Para instalar, en terminal: $ sudo apt-get install gparted 40 8 Anexos b) Se descargó la versión off-line de Noobs. Esto puede hacerse desde: http://downloads.raspberrypi.org/NOOBS latest c) Se extrajo el contenido del archivo .zip descargado. d) Se copiaron todos los archivos descomprimidos en el paso anterior y se pegaron en la memoria SD. e) Se extrajo la memoria SD del computador y se inserto en el RaspBerry Pi. f) Se conectó periféricos: ratón, teclado y monitor. g) Se conectó el cable de red. h) Se conectó el cable de alimentación. Cuando NOOBS inició por primera vez redimensionó la partición FAT32 al mı́nimo para que posteriormente sea utilizado como partición de recuperación. Posteriormente a esto se mostró una lista de distribuciones de Linux. i) Se seleccionó Rasbian, se hizo click en “Install” y se esperó a que proceso finalizara. Luego de esto se consideró como terminada la instalación de Raspbian. Para acceder al sistema por SSH: • Nombre de usuario pi. • Contraseña raspberry. Instalando Asterisk: Para realizar esta instalación es indispensable que el RaspBerry Pi tenga acceso a Internet. A continuación se describen los pasos necesarios para la instalación de Asterisk en Debian sugeridos por Bryant et al. (2013): 1. Actualizar y reiniciar sistema. En la terminal: $ sudo apt-get update && sudo apt-get upgrade && sudo reboot 2. Instalando dependencias. En la terminal: $ sudo apt-get install build-essential subversion libncurses5-dev libssl-dev libxml2-dev libsqlite3-dev uuid-dev vim-nox 3. Creando estructura de directorios. En la terminal: 8.1. Implementación 41 $ mkdir -p ~/src/asterisk-complete/asterisk $ cd ~/src/asterisk-complete/asterisk 4. Descargando ultima versión de Asterisk 11. En la terminal: $ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk -11-current.tar.gz 5. Descomprimiendo archivo descargado. En la terminal: $ tar xvzf asterisk-11-current.tar.gz 6. Construyendo e instalando aplicación. En la terminal: $ cd <nombre carpeta descomprimida> $ ./configure 7. Compilando e instalando Asterisk. En la terminal: $ make $ sudo make install $ sudo make config 8. Modificación de permisos en donde fue instalado Asterisk. En la terminal: $ $ $ $ sudo sudo sudo sudo chown chown chown chown -R -R -R -R pi:pi pi:pi pi:pi pi:pi /var/lib/asterisk/ /var/spool/asterisk/ /var/log/asterisk/ /var/run/asterisk/ 9. Crear directorio /etc/asterisk y copiar en su interior archivo muestra indications.conf. En la terminal: $ $ $ $ sudo mkdir -p /etc/asterisk sudo chown pi:pi /etc/asterisk cd /etc/asterisk/ cp ~/src/asterisk-complete/asterisk/<nombre carpeta descomprimida>/ configs/indications.conf.sample ./indications.conf 10. Copiar archivo muestra asterisk.conf en /etc/asterisk. En la terminal: 42 8 Anexos $ cp ~/src/asterisk-complete/asterisk/<nombre carpeta descomprimida>/ configs/asterisk.conf.sample /etc/asterisk/asterisk.conf $ vim /etc/asterisk/asterisk.conf 11. Crear archivo modules.conf en /etc/asterisk. En la terminal: $ sudo nano /etc/asterisk/modules.conf 12. Ingresar la siguientes información dentro del archivo modules.conf y guardar los cambios: ; The modules.conffile, used to define which modules Asterisk should ; load (or not load). ; [modules] autoload=yes ; Resource modules currently not needed noload => res_speech.so noload => res_phoneprov.so noload => res_ael_share.so noload => res_clialiases.so noload => res_adsi.so ; PBX modules currently not needed noload => pbx_ael.so noload => pbx_dundi.so ; Channel modules currently not needed noload => chan_oss.so noload => chan_mgcp.so noload => chan_skinny.so noload => chan_phone.so noload => chan_agent.so noload => chan_unistim.so noload => chan_alsa.so ; Application modules currently not needed noload => app_nbscat.so noload => app_amd.so noload => app_minivm.so noload => app_zapateller.so noload => app_ices.so noload => app_sendtext.so noload => app_speech_utils.so noload => app_mp3.so 8.1. Implementación noload noload noload noload noload noload noload noload noload noload noload noload noload noload noload noload noload noload noload => => => => => => => => => => => => => => => => => => => 43 app_flash.so app_getcpeid.so app_setcallerid.so app_adsiprog.so app_forkcdr.so app_sms.so app_morsecode.so app_followme.so app_url.so app_alarmreceiver.so app_disa.so app_dahdiras.so app_senddtmf.so app_sayunixtime.so app_test.so app_externalivr.so app_image.so app_dictate.so app_festival.so Luego de esto se consideró como terminada la instalación de Asterisk. Es importante recordar que por este método se instaló Asterisk en su forma más primitiva. Para ponerlo en funcionamiento es necesario dedicarle más tiempo a su implementación. Dado que esto se escapa de los alcances de este proyecto, para la implementación del mismo se utiliza una distribución más completa y adaptada a RaspBerry Pi (RasPBX). Configuración post-instalación En esta sección se busca indicar los procedimientos que se siguieron posterior a la instalación de una distribución de linux con Asterisk integrado (RasPBX). Luego de realizar la instalación de RasPBX se extrajo la memoria SD del dispositivo en donde fue quemada, se insertó en RaspBerry Pi, se conectó ratón, teclado, cable de red, monitor y por último, el cable de alimentación. Las luces de la placa de RaspBerry Pi se encendieron y el monitor mostró el arranque de Rasbian. Después se accedió con el nombre de usuario y contraseña por defecto (root/raspberry). Posteriormente se realizaron los procedimientos contemplados en cada una de las siguientes secciones: 44 8 Anexos Raspi-Config Esta es una herramienta de configuración de Rasbian la cual se recomienda ejecutarse posteriormente a la instalación de dicho sistema. Para acceder únicamente es necesario ejecutar la siguiente lı́nea: $ raspi-config Raspi-config cuenta con las siguientes opciones: • Expandir sistema de archivos • Cambiar contraseña usuario root • Activar o desactivar escritorio al inicio • Opciones de internacionalización • Activar cámara • Adicionar a Rastrack • Overclocking • Opciones avanzadas – Overscan – Hostname – Memory Split – SSH – SPI – Update Es importante recordar que en el caso de RasPBX, Asterisk se ejecuta sobre Raspbian, debido a esto se cuentan con opciones de configuración generales a pesar de haber instalado una distribución dirigida a la ejecución de Asterisk principalmente. Debido a lo anterior, únicamente las siguientes opciones obtienen especial interés: • Expandir sistema de archivos: Al momento en el que fue quemada la imagen de RasPBX sobre nuestra tarjeta SD se creó una partición con un tamaño limitado inferior a la capacidad de almacenamiento de la memoria, debido a esto fue indispensable expandir el sistema de archivos antes de iniciar con el proceso de actualización del sistema. 8.1. Implementación 45 • Cambiar contraseña usuario root: Por cuestiones de seguridad se recomienda realizar este cambio. • Opciones de internacionalización: Esta opción permite modificar el lenguaje del sistema operativo, la zona horaria y la distribución de su teclado. Para la implementación se consideró como lenguaje del sistema operativo el inglés (en GB), zona horaria Costa Rica y distribución en el teclado también en inglés (UK). • Overclocking: Esta opción permite aumentar la velocidad del procesador. Lo cual eventualmente podrı́a ser una alternativa para aumentar la capacidad de comunicaciones simultáneas requeridas. Sin embargo, hay que tomar en consideración que el aumento de la velocidad del procesador implica disminuir la vida del dispositivo, aumentar el calor disipado (instalación necesaria de disipadores) y por último, aumentar los requerimientos energéticos, por lo que se va a requerir de una fuente más potente. Para la implementación se utilizó la velocidad del procesador recomendada (por defecto, 700MHz). • Opciones avanzadas: – Hostname: Con el fin de identificar adecuadamente las PBX dentro de la red local, se recomienda nombrar de diferente manera cada de estas. – SSH: Esta opción nos permite activar o desactivar el acceso remoto por SSH (Secure SHell). Está activado por defecto, sin embargo, de ser necesario es posible desactivar este servicio desde aquı́. – Update: Esta opción permite actualizar raspi-config a su versión más reciente. Servidor NTP RaspBerry Pi no cuenta con un RTC (Real Time Clock). Esto significa que cada vez que el sistema inicia, la hora actual se obtiene por medio de un servidor NTP (Network Time Protocol). De no contar con acceso a Internet, el sistema iniciara con la hora y fecha de referencia de unix epoch1 (01/01/1970) y Asterisk no arrancará puesto que el sistema interpreta que retrocedió en el tiempo. Para evitar esto se instala una aplicación llamada fake-hwclock la cual consiste en un conjunto de comandos que periódicamente almacenan en un archivo la hora y fecha actual del sistema. Si el sistema arrancará nuevamente 1 Descripción instantánea del tiempo utilizada por UNIX, la cual representa la cantidad de segundos transcurridos a partir de la media noche del 1 de enero de 1970. 46 8 Anexos y no detectara el servidor NTP, fake-hwclock ajustarı́a la hora del sistema a la ultima fecha y hora almacenada. Para instalar, en la terminal: $ sudo apt-get install fake-hwclock Asignación de IP estática Esta subsección es muy importante debido a que es necesario conocer siempre la ubicación de la PBX ya sea por medio de la dirección IP o bien algún URL. Hay varias formas de conocer siempre dicha ubicación. Para la implementación se utilizó la asignación de una IP estática desde el RaspBerry Pi por lo que únicamente se modifico el archivo /etc/network/interfaces. A continuación se muestran los pasos realizados: 1. En la terminal: $ nano /etc/network/interfaces 2. Posteriormente se modifica el documento con la siguiente información: auto lo auto eth0 iface lo inet loopback iface eth0 inet dhcp address <dirección ip> netmask <mascara de red> network <red> broadcast <difusión> gateway <puerta de enlace> Para la implementación se consideraron los siguientes parámetros: auto lo #auto eth0 iface lo inet loopback #iface eth0 inet static # address 192.168.1.2 # netmask 255.255.255.0 8.1. Implementación # # # 47 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 iface vlan91 inet static # Acceso red área extensa address 163.178.124.149 netmask 255.255.255.192 gateway 163.178.124.129 network 163.178.124.128 broadcast 163.178.124.191 vlan_raw_device eth0 auto vlan2052 #Acceso red local iface vlan2052 inet static address 192.168.12.20 netmask 255.255.255.0 network 192.168.12.0 broadcast 192.168.12.255 #ntp 192.168.12.11 vlan_raw_device eth0 El formato en la implementación difiere al indicado inicialmente esto debido a que por disposición de la administración de la red de la Escuela de Ingenierı́a Eléctrica fue necesario crear dos redes virtuales. Una para el acceso a la PBX desde de la red local (LAN) y otra para el acceso desde la red de área extensa (WAN). Actualizaciones Luego haber realizado las configuraciones básicas descritas anteriormente es necesario actualizar todo el sistema, este proceso se dividió en 3 partes: 1. Actualización de dependencias de Asterisk : Esta parte de la actualización se refiere a todas los paquetes instaladas sobre Raspbian. Por lo general estos paquetes son herramientas que utiliza Asterisk y FreePBX para funcionar adecuadamente. En la terminal: $ apt-get update $ apt-get upgrade En donde la primer lı́nea se encarga de actualizar la lista de paquetes disponibles y sus versiones pero no instala ni actualiza ningún paque- 48 8 Anexos te. La segunda lı́nea se encarga recorrer la lista de paquetes instalados con su versión actual y compararla con las versiones disponibles. Luego actualiza todos los paquetes que no se encuentren en su ultima versión disponible. 2. Actualización de RasPBX: Esta parte de la actualización instala las ultimas incorporaciones y mejoras de RasPBX. En la terminal: $ raspbx-upgrade 3. Actualización de Módulos - FreePBX: Como ya se mencionó anteriormente, FreePBX es la interfaz web que utiliza RasPBX para Asterisk. Esta parte de la actualización instala las ultimas versiones de los módulos que conforman FreePBX. Para esto es necesario seguir los siguientes pasos: a) Acceder a la administración web de Asterisk (FreePBX): Para esto es necesario acceder desde cualquier equipo conectado a la red por medio del explorador web a la dirección IP estática asignada anteriormente al RaspBerry Pi. b) Ingresar a “FreePBX Administration”: Utilizar acceso por defecto: admin/admin. c) Dirigirse a la pestaña “Admin” y posteriormente a “Module Admin”. d) Hacer clic en el botón “Check online”, posteriormente se mostrarán en color rojo todos los módulos para los cuales existen versiones más nuevas disponibles. Se debe hacer clic en todos estos módulos, seleccionar la opción “Download and Install” y por último, hacer clic en el botón “Process” que aparece en la parte superior derecha de la ventana. e) Posteriormente el sistema descargara e instalara todos los módulos indicados. Configuración inicial Asterisk Hasta el momento aún no se ha realizado ninguna configuración en Asterisk, en esta sección se explica como se configuró inicialmente esta aplicación por medio de FreePBX para posteriormente hacer las pruebas de rendimiento mostradas en el siguiente capı́tulo. 1. Configuración avanzada: 8.1. Implementación 49 Figura 8.1: Configuración avanzada - FreePBX a) Se accedió a la administración web de Asterisk (FreePBX). b) Se ingresó a FreePBX Administration→Settings→Advanced Settings. c) Se cambió el código de administrador. d) Se cambiaron los todos de indicación para Costa Rica. e) Se cambió el código de acceso para ARI (Asterisk Recording Interface). f) El resto de parámetros se dejan por defecto. Mientras se fueron realizando los cambios en la configuración, FreePBX automáticamente fue modificando la información en el sistema. En la figura 8.1 se muestra la sección FreePBX Administration→ Settings→ Advanced Settings de FreePBX. 2. Configuración SIP: a) Se accedió a la administración web de Asterisk (FreePBX). b) Se ingresó a FreePBX Administration→Settings→Asterisk SIP Settings. 50 8 Anexos Figura 8.2: Configuración SIP - FreePBX c) Parámetros NAT: Estos se ajustaron por medio de la autoconfiguración (botón “Auto Configure”). d) Se activaron los siguientes Codecs: • G722 • GSM • G729 e) El resto de parámetros se dejan por defecto. f) Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit Changes”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. En la figura 8.2 se muestra la sección FreePBX Administration→ Settings→Asterisk SIP Settings de FreePBX. 3. Configuración IAX: a) Se accedió a la administración web de Asterisk (FreePBX). b) Se ingresó a FreePBX Administration→Settings→Asterisk IAX Settings. c) Se activaron los siguientes Codecs: 8.1. Implementación 51 Figura 8.3: Configuración IAX - FreePBX • G722 • GSM • G729 d) El resto de parámetros se dejan por defecto. e) Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit Changes”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. En la figura 8.3 se muestra la sección FreePBX Administration→Settings→ Asterisk IAX Settings de FreePBX. Configuración de extensiones 1. Extensiones SIP: a) Se accedió a la administración web de Asterisk (FreePBX). b) Se ingresó a FreePBX Administration→Applications→Extensions. c) Se indicó que la extensión era tipo SIP y posteriormente se hizo clic en “Submit”. d) Luego se configuraron únicamente los siguientes parámetros: 52 8 Anexos Figura 8.4: Configuración extensión SIP - FreePBX • Extensión del usuario (User Extension) • Nombre a mostrar (Display Name) • Contraseña de acceso cliente SIP (secret) • Se activó la configuración NAT (nat = Yes) • Se activó el correo de voz (Voicemail status = Enabled) • Contraseña de acceso correo de voz (Voicemail Password) e) Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. En la figura 8.4 se muestra la sección FreePBX Administration→ Applications→Extensions→SIP de FreePBX. Para la implementación se configuraron 5 extensiones de este tipo. En la tabla 8.1 se indican los valores para cada uno de los parámetros antes mencionados. 2. Extensiones IAX2: a) Se accedió a la administración web de Asterisk (FreePBX). 8.1. Implementación 53 Cuadro 8.1: Parámetros extensiones SIP Extensión del usuario Nombre a mostrar Contraseña SIP Contraseña Correo de Voz 100 101 102 103 104 User11 User12 User13 User14 User15 User11 User12 User13 User14 User15 100 101 102 103 104 Cuadro 8.2: Parámetros extensiones IAX2 Extensión del usuario Nombre a mostrar Contraseña IAX2 Contraseña Correo de Voz 105 106 User16 User17 User16 User17 105 106 b) Se ingresó a FreePBX Administration→Applications→ Extensions. c) Se indicó que la extensión era tipo IAX2 y posteriormente se hizo clic en “Submit”. d) Luego se configuraron únicamente los siguientes parámetros: • Extensión del usuario (User Extension) • Nombre a mostrar (Display Name) • Contraseña de acceso cliente IAX2 (secret) • Se activó el correo de voz (Voicemail status = Enabled) • Contraseña de acceso correo de voz (Voicemail Password) e) Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. En la figura 8.5 se muestra la sección FreePBX Administration→ Applications→Extensions→IAX2 de FreePBX. Para la implementación se configuraron 2 extensiones de este tipo. En la tabla 8.2 se indican los valores para cada uno de los parámetros antes mencionados. 54 8 Anexos Figura 8.5: Configuración extensión IAX2 - FreePBX Configuración de troncales Con el fin de hacer también pruebas externas a la red local en la implementación, se hicieron 3 enlaces IAX a otras PBX IP ejecutándose también sobre RaspBerry Pi & Asterisk. A continuación se describen los pasos que se siguieron para su configuración: 1. Se accedió a la administración web de Asterisk (FreePBX). 2. Se ingresó a FreePBX Administration→Connectivity→Trunks. 3. Luego se seleccionó el protocolo del enlace, en este caso IAX2. 4. Luego se configuraron únicamente los siguientes parámetros: • Nombre de la troncal (Trunk Name) • Identificación llamada saliente (Outbound CallerID) • Configuración saliente (Outgoing Settings) – Nombre de la troncal (Trunk Name) – Detalles PEER (PEER Details) 8.1. Implementación 55 Cuadro 8.3: Parámetros enlaces IAX2 - Configuración saliente Nombre de la troncal Identificación llamada entrante IAX2 Trunk S2 IAX2 Trunk S3 IAX2 Trunk S4 Servidor2 Servidor3 Servidor4 Configuración saliente Host Username afranpe.sytes.net 200.6.234.140 edwinbasto.no-ip.biz Servidor1 Servidor1 Servidor1 Secret SeRvidor1Pf SeRvidor1Pf SeRvidor1Pf Cuadro 8.4: Parámetros enlaces IAX2 - Configuración entrante Nombre de la troncal Identificación llamada entrante IAX2 Trunk S2 IAX2 Trunk S3 IAX2 Trunk S4 Servidor2 Servidor3 Servidor4 Configuración entrante Contenido del usuario Secret Servidor2 Servidor3 Servidor4 SeRViDoR2TRK SeRvidor3GT SeRvidoR4 host=<host> username=<Username> secret=<Secret> type=peer • Configuración entrante (Incoming Settings) – Contenido del usuario (USER Context = <Contenido del usuario>) – Detalles USUARIO (USER Details) secret=<Secret> type=user context=from-trunk 5. Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit Changes”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. En las tablas 8.3 y 8.4 se indican los valores para cada uno de los enlaces antes mencionados. En las figuras 8.6 y 8.7 se muestra la sección FreePBX Administration→ Connectivity→Trunks de FreePBX con la configuración del enlace al servidor 2. 56 8 Anexos Figura 8.6: Configuración enlace al Servidor 2 Parte 1 - FreePBX Figura 8.7: Configuración enlace al Servidor 2 Parte 2 - FreePBX 8.1. Implementación 57 Cuadro 8.5: Numeración local de extensiones en cada servidor Nombre PBX IP Servidor1 Servidor2 Servidor3 Servidor4 Rango de extensiones 100 200 300 400 - 199 299 399 499 Configuración de rutas de salida Posteriormente a la creación de las troncales, se configuró una ruta de salida para cada una de las mismas. Antes de mostrar como se hizo esa configuración es importante tomar en consideración la tabla 8.5 la cual muestra la numeración asignadas a las extensiones de forma local para cada uno de los servidores. Debido a que se buscaba hacer los enlaces de una manera transparente, el contenido de la tabla 8.5 es importante para definir la regla de marcación requerida para acceder a cada troncal. A continuación se indican los pasos seguidos para la configuración de las rutas de salida: 1. Se accedió a la administración web de Asterisk (FreePBX). 2. Se ingresó a FreePBX Administration→Connectivity→ Outbound Routes. 3. Luego se configuraron únicamente los siguientes parámetros: • Nombre de la ruta (Route Name) • En el tipo de ruta se seleccionó interno a la empresa (Route Type = Intra-Company): Esto significa que la extensión que utilice esta troncal se va a identificar con la otra PBX IP con el número de extensión local. • Regla de marcación (Dial Patterns that will use this Route→match pattern) • Secuencia de ocupación de troncales 4. Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit Changes”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. En la tabla 8.6 se indican los parámetros de configuración para cada uno de las rutas. 58 8 Anexos Cuadro 8.6: Parámetros de configuración rutas de salida Nombre de la ruta Regla de marcación Secuencia de ocupación IAX2 Route to Servidor2 IAX2 Route to Servidor3 IAX2 Route to Servidor4 2XX 3XX 4XX IAX2 Trunk S2 IAX2 Trunk S3 IAX2 Trunk S4 Figura 8.8: Configuración ruta de salida al Servidor 2 Parte 1 - FreePBX El hecho de que en la regla de marcación se coloque únicamente en el patrón de encuentro (match pattern) significa que el patrón de encuentro no únicamente va a contener información de la extensión con la que se desea realizar la comunicación sino también indicará la troncal por la que se debe de establecer la comunicación para llegar al destino deseado. Lo anterior implica que posteriormente a crear las troncales y los enlaces de salida en cada una de las PBX IP, los usuarios locales de cada PBX IP podrán comunicarse entre ellos como si se comunicaran con extensiones dentro de la misma PBX IP. En las figuras 8.8 y 8.9 se muestra la sección FreePBX Administration→ Connectivity→Outbound Routes de FreePBX con la configuración de la ruta de salida al servidor 2. 8.1. Implementación 59 Figura 8.9: Configuración ruta de salida al Servidor 2 Parte 2 - FreePBX Configuración de rutas de entrada Para la implementación todas las llamadas entrantes (any DID) se redireccionaron a la extensión 100. Para esto se realizaron los siguientes pasos: 1. Se accedió a la administración web de Asterisk (FreePBX). 2. Se ingresó a FreePBX Administration→Connectivity→Inbound Routes. 3. Luego se seleccionó la plantilla que redirecciona todas las llamadas entrantes: Para esto se seleccionó la opción “All DIDs” ubicado en un cuadro en la parte superior derecha de la pantalla. 4. Luego se configuraron únicamente los siguientes parámetros: • Descripción de la ruta de entrada (Description). • Se definió la extensión 100 como destino (Set Destination = Extensions <100>User11). 5. Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit Changes”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. 60 8 Anexos Figura 8.10: Configuración ruta de entrada - FreePBX En la figura 8.10 se muestra la sección FreePBX Administration→ Connectivity→Inbound Routes de FreePBX. 8.2 Pruebas de desempeño SIPP A continuación se describen los pasos seguidos para la instalación y configuración de SIPP : 1. Primero se instalaron los paquetes necesarios para la compilación. En la terminal: $ apt-get install make gcc g++ automake autoconf libncurses5-dev python build-essential openssl libpcap-dev libssl-dev libnet1-dev libgsl0-dev gsl-bin libgsl0ldbl 2. Posteriormente se descargó la aplicación SIPP. En la terminal: $ wget http://sourceforge.net/projects/sipp/files/sipp/3.2/sipp.svn.tar.gz 8.2. Pruebas de desempeño 61 3. A continuación se procedió a descomprimir el archivo descargado y posteriormente compilar la información descomprimida. En la terminal: $ tar -xzf sipp.svn.tar.gz $ cd sipp.svn $ make pcapplay_ossl 4. Posteriormente de haber completado la instalación fue necesario crear una extensión con una configuración en especı́fico, para luego generar las llamadas desde dicha extensión. Debido a que FreePBX no permite modificar ciertos parámetros necesarios, la creación de esta extensión se realizó por código. Para esto se accedió a RaspBerry Pi & Asterisk, posteriormente en la terminal: $ sudo nano /etc/asterisk/sip.conf Se agregó la siguiente información al final del documento: [sipp] type=friend context=sipp host=dynamic user=sipp canreinvite=no disallow=all allow=ulaw ; Al momento de realizar pruebas con otro codec se debe modificar este parámetro. 5. Posteriormente se le creó una regla de marcación a la extensión creada anteriormente. Desde RaspBerry Pi & Asterisk ; en la consola: $ sudo nano /etc/asterisk/extensions.conf Se agregó la siguiente información al final del documento: [sipp] exten => exten => exten => exten => 5005,1,Answer 5005,n,SetMusicOnHold(default) 5005,n,WaitMusicOnHold(20) 5005,n,Hangup 62 8 Anexos 6. Para que las modificaciones anteriores tengan efecto es necesario acceder a la lı́nea de comandos en Asterisk y recargar todos los archivos. Para esto, desde RaspBerry Pi & Asterisk ; en la consola: $ asterisk -r En la lı́nea de comandos de Asterisk : reload 7. Por último, se crearon dos escenarios, ambos que simulan el tráfico RTP en donde la única variación en cada uno es el codificador utilizado (como ya se mencionó, uno para G711 y otro para GSM). a) Se creó un archivo de texto con el nombre uac pcap u.xml, en donde se simula una codificación G711, de tipo u-law. Dentro de dicho archivo se incluyó el siguiente código: <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> <!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-- This program is free software; you can redistribute it and/or --> modify it under the terms of the GNU General Public License as --> published by the Free Software Foundation; either version 2 of the --> License, or (at your option) any later version. --> --> This program is distributed in the hope that it will be useful, --> but WITHOUT ANY WARRANTY; without even the implied warranty of --> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --> GNU General Public License for more details. --> --> You should have received a copy of the GNU General Public License --> along with this program; if not, write to the --> Free Software Foundation, Inc., --> 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --> --> Sipp ’uac’ scenario with pcap (rtp) play --> --> <scenario name="UAC with media"> <!-- In client mode (sipp placing calls), the Call-ID MUST be <!-- generated by sipp. To do so, use [call_id] keyword. <send retrans="500"> <![CDATA[ INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 --> --> 8.2. Pruebas de desempeño 63 Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] To: sut <sip:[service]@[remote_ip]:[remote_port]> Call-ID: [call_id] CSeq: 1 INVITE Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Type: application/sdp Content-Length: [len] v=0 o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] s=c=IN IP[local_ip_type] [local_ip] t=0 0 m=audio [auto_media_port] RTP/AVP 0 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-11,16 ]]> </send> <recv response="100" optional="true"> </recv> <recv response="180" optional="true"> </recv> <!-- By adding rrs="true" (Record Route Sets), the route sets <!-- are saved and used for following messages sent. Useful to test <!-- against stateful SIP proxies/B2BUAs. <recv response="200" rtd="true" crlf="true"> </recv> --> --> --> <!-- Packet lost can be simulated in any send/recv message by <!-- by adding the ’lost = "10"’. Value can be [1-100] percent. <send> <![CDATA[ --> --> ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] Call-ID: [call_id] CSeq: 1 ACK 64 8 Anexos Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]> </send> <!-- Play a pre-recorded PCAP file (RTP stream) <nop> <action> <exec play_pcap_audio="pcap/g711a.pcap"/> </action> </nop> --> <!-- Pause 8 seconds, which is approximately the duration of the <!-- PCAP file <pause milliseconds="8000"/> --> --> <!-- Play an out of band DTMF ’1’ <nop> <action> <exec play_pcap_audio="pcap/dtmf_2833_1.pcap"/> </action> </nop> --> <pause milliseconds="1000"/> <!-- The ’crlf’ option inserts a blank line in the statistics report. --> <send retrans="500"> <![CDATA[ BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] Call-ID: [call_id] CSeq: 2 BYE Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]> </send> <recv response="200" crlf="true"> 8.2. Pruebas de desempeño 65 </recv> <!-- definition of the response time repartition table (unit is ms) <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> --> <!-- definition of the call length repartition table (unit is ms) <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> --> </scenario> b) Se creó un archivo de texto con el nombre uac pcap g.xml, en donde se simula una codificación GSM. Dentro de dicho archivo se incluyó el siguiente código: <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> <!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-<!-- This program is free software; you can redistribute it and/or --> modify it under the terms of the GNU General Public License as --> published by the Free Software Foundation; either version 2 of the --> License, or (at your option) any later version. --> --> This program is distributed in the hope that it will be useful, --> but WITHOUT ANY WARRANTY; without even the implied warranty of --> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --> GNU General Public License for more details. --> --> You should have received a copy of the GNU General Public License --> along with this program; if not, write to the --> Free Software Foundation, Inc., --> 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --> --> Sipp ’uac’ scenario with pcap (rtp) play --> --> <scenario name="UAC with media"> <!-- In client mode (sipp placing calls), the Call-ID MUST be <!-- generated by sipp. To do so, use [call_id] keyword. <send retrans="500"> <![CDATA[ INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] To: sut <sip:[service]@[remote_ip]:[remote_port]> Call-ID: [call_id] CSeq: 1 INVITE Contact: sip:sipp@[local_ip]:[local_port] --> --> 66 8 Anexos Max-Forwards: 70 Subject: Performance Test Content-Type: application/sdp Content-Length: [len] v=0 o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] s=c=IN IP[local_ip_type] [local_ip] t=0 0 m=audio [media_port] RTP/AVP 0 3 a=rtpmap:3 gsm/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-11,16 ]]> </send> <recv response="100" optional="true"> </recv> <recv response="180" optional="true"> </recv> <!-- By adding rrs="true" (Record Route Sets), the route sets <!-- are saved and used for following messages sent. Useful to test <!-- against stateful SIP proxies/B2BUAs. <recv response="200" rtd="true" crlf="true"> </recv> --> --> --> <!-- Packet lost can be simulated in any send/recv message by <!-- by adding the ’lost = "10"’. Value can be [1-100] percent. <send> <![CDATA[ --> --> ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] Call-ID: [call_id] CSeq: 1 ACK Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]> 8.2. Pruebas de desempeño 67 </send> <!-- Play a pre-recorded PCAP file (RTP stream) <nop> <action> <exec play_pcap_audio="pcap/g711a.pcap"/> </action> </nop> --> <!-- Pause 8 seconds, which is approximately the duration of the <!-- PCAP file <pause milliseconds="8000"/> --> --> <!-- Play an out of band DTMF ’1’ <nop> <action> <exec play_pcap_audio="pcap/dtmf_2833_1.pcap"/> </action> </nop> --> <pause milliseconds="1000"/> <!-- The ’crlf’ option inserts a blank line in the statistics report. --> <send retrans="500"> <![CDATA[ BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] Call-ID: [call_id] CSeq: 2 BYE Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]> </send> <recv response="200" crlf="true"> </recv> <!-- definition of the response time repartition table (unit is ms) <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> --> <!-- definition of the call length repartition table (unit is ms) --> 68 8 Anexos <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> </scenario> 8.3 Implementación de funciones adicionales Troncal por GSM A continuación se detallan los pasos seguidos para la instalación del módem GSM. 1. Se desactivó el pin de chip GSM utilizado. 2. Se introdujo el chip GSM en el módem. 3. Antes de conectar al módem al RaspBerry Pi, se instaló el controlador del módem GSM. En la terminal: $ install-dongle 4. Posteriormente a la instalación se procedió a conectar el módem GSM. 5. Se accedió a la administración web de Asterisk (FreePBX). 6. Se ingresó a FreePBX Administration→Connectivity→Trunks. 7. Se seleccionó el protocolo del enlace, en este caso “Custom Trunk”. 8. Luego se configuraron únicamente los siguientes parámetros: • Nombre de la troncal (Trunk Name = GSM CLARO) • Identificación llamada saliente (Outbound CallerID = <número telefónico>) • Opciones CID (Opciones CID = Allow any CID) • Cadena de marcado personalizada dongle/dongle0/$OUTNUM$ 9. Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit Changes”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. 10. Se ingresó a FreePBX Administration→Connectivity→ Outbound Routes. 8.3. Implementación de funciones adicionales 69 Figura 8.11: Configuración troncal GSM - FreePBX 11. Luego se configuraron únicamente los siguientes parámetros: • Nombre de la ruta (Route Name = Gsm) • Regla de marcación (Dial Patterns that will use this Route→prefix = 9 y Route→match pattern = XXXXXXXX) • Secuencia de ocupación de troncales (Trunk Sequence for Matched Routes 0 = GSM CLARO) 12. Se guardaron y aplicaron los cambios: Hacer clic en el botón “Submit Changes”, posteriormente clic en el botón rojo que aparece en la parte superior con el nombre “Apply Config”. En las figuras 8.11 y 8.12 se muestra la sección FreePBX Administration→ Connectivity→Trunks y FreePBX Administration→Connectivity→ Outbound Routes de FreePBX con la configuración indicada anteriormente. R Hardphone marca Ciscomodelo CP-7940 A continuación se indican los pasos seguidos para configurar los parámetros de red: 1. Se conectó el teléfono a la alimentación eléctrica. 70 8 Anexos Figura 8.12: Configuración ruta de salida GSM - FreePBX 2. Posteriormente a que el teléfono iniciara, se presiono el botón “Settings” y se accedió a “Unlock Changes”, luego se ingreso la contraseña de administración (la cual para este modelo en particular es “cisco”). Lo anterior nos da acceso a modificar los parámetros de configuración, de no hacerlo únicamente nos va a permitir observar dichos parámetros. 3. Luego se ingresó a “Network Settings”, se activo DHCP y además el uso de un servidor TFTP alternativo. 4. Posteriormente se guardaron los cambios y dentro de “Network Settings” se ajusto la direccion IP del servidor TFTP. Posteriormente a la configuración de los parámetros de red, se procedió a descargar una versión de firmware que soporte SIP. Por lo general son 4 archivos y para una versión de firmware 12.0, los nombres de los archivos deben ser similares a los siguientes: • P0S3-12-0-00.loads • P0S3-12-0-00.sb2 • P003-12-0-00.bin 8.3. Implementación de funciones adicionales 71 • P003-12-0-00.sbn Dichos archivos deben almacenarse en el servidor TFTP para que el teléfono VoIP tenga acceso a los mismos y pueda actualizarse. Luego se crearon los archivos que contienen la configuración general y configuración de identificación SIP. Estos deben ser nombrados se la siguiente forma: • SIPDefault.cnf • SIP<MAC>.cnf A continuación se brinda una descripción de la función de cada uno de los archivos antes mencionados y el contenido de los mismos: 1. SIPDefault.cnf: Este archivo cuenta con información de configuración general, y a este acceden todos los teléfonos VoIP que lo requieran durante su inicio. El contenido de este archivo debe ser el siguiente: image_version: P0S3-12-00-00 proxy1_address: "<IP de la PBX>" proxy2_address: "" proxy3_address: "" proxy4_address: "" proxy5_address: "" proxy6_address: "" proxy_register: 1 messages_uri: "1" phone_password: "cisco" ; (Default - cisco) time_zone: "GMT" time_format_24hr: 1 ; Muestra la hora en formato 24 horas date_format: "Y/M/D" ; Formato en el que se muestra la fecha dial_template: dialplan 2. SIP<MAC>.cnf: Este archivo contiene información referente a la identificación SIP. A este archivo únicamente accede el teléfono con la dirección MAC respectiva. Por lo que que debe existir un archivo de estos por cada teléfono que lo requiera durante su inicio. El contenido de este archivo debe ser el siguiente: image_version: P0S3-12-00-00 # Configuración lı́nea 1 72 8 Anexos line1_name: 100 ; nombre de la extensión line1_authname: "100" line1_shortname: "100" ; Identificación botón de lı́nea. line1_password: "User11" line1_displayname: "100"; Identificación del usuario proxy1_port: 5060 ; Puerto SIP proxy1_address: <IP de la PBX> # Configuración lı́nea 2 line2_name: 103 line2_authname: "103" line2_shortname: "103" line2_password: "User14" line2_displayname: "103"; # Configuración adicional phone_label: "" ; Texto a mostrar en pantalla. phone_password: "cisco" user_info: none telnet_level: 2 logo_url: "" ; URL de la imagen a mostrar, BMP. Posteriormente se debe reiniciar el teléfono presionando los botones “*”,“6” y “Settings” simultáneamente, hasta que los LEDs en los botones “Headset”, “Mute” y “Speaker” empiecen a parpadear secuencialmente. El teléfono iniciara nuevamente cargando el nuevo firmware y la configuración respectiva. Bibliografı́a Akb77 (2013). Asterisk high availabilty - ejemplo escabilidad de asterisk. http://akb77.com/g/asterisk/asterisk-high-availabilty/. Asterisk.do (2013). Asterisk.do: Arquitectura de asterisk. http://rdasterisk.blogspot.com/2012/01/arquitectura-de-asterisk-desdeun-punto.html. Bryant, R., Madsen, L., y Maggelen, J. V. (2013). Asterisk the definitive guide. O’Reilly Media. Cynthec y Pimoro (2013). GPIO Cheat https://www.modmypi.com/blog/raspberry-pi-gpio-cheat-sheet. Sheet. element14 (2013). Piface digital for raspberry pi. http://www.element14.com/community/docs/DOC-52857/l/piface-digitalfor-raspberry-pi. Garcia, R. (2008). Integración de PBX analógica/digital con PBX IP por software del ministerio del poder popular para la cultura e interconexión con la red PSTN de CANTV. PhD thesis, Universidad Central de Venezuela. Lyzanor (2012). X86 y arm: Diferencias, ventajas y para que sirve cada uno. http://www.omicrono.com/2012/12/te-explicamos-todo-sobre-x86-yarm-diferencias-ventajas-y-para-que-sirve-cada-uno/. Meggelen, J. V., Madsen, L., y Smith, J. (2007). The Future of Telephony. O’Reilly Media. Raspberry&asterisk-community (2013a). http://www.raspberry-asterisk.org/. Asterisk for raspberry pi. Raspberry&asterisk-community (2013b). Gsm voip gateway with chan dongle. http://wiki.e1550.mobi/doku.php?id=requirements. RaspBerryPi-Foundation (2013). http://www.raspberrypi.org. Raspberry pi official web page. Rosa, F. S. (2009). Manual de Asterisk y otras hierbas. GNU Free Documentation License. SD-Association (2013). Sd standard overview. https://www.sdcard.org/. 73