Diseño de VoIP con Asterisk en PyME
Diseño de VoIP con Asterisk en PyME
Ingeniería en Telecomunicaciones
Autores:
Abed Carlos
Salvetti Diego
Sanchez Clariá Francisco
Director:
Ing. Juan Galleguillo
Asesor:
Ing. Hector Riso
2006
Agradecimientos
A mi viejo, por haberme dado siempre todo lo que tenía para facilitar el cumplimiento de mis
sueños. A mi mamá, por las fuerzas que siempre me dio su amor incondicional.
Abed Carlos.
A Dios, que siempre está. A mi familia (Carlos, Cristina, Tía Hilda, Dudo y Ariel) que me dan
todo el afecto que necesito, gracias a ellos soy lo que soy. A Lucas G. A mis amigos de Cañada
(Lepra, Ruso, Fafa, Narí, Pecky, Master, etc), los chicos de Rosario y a TODOS los compañeros
que conocí acá, con los cuales pude contar siempre. A mis amigas (Marce, Karla, Silvia, Tamy,
etc) que siempre me escucharon. A la Sa y su familia. A Franco, Legolas ,Santi y Pablo que
soportaron vivir conmigo.
Salvetti Diego.
A mi familia y verdaderos amigos, a mis compañeros de la facu y a ese puñado de profesores que
generan el interés de aprender con su vocación de enseñar.
Sanchez Clariá Francisco.
También a su vez, quisiéramos agradecer a Raúl y a Charlie, por la motivación que nos dieron
para trabajar sobre este proyecto. Y además, agradecer a nuestro amigo El Lagarto, quien con su
aporte nos brindó claridad y calidad en los primeros pasos de este proceso.
Dedicatorias
A tantas personas...mi familia, mis hermanos del San Jorge y mis amigos, quienes han hecho un
aporte invaluable en mi crecimiento como persona, y lo siguen haciendo día a día. A Marcela,
quien amo con el alma, y a Clarita, quien en pocos meses se robará mi corazón.
Abed Carlos.
A mis abuelos/as (Manuela, Irma, Poroto y Atilio) y mi familia, que siempre están presentes en
mi corazón, a los grandes amigos que coseché en mi paso por la Universidad, al Agus y su familia
y a todas las personas que me brindaron su amistad.
Salvetti Diego.
A mis viejos, que dejaron muchos sueños de lado para permitirme estudiar... entre tantas otras
cosas les debo un viaje en globo y un jeep blanco ; ).
Sanchez Clariá Francisco.
Resumen
3
Resumen
A partir de trazar éste objetivo y una vez conseguido el potencial cliente para la im-
plementación, se realizó un relevamiento técnico que permitió acotar la solución.
Queda claro en el siguiente trabajo que Asterisk no es un sistema fácil de diseñar, sin
embargo permite obtener diversas soluciones perfectamente ajustables a las necesidades
de comunicaciones de una empresa.
Desde el punto de vista económico, una solución Asterisk pasa a ser rentable cuando se
explotan sus aplicaciones avanzadas, ya que en cuanto a hardware no puede competir
con la fabricación de equipamiento a gran escala.
Además, del diseño propiamente dicho, este trabajo contiene una introducción general
a VoIP, como así también una explicación detallada de un sistema Asterisk, desde su
instalación hasta su configuración avanzada.
4
Índice
Introducción 12
Metodologías 16
1. Estudio de los principios de funcionamiento de VoIP y protocolos 18
1.1. Telefonía Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2. Redes de paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3. Voz sobre IP (VoIP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.2. Integración de servicios y unificación de estructura. . . . . . . . . . . . . . . 19
1.3.3. Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4. Especificaciones H.323 y SIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.1. El Estándar H.323 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.2. La recomendación SIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.4.3. Comparación entre H.323 y SIP . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.5. Especificaciones de IAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.5.1. Descripción del Protocolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.5.2. Frames IAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.6. SIP Vs. IAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.6.1. Calidad de Servicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5
2.8.4. Selección de la Placa Madre . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.8.5. Requerimientos de Suministro de Energía . . . . . . . . . . . . . . . . . . . 54
2.8.6. Ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.9. Hardware de Telefonía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.9.1. La unión a la PSTN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.9.2. Conexión a una Red Telefónica de Conmutación de Paquetes . . . . . . . . 62
2.10. Tipos de Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.10.1. Teléfonos Físicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.10.2. Teléfonos por Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.10.3. Adaptadores de Telefonía . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.10.4. Terminales de Comunicaciones . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.11. Consideraciones de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.12. Instalando Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.12.1. ¿Qué paquetes necesito? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.12.2. Requerimientos de los paquetes . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.12.3. Obteniendo el código fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.12.4. Extrayendo el código fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.12.5. Obteniendo el código fuente de Asterisk desde CVS . . . . . . . . . . . . . 67
2.12.6. Compilando Zaptel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.12.7. El driver ztdummy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.12.8. Drivers telefónicos Zapata . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.12.9. Usando ztcfg y zttool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.12.10.El archivo zconfig.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.12.11.Compilando libpri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2.12.12.Compilando Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.12.13.Usando binarios precompilados . . . . . . . . . . . . . . . . . . . . . . . . . 76
2.12.14.Instalando adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
2.12.15.Otros plugins de utilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.12.16.Actualizando su código fuente . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.12.17.Cuestiones comunes cuando se compila . . . . . . . . . . . . . . . . . . . . . 77
2.12.18.Cargando los módulos Zaptel . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.12.19.Sistemas corriendo udevd . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.12.20.Cargando Zaptel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.12.21.Cargando ztdummy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.12.22.Cargando libpri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.12.23.Cargando Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.12.24.Comandos CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.12.25.Script de inicialización de Red Hat . . . . . . . . . . . . . . . . . . . . . . . 81
2.12.26.Directorios utilizados por Asterisk . . . . . . . . . . . . . . . . . . . . . . . 81
2.12.27.Usuarios, Pares y Amigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
2.12.28.Declaraciones de registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
2.13. Configuración inicial de Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
2.13.1. ¿Qué es realmente necesario? . . . . . . . . . . . . . . . . . . . . . . . . . . 85
2.13.2. Trabajando con archivos de configuración de interfaces . . . . . . . . . . . . 86
2.13.3. Canales FXO y FXS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
2.13.4. Configurando SIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.13.5. Configurando Conexiones entrantes IAX . . . . . . . . . . . . . . . . . . . . 95
2.13.6. Depurando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2.13.7. Conectando a la Consola . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6
2.13.8. Activando Verbosidad y Depuración . . . . . . . . . . . . . . . . . . . . . . 99
2.14. Fundamentos del dial plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
2.14.1. Sintaxis del dial plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
2.14.2. Un dial plan simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
2.14.3. Las aplicaciones Answer ( ), Playback( ) y Hangup( ) . . . . . . . . . . . . 103
2.14.4. Primer dial plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
2.15. Adición de Lógica al dial plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.15.1. Las aplicaciones Background ( ) y Goto ( ) . . . . . . . . . . . . . . . . . . 104
2.15.2. El Manejo de Entradas Inválidas e Intervalos de espera . . . . . . . . . . . . 105
2.15.3. Usando la aplicación Dial ( ) . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.15.4. Contexto para Llamadas Internas . . . . . . . . . . . . . . . . . . . . . . . . 108
2.15.5. Utilización de Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2.15.6. Correspondencia de Patrones . . . . . . . . . . . . . . . . . . . . . . . . . . 111
2.15.7. Permitiendo llamadas salientes . . . . . . . . . . . . . . . . . . . . . . . . . 112
2.15.8. Inclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
2.16. Más conceptos acerca del Dial plan . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
2.16.1. Manipulación de variables y expresiones . . . . . . . . . . . . . . . . . . . . 115
2.16.2. Funciones del dial plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
2.16.3. Ramificaciones condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . 118
2.16.4. Correo de voz (Voicemail) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
2.16.5. Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
2.16.6. Usando la base de datos Asterisk (AstDB) . . . . . . . . . . . . . . . . . . . 126
2.16.7. Adelantos prácticos de Asterisk . . . . . . . . . . . . . . . . . . . . . . . . 128
2.17. Codecs y Protocolos de VoIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
2.18. La Necesidad de Protocolos VoIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
2.18.1. Protocolos de VoIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
2.19. Codecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
2.19.1. G.711 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
2.19.2. G.726 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
2.19.3. G.723.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
2.19.4. G.729A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
2.19.5. GSM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
2.19.6. iLBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
2.19.7. Speex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
2.19.8. MP3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
2.20. Panorama de Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
2.20.1. Desafíos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
2.20.2. Algunas cosas que son posibles . . . . . . . . . . . . . . . . . . . . . . . . . 139
7
3.3.3. Cuestiones Personales o de Uso . . . . . . . . . . . . . . . . . . . . . . . . . 147
3.3.4. Cuestiones generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
3.4. Diagrama de Estados para el IVR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
5. Conclusión 173
8
Índice de figuras
9
Índice de tablas
10
Introducción
11
Introducción
La tecnología de Voice over IP (VoIP), cuyo origen se remonta muchos años atrás
cuando comenzaron los primeros experimentos de transmisión de voz sobre redes de
paquetes, ha cobrado una importancia tremenda en los últimos años, dando lugar a
grandes esfuerzos e inversiones que, sin duda, están revolucionando las redes telefónicas
y, sobre todo, los servicios y aplicaciones que ésta nos ofrece.
VoIP es muy adecuada para dar un servicio de telefonía de larga distancia a bajo precio
ya que todas las llamadas se facturan como locales. Además las llamadas en general
presentan una menor tarifa y si se trata de comunicaciones entre equipos de VoIP las
comunicaciones son directamente sin costo, excepto del propio mantenimiento de la
conexión de banda ancha utilizada para unirse a la red de redes.
Una de las formas de efectivizar la reducción de costos que implica el uso de VoIP, su-
mado a la cuestión del ahorro en la tarifación de llamadas, es la posibilidad de utilizar
sistemas abiertos de distribución libre.
La licencia GNU se obliga a poner a disposición del usuario el código fuente. El bene-
ficio que el código sea abierto queda a la vista en GNU/LINUX y sus distribuciones.
Este sistema operativo es el que más ha evolucionado en los últimos años, precisamente
gracias a su código, que comunidades de usuarios han corregido y modificado convir-
tiéndolo en un sistema mas accesible, seguro, rápido y confiable (Bezama, 2006).
12
Asterisk es un proyecto Open Source basado en la licencia descripta anteriormente,
que conforma una plataforma Private Branch eXchange (PBX) e Interactive Voice
Response (IVR) híbrida Time Division Multiplexing (TDM) y voz sobre paquetes. Es
probablemente el software de telecomunicaciones mas poderoso, flexible y extensible dis-
ponible. Asterisk está diseñado como interface entre, virtualmente, cualquier hardware
o software de telefonía con aplicaciones telefónicas, de manera robusta y consistente
(Spenser, 2005).
Asterisk puede, entre otras cosas, ser usados en cualquiera de estas aplicaciones:
Gateway heterogéneo de VoIP(Haciendo uso de MGCP, SIP, IAX, H.323)
Intercambio de Rama Privada (Private Branch eXchange - PBX)
Servidor adaptable de Respuesta de Voz Interactiva (IVR)
Softswitch
Servidor de conferencias
Traducción de números
Aplicaciones de tarjeta de llamada
Discador predictivo
Llamadas en espera con agentes remotos
Oficinas remotas para PBX existentes
Quizás lo más importante es que puede cumplir con todos estos roles simultáneamente
y entre todas sus interfaces.
Otra ventaja de Asterisk es que fue diseñado para permitir que nuevas interfaces y
tecnologías sean agregadas fácilmente. Su meta suprema es dar soporte a todas las tec-
nologías de telefonía disponibles. En general, las interfaces se dividen en tres categorías:
hardware Zaptel, hardware no-Zaptel y voz en paquetes.
Las interfaces Zaptel pseudo TDM permiten integración con la telefonía tradicional
analógica y digital, incluyendo conexión con la red pública. Además, proveen conmuta-
ción pseudo-TDM entre ellas, para mantener la latencia prácticamente inexistente en
llamadas y conferencias TDM.
13
hardware especializado de ninguna clase.
Los soportados actualmente son:
Protocolo de Inicialización de Sesión, SIP
Intercambio entre Asterisk,IAX versión 1 y 2
MGCP
ITU H.323
VoFR
El presente trabajo trata sobre el diseño de una implementación de una PBX Asterisk
en el entorno de una Pequeña y Mediana Empresa (PyME). Esta implementación está
en función de las características y necesitdades que se analizaron en la empresa, y per-
mite ver la total flexibilidad de esta solución de comunicacions que puede adaptarse a
las necesidades particulares de cada caso.
14
Metodologías
15
Metodologías
16
Resultado y discusión
17
1. Estudio exploratorio de carácter bibliográfico de los
principios de funcionamiento de VoIP y sus protocolos
asociados.
del VoIP junto con el abaratamiento de los Digital Processor Signal (DSP), los cuales
son claves en la compresión y descompresión de la voz, son los elementos que han hecho
posible el depliegue de estas tecnologías.
Para este auge existen otros factores, tales como la aparición de nuevas aplicaciones o la
apuesta definitiva por VoIP de fabricantes como Cisco Systems o Nortel-bay Networks.
Por otro lado los operadores de telefonía están ofreciendo o piensan ofrecer en un futuro
cercano, servicios IP de calidad a las empresas.
1.3.3. Generalidades
¿Qué es VoIP?
VoIP viene de Voice Over Internet Protocol. Como dice el termino VoIP intenta permitir
que la voz viaje en paquetes IP y obviamente a través de Internet.
La telefonía IP conjuga dos mundos históricamente separados: la transmisión de voz
y la de datos. Se trata de transportar la voz, previamente convertida a datos, entre
dos puntos distantes. Esto posibilitaría utilizar las redes de datos para efectuar las
llamadas telefónicas, y yendo un poco más allá, desarrollar una única red convergente
que se encargue de cursar todo tipo de comunicación, ya sea voz, datos, video o cualquier
tipo de información.
La voz IP, por lo tanto, no es en sí mismo un servicio, sino una tecnología que permite
encapsular la voz en paquetes para poder ser transportados sobre redes de datos sin
necesidad de disponer de los circuitos conmutados convencionales PSTN.
Las redes desarrolladas a lo largo de los años para transmitir las conversaciones vocales,
se basaban en el concepto de conmutación de circuitos, o sea, la realización de una
comunicación que requiere el establecimiento de un circuito físico durante el tiempo
que dura ésta, lo que significa que los recursos que intervienen en la realización de
una llamada no pueden ser utilizados en otra hasta que la primera no finalice, incluso
durante los silencios que se suceden dentro de una conversación típica.
En cambio, la telefonía IP no utiliza circuitos para la conversación, sino que envía
múltiples dellas (conversaciones) a través del mismo canal codificadas en paquetes y
flujos independientes. Cuando se produce un silencio en una conversación, los paquetes
de datos de otras conversaciones pueden ser transmitidos por la red, lo que implica un
uso más eficiente de la misma.
Son evidentes las ventajas que proporciona el segundo tipo de red, ya que con la mis-
ma infraestructura podrían prestar mas servicios y además la calidad de servicio y la
velocidad serian mayores; pero por otro lado también existe la gran desventaja de la
seguridad, ya que no es posible determinar la duración del paquete dentro de la red
hasta que este llegue a su destino y además existe la posibilidad de perdida de paquetes,
ya que el protocolo IP no cuenta con esta herramienta.
Años atrás se descubrió que mandar una señal a un destino remoto podía hacerse
también de manera digital: antes de enviar la señal se debía digitalizar con un ADC
(analog to digital converter), transmitirla y en el extremo de destino transformarla de
nuevo a formato análogo con un DAC (digital to analog converter).
1.3 Voz sobre IP (VoIP) 21
Componentes de H.323
Terminales
Gateways
Gatekeepers
MCU (Unidades de Control Multipunto)
1.4 Especificaciones H.323 y SIP 23
Terminales
Gateways
Se utilizan para interconectar redes disímiles. Conecta en definitiva, redes H.323 con
redes que no son H.323. Puede conectar, por ejemplo, terminales de una red H.323 y
redes PSTN. Para lograr esta interconexión, se traducen protocolos de una red hacia
la otra usando el gateway. Dentro de una misma red H.323 no es necesario utilizar un
gateway.
Gatekeepers
Se lo puede considerar como un portero en una red H.323. Aquí se efectúan las tareas
de direccionamiento, autenticación tanto de terminales como gateways, gestión de an-
cho de banda y contabilidad. Pueden también proveer servicios de encaminamiento de
llamadas.
Éstas proveen soporte para realizar conferencias. A tal efecto los terminales que deseen
participar deberán conectarse al MCU. Así, el MCU gestionará los recursos negociando
entre terminales. Gatekeepers, Gateways y MCU pueden ser componentes que físi-
camente estén integrados en un solo equipo, aunque de manera lógica implementen
funciones totalmente separadas.
Zonas H.323
Codecs de audio
Codecs de video
Registro, Admisión y Estado H.225 (RAS)
Señalización de llamadas H.225
Señalización de control H.245
Protocolo de transferencia en tiempo real (RTP)
Protocolo de control en tiempo real (RTCP)
H.323 es independiente de la red de paquetes y de los protocolos de transporte sobre
los cuales corre y no establece especificaciones sobre estos.
Codec de audio: permite la codificación de las señales de audio que ingresan al teminal
H.323 para ser transmitidas y decodifica el audio recibido para que sea reproducido por
el parlante.
Todos los terminales H.323 deben soportar al menos un codec de audio como se espe-
cifica en las recomendaciones ITU-T G.711 (i.e., codificación a 64kbps). Puede opcio-
nalmente soportar otros tales como G.722, G.723, G.728 y G.729.
Codec de video: permite codificar la señal de video que ingresa al terminal transmisor y
decodificar los datos de video codificado recibidos para enviarlos al monitor. El soporte
de este codec es opcional dado que también lo es el soporte de video en H.323.
RAS, registro, admisión y estado H.225: se trata de un protocolo usado entre los termi-
nales y gateways (puntos terminales) y el gatekeeper. RAS es usado para las funciones
de registro, control de admisión y gestión de ancho de banda entre puntos terminales y
gatekeeper, entre otras funciones. Para los mensajes RAS se utiliza lo que se denomina
un canal RAS, que es un canal de señalización que está abierto entre una Terminal y
el gatekeeper antes del establecimiento de cualquier otro canal.
Señalización de llamadas H.225: esta señalización se utiliza para el establecimiento de
las conexiones entre dos puntos terminales H.323, mediante el intercambio de mensajes
1.4 Especificaciones H.323 y SIP 25
sobre el canal de señalización. Éste canal existe entre dos puntos terminales H.323 o
entre un terminal y un gatekeeper.
Señalización de Control H.245: esta señalización se usa para manejar la operación de los
puntos extremos H.323 intercambiando mensajes de control que transportan la siguiente
información:
Intercambio de capacidades
Apertura y cerrado de canales lógicos usados para transportar flujos multimedia
Mensajes de control de flujo
Comandos e indicaciones generales
Protocolo de Transporte en Tiempo Real, RTP: es el encargado de aprovisionar la en-
trega de audio y video en tiempo real de extremo a extremo. Es usado, de manera
típica, para transportar datos usando UDP.
RTP provee identificación del tipo de carga, numeración de secuencia, time-stamping
(impresión de tiempo), y monitorización de la entrega. UDP provee multiplexación y
servicios de control de errores (checksum). RTP puede ser además utilizado con otros
protocolos de transporte.
Protocolo de Control de Transporte en Tiempo Real, RTCP: provee los servicios de con-
trol para RTP, brindando principalmente realimentación sobre la calidad de la distribu-
ción de los datos. Además, permite transportar un identificador de capa de transporte
para una fuente RTP que se denomina nombre canónico, el cual se usa en los receptores
para sincronizar el audio y video.
Características de un Gatekeeper
Los gatekeepers se encargan de proveer servicios para controlar las llamadas tales como
traslación de dirección y gestión de ancho de banda y son opcionales dentro de una red
H.323. Sin embargo cuando un gatekeeper existe en la red, terminales y gateways se
ven obligados a utilizarlos. H.323 define un conjunto de servicios obligatorios y otros
opcionales que deben ser brindados por el gatekeeper.
Una característica opcional del gatekeeper es el encaminamiento de señalización de
llamadas.
Los puntos terminales envían mensajes de señalización de llamadas al gatekeeper, y
estos mensajes son encaminados por los gatekeeper hacia los puntos terminales desti-
natarios.
Alternativamente, los puntos terminales pueden enviar un mensaje de señalización de
llamada directamente hacia el punto terminal par. Esta característica del gatekeeper es
importante ya que el monitoreo de las llamadas por el gatekeeper proveen mejor control
de las llamadas en la red. El encaminamiento de llamadas a través del gatekeeper,
provee mejor desempeño en la red, ya que puede tomar decisiones de encaminamiento
basándose en una variedad de factores, por ejemplo, el balanceo de carga entre gateways.
1.4 Especificaciones H.323 y SIP 27
RAS define los servicios de un gatekeeper entre los que se encuentra la traslación de
direcciones, control de admisión, control de ancho de banda y gestión de zonas.
Las redes H.323 que contienen gateways de telefonía IP deben también contener un
gatekeeper para trasladar las direcciones de telefonía entrante bajo el formato definido
en la norma E.164 a direcciones de transporte.
Un gatekeeper es un componente lógico de H.323 pero puede ser implementado como
parte de un gateway o un MCU. En la figura se muestran los componentes de un
gatekeeper.
Funciones obligatorias del Gatekeeper
Traslación de direcciones: Las llamadas originadas dentro de una red H.323 pueden
utilizar un alias para direccionar el terminal de destino. Las llamadas originadas fuera de
la red H.323 y recibidas por un gateway, pueden usar un número telefónicos E.164 (por
ejemplo: 310-442-9222) para direccionar el terminal destino. El gatekeeper traslada
este número telefónico E.164 o el alias a una dirección de red (ejemplo: 204.252.32:456
para una red basada en IP) para el terminal destinatario. El punto terminal destino
puede ser alcanzado usando la dirección de red en una red H.323.
Control de Admisión: El gatekeeper puede controlar la admisión de los puntos ter-
minales dentro de la red H.323. Utiliza mensajes RAS, Pedido de admisión (ARQ),
Confirmación (ACF) y Rechazo (ARJ) para lograr esto.
La función de control de admisión puede ser anulada, por lo tanto se admiten todos los
puntos terminales a la red H.323.
Control de Ancho de Banda: El gatekeeper provee soporte para el control de ancho de
banda mediante el uso de mensajes RAS, requerimiento de ancho de banda (BRQ),
confirmación (BCF) y rechazo (BRJ).
Por ejemplo, si un gestor de red tiene especificado un umbral para el número de cone-
xiones simultáneas en una red H.323, el gatekeeper puede rechazar el establecimiento
de alguna conexión nueva una vez que se alcanzó el límite. El control de ancho de banda
puede ser también una función anulada y con esto se aceptan todos los requerimientos
para cambios de ancho de banda.
1.4 Especificaciones H.323 y SIP 28
Gestión de Zonas: El gatekeeper provee las funciones anteriores para terminales, gate-
ways, y MCU situadas dentro de sus zonas de control.
Funciones opcionales del Gatekeeper
Señalización del control de llamadas: El gatekeeper puede encaminar los mensajes de
señalización de llamadas entre los puntos terminales H.323. En una conferencia punto
a punto, el gatekeeper puede procesar mensajes de señalización de llamadas H.225.
Alternativamente, el gatekeeper puede permitir a los puntos terminales enviar mensajes
de señalización de llamadas H.225 directamente entre ellos.
Autorización de llamadas: Cuando un punto terminal envía mensajes de señalización
de llamadas a un gatekeeper, el gatekeeper puede aceptar o rechazar la llamada, de
acuerdo a las especificaciones H.225.
La razón para el rechazo puede incluir restricciones basadas en el acceso o basadas en
el tiempo, hacia o desde un terminal o gateway en particular.
Gestión de llamadas: El gatekeeper puede mantener información acerca de todas las
llamadas H.323 activas, de modo que puede controlar su zona mediante la provisión de
información retenida a la función de gestión de ancho de banda o mediante el desborde
de llamadas a diferentes puntos terminales para alcanzar el balanceo de cargas.
El RAS H.225 es usado entre puntos terminales H.323 (terminales y gateways) y gate-
keepers para lo siguiente:
Descubrimiento del gatekeeper (GRQ)
Registro de puntos terminales
Localización de puntos terminales
Control de admisión
Pruebas de acceso
Los mensajes RAS son transportados sobre un canal RAS que no es confiable. Por
lo tanto, el intercambio de los mensajes RAS puede ser asociado con un time out o
contadores.
Descubrimiento del Gatekeeper: El proceso de descubrimiento del gatekeeper es utiliza-
do por los puntos terminales H.323, para determinar el gatekeeper con el cual el punto
terminal debe registrarse. El descubrimiento del gatekeeper puede ser realizado está-
ticamente o dinámicamente. En el descubrimiento estático, el punto terminal conoce
a priori la dirección de transporte de su gatekeeper. En el método dinámico, el punto
terminal realiza un multicast de mensajes GRQ "¿Cual es mi gatekeeper?" sobre la
dirección de multicast de descubrimiento del gatekeeper.
Registro del Punto Terminal: El registro es un proceso usado por los puntos terminales
para unirse a una zona e informar al gatekeeper de las direcciones de alias y transporte
de la zona.
Todos los puntos terminales se registran con un gatekeeper como parte de sus configu-
raciones.
Localización de puntos terminales: La localización de puntos terminales es un proceso
por el cual la dirección de transporte de un punto terminal es determinada, dado su
nombre de alias o dirección E.164.
1.4 Especificaciones H.323 y SIP 29
Otros Controles: El canal RAS es utilizado para otro tipo de mecanismos de control,
tales como control de admisión, para restringir la entrada de un punto terminal dentro
de una zona, control de ancho de banda, y control de desconexión cuando un punto
terminal es desasociado de un gatekeeper y su zona.
Intervenía solo para establecer las sesiones y finalizaba su intervención una vez que la
sesión era establecida.
En 1996 IETF emitió un draft que describía un mecanismo para invitar usuarios a
sesiones punto a punto y sesiones multicast, llamado Protocolo de Conferencia Simple
(SCIP). Este se basaba en HTTP y por ello utilizaba TCP como protocolo de transpor-
te, y también era basado en texto. SCIP utilizaba direcciones de e-mail para identificar
a los usuarios, con el objetivo de proveer un identificador universal para comunicacio-
nes asincrónicas y sincrónicas. La señalización de CSIP se mantenía después de que la
sesión se establecía.
Sip: usuario@host
Sip: usuario:contraseña@host
Sip: usuario@direccionIP:puerto
Sip: usuario@host;parametros-url
1.4 Especificaciones H.323 y SIP 31
Donde:
usuario: El nombre del usuario.
contraseña: Clave de seguridad del usuario.
host: El host donde se encuentra el usuario. Puede ser un nombre o una dirección IP.
puerto: Numero de puerto para enviar una solicitud.
parámetros URL: Los URL’s SIP pueden definir parámetros específicos de la solicitud.
Son agregados después del componente Host y son separados por punto y coma. Entre
ellos están:
El parámetro de transporte "transport" determina el mecanismo de transporte, TCP o
LTDP (UDP es asumido por defecto).
El parámetro "maddr" provee la dirección del servidor a ser contactado por este usuario.
El parámetro "ttl" determina el valor del tiempo de vida para los paquetes multicast
UDP y solo debe ser usado si "maddr" es una dirección multicast.
Los parámetros transporte, "maddr", y "ttl" no deben ser usados en los campos cabe-
ceras From y To y en las Request-URL. Serán ignorados si están presentes.
Headers: Las cabeceras de las solicitudes SIP pueden ser definidas con el mecanismo ?
dentro de un URL SIP.
Method: El método de una solicitud SIP puede ser especificada con el parámetro "met-
hod" dentro de un LTRL SIP.
Entidades SIP
UAC: Agente del Usuario Cliente, es el que llama: Un UAC es un cliente a nivel apli-
cación que inicia una solicitud SIP.
UAS: Agente del usuario Servidor. Un UAS es un servidor a nivel aplicación que contac-
ta al usuario cuando una solicitad de SIP es recibida y retorna una respuesta en nombre
del usuario. La respuesta a la solicitud es aceptada, rechazada o redireccionada.
UA: El agente del usuario es una aplicación que contiene al UAC y al UAS. Cuando
un usuario desea hablar con otro, ejecuta un programa que contiene un UA. El usuario
interactúa a través de la interfase. Cuando el primer usuario oprime el botón de llamar
al segundo, el UA dispara un mensaje SIP apropiado para establecer la llamada.
Todas las interacciones entre los usuarios y el protocolo SIP son mediante los UA’s.
Sin embargo algunos sistemas que utilizan SIP no están directamente conectados con
el usuario. Por ejemplo se puede redireccionar todas las llamadas recibidas a la hora
de la siesta al contestador automático. El contestador automáticamente establecerá la
sesión para grabar los mensajes.
Cuando la sesión describe una sesión de audio/video, esta no puede ser establecida
sin un UA, una herramienta de audio y una herramienta de video. Estas pueden ir o
no incluidas en una misma aplicación, así como otros tipos de herramientas de sesión,
pero la separación de estos elementos hace que SIP tenga más flexibilidad, y permita
el establecimiento de cualquier tipo de sesión.
Servidores Redireccionadores
Los servidores Redireccionadores ayudan a localizar UA’s SIP proveyendo ubicaciones
alternativas dondel usuario puede ser alcanzado.
1.4 Especificaciones H.323 y SIP 32
H.323 SIP
Arquitectura Cubre casi todos los servi- SSIP es modular porque
cios. Como ser intercam- cubre señalización básica
bio de capacidades, con- de llamadas, localización
trol de conferencia, seña- de usuarios y registración.
lización básica, QoS, re- Otras funcionalidades es-
gitración, descubrimiento tán en protocolos separa-
de servicio (service disco- dos.
very), etc.
Componentes Terminal, Gateway, Gate- UA, Servidores
keeper
Funcionalidad de control de llamada
Transferencia de lla- si si
mada
Redirección de llama- si si
da
Llamada en espera si si
Parking de llamada si si
Indicación de msg en si no
espera
Identificación de si no
nombre
Conclusión de llamda si si
para usuario ocupado
Ofrecimiento de lla- si no
mada
Intrusión de llamadas si, las separa entre H.450, no
RAS, H.245 y Q.931
Funcionalidad Avanzadas
Señalización Multi- Si, pedidos de localiza- Si, ej., a través de INVI-
cast ción(LRQ) y auto des- TES grupales
cubrimiento de gatekee-
per(GRQ)
Control de llamada Si, a través de pausa y re Si, a través de SIP co-
de terceras partes enrutamiento definido en mo se describe en diversos
H.323. Un control mas so- Drafts de Internet
fisticado está definido por
las series de estándares re-
lacionados H.450.x
continua en pagina siguiente
1.4 Especificaciones H.323 y SIP 34
Fig. 1.4: Multiplexión múltiple de datos multimedia usando un solo puerto UDP
Establecimiento de llamada
La figura siguiente ilustra el flujo de mensajes básicos usados para establecer una lla-
mada. En este ejemplo, el Anfitrión A inicia la llamada enviando un mensaje NEW al
1.5 Especificaciones de IAX 39
Finalización de llamada
La figura que sigue ilustra el flujo de mensajes para finalizar una llamada de voz. En este
ejemplo, el Anfitrión A inicia la finalización enviando un mensaje HANGUP al Anfitrión
B. Se espera que el anfitrión B devuelva inmediatamente un mensaje ACK que indica
el recibo de la solicitud de finalización y de esta forma la llamada es terminada en el
lado del Anfitrión B.
1.5 Especificaciones de IAX 40
Full Frame
Puede usarse para enviar señalización, audio o video de manera confiable. Los Full
Frames son el único tipo de mensajes que se envían de manera confiable. Esto implica
que el host de destino debe devolver algún tipo de mensaje de regreso para confirmar
la recepción.
1.6 SIP Vs. IAX 41
Hay dos tipos de información de control que se pasa usando Full Frames, Frames de
Control y Frames IAX de Control. Los Frames de Control proveen control de sesión,
i.e. se refieren al control de los dispositivos conectados al punto extremo. Los Frames
de Control IAX proveen administración específica del punto extremo, i.e. se usan para
manejar interacciones del protocolo IAX que son generalmente independientes del tipo
de punto extremo.
Mini Frame
Un Mini Frame se usa para enviar datos multimedia con un mínimo overhead. De esta
manera se optimiza el uso de ancho de banda al enviar solo la información estrictamente
necesaria.
dos puntos extremos no pueden verse el uno con el otro por ninguna razón, la llamada
siga por el servidor central.
6) IAX claramente separa el Caller ID del mecanismo de autenticación del usuario. SIP
no tiene un método claro para hacer esto a menos que sea usado el Remote-Party-ID.
7) IAX permite que un punto extremo compruebe la validez de un número de teléfono
para saber si está completo. No hay ninguna forma de proveer esto completamente en
SIP.
9) IAX siempre envía DTMF fuera de banda así nunca hay confusión sobre que método
se está usando.
10) IAX provee la transmisión de lenguaje y contexto, que son útiles en un ambiente
Asterisk.
Si se va a enviar datos a través de una red de IP, estos serán transportados usando uno
de los tres protocolos de transporte descriptos a continuación.
Protocolo de Control de Transmisión
El Protocolo de Control de Transmisión (TCP) casi nunca es usado para VoIP, ya que
mientras posee mecanismos para asegurar la entrega, no tiene intrínsecamente ninguna
prisa en lograr esto. A menos que se tenga una interconexión de sumamente baja
latencia entre los puntos extremos, TCP va a tender a causar más problemas de los que
va a solucionar.
El objetivo de TCP es garantizar la entrega de paquetes. Con el fin de hacer esto,
varios mecanismos son puestos en práctica, como la enumeración de paquetes (para
la reconstrucción de bloques de datos), reconocimiento de entrega y retransmisión de
paquetes perdidos. En el mundo de VoIP, llevar rápidamente los paquetes al punto
extremo es supremo, y 20 años de telefonía celular nos han entrenado para tolerar
algunos paquetes perdidos.
El alto procesamiento de saturación del TCP, la administración por estados y el reco-
nocimiento de llegada de los paquetes, son buenos a la hora de transmitir cantidades
1.6 SIP Vs. IAX 43
adquirieron el potencial necesario como para tener el mismo nivel de rentabilidad que
una PSTN o un equipo PBX propietario. Con la invención e implementación de Real
Time Protocol (RTP) y SIP, la VoIP tiene su base tecnológica para dejar totalmente
obsoleta la red de telefonía publica de conmutación de circuitos.
Como la PSTN, los sistemas de telefonía de empresas Enterprise telephony (ET) son de
conmutación de circuitos. Ambos utilizan un modelo de infraestructura común. Todos
los protocolos de control y características son combinadas en un simple modelo. Siste-
mas ET usualmente no pueden manejar el mismo volumen de tráfico que la conmutación
PSTN. Los sistemas ET usualmente usan protocolos propietarios.
comparten el interés por éste fenómeno. Mientras que tradicionalmente estos profesio-
nales se han mantenido reacios unos con otros, en la comunidad de Asterisk todos se
enriquecen a partir de los conocimientos de sus colegas. Siendo así, el significado de
esta cooperación no puede ser subestimado.
http://www.voip-info.org.
Otro lugar para encontrar información es el sitio del proyecto Asterisk Documentation
Project,
http://www.asteriskdocs.org
preparado para crecer con las necesidades: un pequeño sistema que es usado para poder
manejar todos los procesamientos de llamadas y tareas periféricas puede ser distribuido
entre varios servidores cuando el incremento en la demanda excede sus habilidades.
Flexibilidad es la razón principal por la que Asterisk es extremadamente efectivo en
relación a los costos, frente a negocios que crecen rápidamente. Si bien es posible algún
tipo de escalabilidad en la mayoría de los sistemas telefónicos, todavía no se conoce
alguno que pueda crecer sin generar grandes costos. Habiendo dicho esto, vale aclarar
que sistemas distribuidos con Asterisk no son simples de diseñar, por lo que no sería
una tarea para alguien nuevo en la utilización de este producto.
Lógica de escritura del dial plan: Cada vez que Asterisk tiene que pasar el control
de las llamadas a un programa externo, existe una penalidad en la performance.
La mayor lógica posible debe ser construida en el dial plan. Si scripts externos son
utilizados, éstos deben ser diseñados teniendo a la performance y eficiencia como
metas importantes.
Si bien estos factores deben tenerse en consideración, el impacto en la performance de los
mismos todavía no es conocido con exactitud. Los efectos de cada uno son conocidos en
términos generales, pero no se ha definido un método de calcular la performance preciso.
Esto es en parte debido a que los efectos de cada componente del sistema dependen de
numerosas variables, como el poder de procesamiento del CPU, la calidad de la placa
madre y el chipset en general, la carga total de tráfico sobre el sistema, la optimización
del kernel de Linux, el tráfico de red, el número y tipo de interfaces PSTN, y el tráfico
PSTN (sin mencionar cualquier servicio no perteneciente a Asterisk que el sistema esté
ejecutando simultáneamente).
Veamos los efectos de varios factores claves:
COder/DECoder (CODEC) y transcodificación: Puesto de una manera simple, un
CODEC (apócope de codificador/decodificador o compresión/descompresión) es
un conjunto de reglas matemáticas que definen cómo una forma de onda analógica
será digitalizada. La diferencia entre los distintos codecs es debido en gran parte
a los niveles de compresión y calidad que ofrecen. Mientras más compresión es
requerida, más será el trabajo del DSP para codificar o decodificar la señal. Codecs
no compresores, por consiguiente, originan mucho menos carga sobre el CPU (pero
requiere mayor ancho de banda en la red). La selección del codec debe realizarse
por lo tanto, estableciendo un equilibrio entre ancho de banda y carga sobre el
procesador.
Unidad de Procesamiento Central (y Unidad de Punto Flotante): el CPU está
compuesto de varios componentes, uno de los cuales es la Float Point Unit (FPU).
La velocidad del CPU, complementada con la eficiencia de su FPU, jugará un rol
significativo en el número de usuarios que el sistema puede atender efectivamente.
Otros procesos corriendo simultáneamente en el sistema: al ser un sistema Unix,
Linux está diseñado para soportar la ejecución de varios procesos diferentes, en
lo que se denomina un sistema multitarea. El problema arriba cuando uno de
estos procesos (como Asterisk) demanda un alto nivel de interés por parte del
sistema. Por defecto, Linux distribuirá equilibradamente los recursos entre todas
las aplicaciones que los requieran. Si se instala un sistema con muchas aplicaciones
de servicios diferentes, esas aplicaciones tendrán permitido un acceso igualitario
al CPU. Como Asterisk requiere frecuentemente acceso de alta prioridad al CPU,
no se lleva bien con otras aplicaciones, y si Asterisk debe coexistir con ellas, el
sistema necesitará optimización especial. Esto en principio incluye la asignación
de prioridades a varias aplicaciones en el sistema, y, durante la instalación, una
cuidadadosa atención sobre qué aplicaciones están instaladas como servicios.
Optimizaciones del Kernel: un kernel optimizado para la performance de una apli-
cación específica es algo que muy pocas distribuciones de Linux ofrecen por de-
fecto, y esto es algo que debe tenerse en cuenta. Por lo tanto, al principio de
la instalación, se deberá actualizar el kernel a través de parches que permitan el
mejoramiento de la performance.
2.8 Preparando un sistema para Asterisk 52
Sistemas Pequeños
Si se está construyendo un sistema pequeño con componentes viejos, hay que estar
avisados de que el sistema resultante no trabajará al mismo nivel que una máquina
más poderosa, y tendrá una degradación en la performance bajo la menor carga.
En la preparación de un sistema Asterisk con el propósito de aprender o utilizarlo
como hobbie, se podrá construir una plataforma con todas las características usando
una CPU con relativa baja potencia. Se han corrido varios sistemas Asterisk de prueba
con procesadores Celeron de 433 Mhz hasta 700 Mhz; la carga de trabajo en estos
sistemas es típicamente mínima.
Sistemas Medianos
Sistemas Grandes
Los sistemas grandes (más de 50 usuarios) pueden ser distribuidos a través de múltiples
servidores, y así las preocupaciones de performance pueden ser manejadas mediante la
simple adición de máquinas. Los sistemas Asterisk muy grandes - de 500 a más de 1,000
usuarios - han sido creados de este modo.
Construir un sistema grande requiere un nivel avanzado de conocimiento en muchas
disciplinas diferentes. Los problemas que se encontrarán en esta arquitectura serán
similares a aquellos encontrados durante cualquier despliegue de múltiples servidores
que manejan una sola tarea, distribuida.
placas Digium Zaptel generarán 1,000 peticiones de interrupción por segundo. Tener
dispositivos sobre el bus que interfieran con este proceso causará la degradación de la
calidad de llamada. Chipsets de Intel (para CPU de Intel) y nVidia nForce (para CPU
AMD) parecen anotar las mejores marcas en esta área.
- Si se está utilizando una placa Zaptel en el sistema, se deberá asegurar que el (BIOS)
permita el máximo control sobre la asignación de IRQ. Por lo general, las placas ma-
dre de alta calidad ofrecerán mucha mayor flexibilidad en lo que concierne al control
mediante el BIOS; placas más económicas ofrecerán muy poco control.
- Las placas madre para servidores generalmente ponen en práctica un estándar (PCI)
diferente que las placas para terminales de trabajo. Mientras hay muchas diferencias, la
más obvia y conocida es que las dos versiones tienen voltajes diferentes. Dependiendo
de que placa se compre, se deberá conocer si se requiere 3.3V o 5V. La mayor parte
de placas madre para servidores tendrán ambos tipos, pero los terminales de trabajo
típicamente tendrán sólo la versión de 5V.
- Usar múltiples procesadores proporcionará una mejora del sistema en lo referido a su
capacidad de manejar múltiples tareas. Para Asterisk, esto será de especial beneficio
en el área de operaciones de punto flotante.
- Hay que evitar las placas madre que incluyen componentes empotrados de audio y
vídeo. Si se quiere una tarjeta de sonido, se instala una. Para el caso de una tarjeta de
vídeo, no se necesitará en absoluto ya que Asterisk no requiere una.
- Si es posible, se deberá instalar un módem externo. Si se debe tener un módem
interno, deberá asegurarse que no sea un Win-modem. El modem debe ser una unidad
completamente autosuficiente.
- Al trabajar con elementos de networking empotrados, si se tiene una falla sobre
un componente de red, la placa madre entera tendrá que ser substituida. Por otra
parte, si se instala una interfaz de red periférica, puede haber una posibilidad mayor de
fracaso debido a la conexión mecánica complicada que se deberá realizar. Algo podrá
amortizarse si se trabaja con placas primarias como de reserva instaladas en el sistema.
- La estabilidad y la calidad del sistema Asterisk serán dependiente de los componentes
que se seleccionen para la arquitectura. El alto costo no siempre es sinónimo de calidad,
pero se deberán conocer los distintos tipos de componentes para PC.
Habiendo dicho todo esto, debemos volver al punto original: Asterisk puede y felizmente
se instalará sobre casi cualquier plataforma PC.
2.8.6. Ambiente
El ambiente del sistema consiste en todos aquellos factores que no son parte del servidor
en sí mismo, pero sin embargo desempeñan un papel crucial en la fiabilidad y calidad que
se espera del sistema. Provisiones eléctricas, temperatura de cuarto y humedad, fuentes
de interferencia y seguridad son todos los factores que deberían ser contemplados.
Puesta a Tierra
El voltaje es definido como la diferencia de potencial eléctrico entre dos puntos. Cuando
se considera una "tierra"(que no es nada más que un camino eléctrico a tierra), la
asunción común es que ésta representa 0 voltios. Pero si no se definen estos 0V en
relación con algo, se está en peligro de asumir cosas que pueden no ser así. Si se mide
el voltaje entre dos referencias a tierra, a menudo se encuentra un potencial de voltaje
entre ellas. Este potencial de voltaje puede ser lo bastante significativo como para
causar errores lógicos o hasta dañar un sistema donde más de un camino a tierra está
presente.
Considerando regulaciones eléctricas, el objetivo de una referencia a tierra es prin-
cipalmente la seguridad humana. En una computadora, la tierra es usada como una
referencia lógica de 0V. Un sistema eléctrico que proporcione la seguridad apropiada
no siempre proporcionará una referencia lógica apropiada, de hecho, los objetivos de
seguridad y calidad de energía están a veces en desacuerdo. Naturalmente, cuando hay
una opción que tomar, la seguridad tiene que ser una prioridad.
Los suministros de energía para los conmutadores modernos están algo aislados de
cuestiones de calidad de energía, pero cualquier sistema de alto rendimiento siempre se
beneficiará de un ambiente bien diseñado. En ordenadores centrales, PBXs propietarios
y otras plataformas informáticas costosas, la tierra del sistema nunca es referenciada a
la suerte. La electrónica y las consolas de estos sistemas siempre están proveídas de una
tierra dedicada que no depende de las referencias a tierra de seguridad suministradas
por el alimentador eléctrico.
Independientemente de cuanto se quiera invertir en la puesta a tierra, cuando se espe-
cifica el suministro eléctrico para cualquier PBX, hay que asegurarse que el recorrido
eléctrico es completamente dedicado hacia el sistema y que se dispone de conductor de
referencia a tierra aislado. Esto puede ser costoso, pero contribuirá enormemente a un
ambiente de energía de calidad para su sistema.
Es también vital que todos y cada uno de los periféricos que se adicionen al sistema se
conecten al mismo receptáculo eléctrico (o, más expresamente, a la misma referencia
de tierra). Esto reducirá la probabilidad de lazos de tierra, que pueden causar ruidos
que dañen o destruyan el equipo.
2.8 Preparando un sistema para Asterisk 57
Circuitos Eléctricos
Si alguien alguna vez ha visto como las luces se atenúan cuando un aparato eléctrico da
"patadas", entonces ha visto el efecto que un dispositivo de gran energía puede tener
en un circuito eléctrico. Si se vieran los efectos de múltiples dispositivos como aquel
a través de un graficador de señal, se vería perfectamente la armónica de 50 Hz o 60
Hz. El ruido armónico es sumamente común en los circuitos eléctricos y puede causar
estragos en equipamiento electrónico sensible. En una PBX, estos problemas pueden
manifestarse como inconvenientes de audio, errores lógicos e inestabilidad de sistema.
Nunca se deberá instalar un servidor en un circuito eléctrico que es compartido con
cualquier otro dispositivo. Debería haber sólo una salida en el circuito, y se debería
conectar sólo el sistema telefónico (y los periféricos asociados) al mismo. El alambre
(incluso la referencia a tierra) debería estar dirigido directamente al panel eléctrico.
El Cuarto de Equipos
A menos que se necesiten muchos canales (o se tenga dinero para gastar en instalaciones
de telecomunicaciones mensualmente), las posibilidades son que la interfaz con la PSTN
consista en uno o varios circuitos análogos, donde cada uno requerirá un puerto Foreign
eXchange Office (FXO).
Digium, la compañía que patrocinó el desarrollo de Asterisk, produce la tarjeta de
interfaz analógica más popular para Asterisk, conocida como TDM400P. La TDM400P
es una placa de cuatro puertos que permite la conexión de hasta cuatro placas hijas
que entregan puertos FXO o Foreign eXchange Station (FXS). El TDM400P puede ser
comprado con estas placas preinstaladas y Digium ha designado números de parte para
describir estas configuraciones. La convención de nombramiento es TDM x y, donde x
e y son números que representan la cantidad de placas FXS y FXO, respectivamente.
Se puede ingresar a http://www.digium.com para más información sobre estas placas.
Una tarjeta más vieja producida por Digium era conocida como X100P. Ya no está
disponible desde Digium, pero se puede encontrar un clon de esta placa en el mercado.
Otra compañía que produce placas analógicas compatibles con Asterisk es Voicetronix.
Ellos tienen tres placas Asterisk: OpenLine4, OpenSwitch6, y OpenSwitch12.
Tarjeta Wildcard TDM400P
La placa Wildcard TDM400P es una tarjeta PCI de media longitud que soporta de una
a 4 interfaces telefónicas para conectar teléfonos o líneas analógicas a la PC. Soporta
teléfonos analógicos estándar y Analog Display Services Interface (ADSI) para aplica-
ciones Small Office Home Office (SOHO). Soporta combinaciones de hasta 4 módulos
FXO/FXS.
2.9 Hardware de Telefonía 59
Si se requiere más de 10 circuitos o conectividad digital, las posibilidades son placas para
tramas T1 o E1. Hay que tener en cuenta, sin embargo, que mensualmente los gastos
para un circuito PSTN digital varían extensamente. En algunos sitios, solamente cinco
circuitos pueden justificar una trama digital; en otros, la tecnología nunca justificará
los costos.
El Proyecto de Telefonía Zapata al principio produjo una tarjeta T1, la Tormenta, que
es la antepasada de las placas T1 más compatibles con Asterisk. Las placas Tormen-
ta originales son ahora consideradas obsoletas, pero todavía funcionan con Asterisk.
Actualmente, la única compañía conocida que produce estas placas es Varion.
Digium fabrica varias tarjetas de interfaz para circuitos digitales diferentes. Los rasgos
en las placas son los mismos; las diferencias primarias son si ellas proporcionan interfaces
T1 o E1 y cuantas interfaces provee cada tarjeta. Aunque es técnicamente posible, el
consenso general en la comunidad Asterisk es que no más de una placa debería ser
desplegada en un sistema.
2.9 Hardware de Telefonía 60
Sangoma, quiénes han estado produciendo placas libres durante muchos años, han aña-
dido recientemente soporte para placas T1/E1 de Asterisk. Las placas Sangoma con-
tienen Field-Programmable Gate Arrays (FPGA), que las hacen sumamente flexibles.
En un ambiente Asterisk, por ejemplo, han sido programadas para ser interfaz con el
controlador del canal Zapata.
Tarjeta Wildcard T100P
La placa T100P es una interfaz compacte y poderosa que soporta transmisión de voz y
datos sobre conexiones T1 y PRI. Posibilita la interconexión de teléfonos tradicionales
con las tecnologías de VoIP a través de Asterisk.
Esta placa puede ser usada para una amplia gama de servicios de PBX avanzadas y
funciones de IVR incluyendo voicemail, conferencias, llamada de tres vías y Gateways
VoIP. El equivalente europeo de esta placa es la E100P (provee 30 canales, i.e. una E1).
Soporta los modos de voz y datos simultáneamente. Por ejemplo puede usarse 12 canales
para datos y 12 para voz, dejando a asterisk direccional los canales a sus destinos.
Soporta los protocolos estándares de telefonía y datos incluyendo los protocolos de
señalización Robbed Bit Siggnalling (RBS) y PRI para voz, Cisco HDLS, Point to
Point Protocol (PPP) y Frame Relay para transmisión de datos.
Tarjeta Wildcard E100P
Posee las mismas características que la placa anterior pero para una E1 (32 canales).
Tarjeta Wildcard TE410P/TE405P
La placa TE410P es una placa PCI de 3.3V mientras que la TE405P es de 5V. Posee
4 conexiones separadas. Cada uno puede proveer señalización T1 o E1.
Bancos de canales
La figura 2.3 muestra como un banco de canales cabe en un sistema telefónico de oficina
típico.
Aunque ellos puedan ser caros de comprar, muchas personas creen que el único modo
apropiado de integrar circuitos y dispositivos análogos en Asterisk es a través de un
banco de canales.
Algunos fabricantes son Adit, Rhino y Adtran. Las características que se buscan en un
banco de canales incluyen soporte para 2 cables, supervisión de desconexión y soporte
para líneas FX. Debe ser capaz, además, de funcionar como un generador de repique,
o sea, debe ser capaz de proveer la tensión para el repique de llamada.
Los equipos modernos pueden transcodificar la señalización de las líneas analógicas al
formato T1. Algunos proveen además impedancia dinámica lo que puede ser muy útil
para ayudar a eliminar el eco.
En asterisk se coloca una conexión T1 entre el banco de canales y el servidor. O sea,
se coloca una placa T1 en Asterisk y se la conecta al banco de canales a través de un
cable T1 usualmente. El banco de canales separará los canales individuales de la T1 en
puertos separados para su conexión.
Existen muchos gateways VoIP que pueden ser configurados para proporcionar acceso
a la PSTN. En general, éstos serán los más usados en sistemas pequeños (una o dos
líneas). También pueden ser muy complicados para configurar, ya que la interacción
entre varias redes y dispositivos requiere un entendimiento sólido tanto de la telefonía
como de los fundamentos de VoIP.
Otro modo de conectarse a la PSTN es mediante el uso del circuito Integrated Services
Digital Network (ISDN) Basic Rate Interfase (BRI). BRI es un estándar de telecomu-
nicaciones digital que especifica un circuito de dos canales que puede llevar hasta 144
kbps de tráfico. Es muy raramente usado en Norteamérica y la mayor parte del mundo,
pero muy popular en Europa y Latinoamérica.
2.10 Tipos de Teléfono 62
Teléfonos análogos
Los teléfonos análogos han estado en uso desde la invención del teléfono. Hasta hace
aproximadamente 20 años, todos los teléfonos eran analógicos. Aunque los teléfonos
análogos tengan algunas diferencias técnicas en países diferentes, todos ellos funcionan
con principios similares.
Cuando un ser humano habla, las cuerdas vocales, lengua, dientes y los labios crean
una compleja variedad de sonidos. El objetivo del teléfono es capturar estos sonidos y
convertirlos en un formato conveniente para la transmisión por el cable telefónico. En
un teléfono analógico, la señal transmitida es análoga a las ondas sonoras producidas
por la persona que habla. Si se pudiera ver pasar las ondas sonoras de la boca hacia
el micrófono, ellas serían proporcionales a la señal eléctrica que se podría medir en el
alambre.
2.10 Tipos de Teléfono 63
Los teléfonos análogos son la única clase de teléfonos que están comúnmente disponibles
en cualquier tienda de electrónica de venta al público. En los próximos pocos años,
pueden esperarse cambios dramáticos.
A medida que los sistemas de conmutación digitales se desarrollaban en los años 1980
y 1990, las compañías de telecomunicaciones desarrollaban PBX digitales y Key Te-
lephone Systems (KTS). Los teléfonos propietarios desarrollados para estos sistemas
eran completamente dependientes de los sistemas a los cuales estuvieran conectados y
no podían ser usados en cualquier otro sistema. Incluso los teléfonos producidos por el
mismo fabricante eran no compatibles (por ejemplo, un set Nortel Norstar no funciona
con una PBX Nortel Meridian 1). La naturaleza propietaria de los teléfonos digitales
limita su futuro. En esta era emergente de comunicaciones a base de estándares, ellos
serán rápidamente relegados al basurero de la historia.
El handset en un teléfono digital es generalmente idéntico en cuanto al funcionamiento
del handset en un teléfono análogo, y ellos son a menudo compatibles el uno con el otro.
Donde el teléfono digital es diferente es por dentro: la señal análoga es muestreada y
convertida en una señal digital, es decir una representación numérica de la forma de
onda análoga. Por ahora, sólo diremos que la ventaja primaria de una señal digital
consiste en que puede ser transmitida a distancias ilimitadas sin pérdida de calidad de
señal.
Las posibilidades de que alguien alguna vez haya fabricado un teléfono digital pro-
pietario directamente compatible con Asterisk son bastante pequeñas, pero compañías
como Citel (http://www.citel.com) han creado gateways que convierten las señales
propietarias a SIP.
Teléfonos de ISDN
Antes de VoIP, la cosa más cercana a un teléfono digital a base de estándares era un
terminal ISDN BRI.
Desarrollado a principios de los años 1980, se esperó que ISDN revolucionara la industria
de telecomunicaciones exactamente del mismo modo en que VoIP promete finalmente
conseguirlo en la actualidad.
Mientras ISDN fue extensamente desplegado por las compañías telefónicas, muchos
consideran que el estándar ha sido un fracaso. El alto gasto de implementación, costos
recurrentes y la poca cooperación entre los principales prestadores contribuyeron a un
ambiente que causó más problemas que soluciones.
El acceso BRI fue pensado para atender a dispositivos terminales y sitios pequeños
(un lazo de BRI provee dos circuitos digitales). Mientras una riqueza de dispositivos
BRI han sido desarrollados, este acceso ha sido desaprobado a favor de tecnologías más
baratas y rápidas, como Asincronic Digital (ADSL), módems de cable y VoIP.
BRI es todavía muy popular para comunicación de vídeo, mientras se proporcione una
conexión de ancho de banda fijo. Sin embargo, BRI no tiene el tipo de calidad en
cuanto a cuestiones de servicio que una conexión de VoIP tendría, ya que es tecnología
de conmutación de circuitos.
2.10 Tipos de Teléfono 64
El acceso BRI todavía es a veces usado en lugar de circuitos análogos para proporcionar
trunking. Esta es una buena idea dependiendo sobre todo de cuales son los precios de
la compañía local de teléfono y que servicios provee.
Teléfonos IP
Los teléfonos IP son los heraldos del cambio más emocionante de la industria de te-
lecomunicaciones. En el futuro próximo, los teléfonos IP a base de estándares estarán
disponibles en negocios minoristas. La riqueza de posibilidades inherentes en estos dis-
positivos causará una explosión de aplicaciones interesantes, desde video teléfonos, a
dispositivos con emisión de alta fidelidad, soluciones de movilidad inalámbricas, sets
construidos a pedido de las industrias particulares y sistemas multimedia flexibles, en-
tre otras.
La revolución que los teléfonos IP engendrarán no tiene nada que ver con los nuevos
tipos de alambre para unir los teléfonos y todo que ver con dar el poder de comunicarse
de la forma que uno quiera.
Los tempranos modelos de teléfonos IP que han estado disponibles durante varios años
no son representantes del futuro de estas aplicaciones emocionantes. Ellos son sim-
plemente un escalón; un paquete familiar para abrigar un nuevo modo fantástico de
pensar.
El futuro es mucho más prometedor.
Zaptel requiere libnewt y sus paquetes de desarrollo para el programa zttool (ver
Usando ztcfg y zttool más abajo) y el módulo usb-uhci para ztdummy. Si se utilizan
interfaces PRI, Zaptel también requiere el paquete libpri.
# cd /usr/src/
# wget -passive-ftp ftp.digium.com/pub/asterisk/asterisk-1.*.tar.gz
# wget -passive-ftp ftp.digium.com/pub/asterisk/asterisk-sounds-*.tar.gz
# wget -passive-ftp ftp.digium.com/pub/zaptel/zaptel-*.tar.gz
# wget -passive-ftp ftp.digium.com/pub/libpri/libpri-*.tar.gz
Mientras Digium no cambie la manera de poner cosas en el sitio FTP, el comando wget
automáticamente obtiene la ultima versión. Reemplazar el * por la versión de software
disponible.
# cd /usr/src/
# tar -zxvf zaptel-*.tar.gz
# tar -zxvf libpri-*.tar.gz
# tar -zxvf asterisk-*.tar.gz
# tar -zxvf asterisk-sounds*.tar.gz
Estos comandos extraerán los paquetes y códigos fuentes a sus respectivos directorios.
de un archivo en particular puede ser desinstalado si algo llega a funcionar mal, o sea si
algo está funcionando bien hasta cierto punto y luego de realizar un cambio comienza
a fallar, se puede volver a la versión que funcionaba, de una manera muy fácil.
Un desarrollador buscando de obtener las últimas actualizaciones del código fuente,
necesitará bajarlas de los servidores CVS:
1 Exportar el path CVSROOT:
# cd /usr/src/
# export CVSROOT=:pserver:anoncvs:[email protected]:/usr/cvsroot
2 Bajar el HEAD del CVS
# cvs checkout zaptel libpri asterisk
3 Bajar STABLE 1.0 del CVS
# cvs checkout -r v1-0 zaptel libpri asterisk
4 Bajar STABLE 1.2 del CVS
# cvs checkout -r v1-2 zaptel libpri asterisk
5 Bajar módulos opcionales del CVS
# cvs checkout asterisk-sounds asterisk-addons
el que permite a los drivers de los dispositivos ser modificados sin ningún cambio en la
fuente de Asterisk.
Los drivers de los dispositivos se utilizan para comunicarse directamente con el hardware
y pasar información entre éste y el Zaptel.
Nota: Antes de compilar los drivers Zaptel en un sistema que corre un kernel de Li-
nux 2.4, se debe verificar que /usr/src/ contiene un link simbólico llamado Linux-2.4
apuntando al fuente del kernel. Si no existe, debe crearlo con el siguiente comando:
# ln -s /usr/src/‘uname -r‘ /usr/src/Linux-2.4
Computadoras corriendo distribuciones de Linux con kernel 2.6 usualmente no requie-
ren este link simbólico.
Quitar el símbolo cardinal (#) que está delante de ztdummy guardar el archivo, y
compilar Zaptel como se realiza usualmente.
# cd /usr/src/zaptel-version
# make clean
# make
# make install
Corroborar que estén instalados los encabezados del kernel (kernel-headers) que
coincidan exactamente con el kernel que se tiene instalado. Se puede comprobar la
version del kernel ejecutando el comando uname -r lo que dará como salida por ejem-
plo 2.6.8-2-386. Luego utilizando la aplicación APT descargar las fuentes de zaptel
(ej. apt-get install zaptel-source). Puede que necesite tener instalada la aplica-
ción dpatch.
Hecho esto, ejecutar los siguientes comandos:
# cd /usr/src
# m-a build zaptel
# m-a a-i zaptel
# modprobe zaptel
Boost ringer
sea necesario en teléfonos conectados a una gran distancia. Básicamente, dejar esta
opción a menos que el extremo lejano no detecte que el teléfono suena correctamente.
Para habilitar ésta opción, descomente la siguiente línea:
/* #define BOOST_RINGER */
La opción BOOST_RINGER puede ser declarada cuando se carga el driver por medio de
modprobe, así que no va a ser necesario compilarlo dentro del driver (recomendado).
Todos los canceladores de eco en Asterisk usan el algoritmo de respuesta al impulso in-
finito Finit Impulse Response (FIR). Las diferencias entre ellos es mínima. Por defecto,
se usa el cancelador de eco MARK2, éste es considerado el más robusto de todos.
Para cambiar la configuración por defecto, hay que agregar etiquetas de comentario en
la línea #define ECHO_CAN_MARK2 y sacar los comentarios de otras:
/* #define ECHO_CAN_STEVE */
/* #define ECHO_CAN_STEVE2 */
/* #define ECHO_CAN_MARK */
#define ECHO_CAN_MARK2
/* #define ECHO_CAN_MARK3 */
/* #define NO_ECHOCAN_DISABLE */
Maquinas de FAX y módems usan el tono de 2100-Hz durante la negociación, y Asterisk
monitorea por este tono durante el establecimiento de la llamada.
Habilitar HDLC
Cuando se utiliza el driver Zaptel con un hardware T1 o E1, se puede configurar Zaptel
para usar canales TDM para datos en lugar de la voz. Para activar la funcionalidad
HDLC en los drivers, descomentar la siguiente línea:
/* #define CONFIG_ZAPATA_NET */
Para que este cambio tenga sentido, se debe usar la utilidad sethdlc y realizar algunas
configuraciones en zapata.conf.
Habilitar ZapRAS
Se puede usar el programa ZapRAS para transformar Asterisk en una Remote Ac-
cess Server (RAS) para usar con las conexiones ISDN. Activar esto descomentando
en zconfig.h la siguiente línea:
/* #define CONFIG_ZAPATA_PPP */
Se tiene que configurar el demonio PPP: no es tan trivial esta configuración.
Se le puede decir a Zaptel que monitoree el estado de las interfaces por medio de
los propios watchdog. Se verificará si las interfaces cesan de tomar interrupciones o
cualquier otra falla. Si esto llegase a pasar, el hardware automáticamente se reiniciará.
Descomentar la siguiente línea para activar el watchdog:
/* #define CONFIG_ZAPTEL_WATCHDOG */
La opción de información de zona de tono se utiliza para seleccionar cual tipo de tonos
(Ej., tono de discado, indicador de ocupado, tono de ring, etc.), es definido en el archivo
zonedata.c, y debe ser usado como por defecto.
El archivo zonedata.c contiene las frecuencias y patrones que Asterisk usa para comu-
nicarse con la red PSTN en varios países y para señalizar teléfonos conectados. La zona
de tono por defecto (0) se utiliza para indicar frecuencias de señalización en Norte Amé-
rica. Otras zonas de tono incluidas son Australia (1), Francia (2), Japón (7), Taiwán
(14), y muchas otras. Se puede cambiar la zona por defecto en la siguiente línea:
#define DEFAULT_TONE_ZONE 0
2.12 Instalando Asterisk 73
Algunos dispositivos, como los puertos FXO en un banco del canal en un Carrier Access
Corporation (CAC), tiene estados de comienzo de señalización de tierra no estándar
(A=bajo, B=bajo). Puede configurar los drivers para usar este estado removiendo la
etiqueta de la siguiente línea:
/* #define CONFIG_CAC_GROUNDSTART */
Algunas de las opciones Zaptel pueden ser habilitadas cuando el módulo se carga,
pasando parámetros de módulo al driver wctdm. Se puede listar todos estos parámetros
al tiempo de cargar el módulo (de forma opuesta que lo realizado cambiando éstos en
el archivo zconfig.h) con el comando modinfo:
#modinfo -p wctdm
debug int
loopcurrent int
robust int
_opermode int
opermode string
timingonly int
lowpower int
boostringer int
fxshonormode int
Luego pasar los parámetros de módulo al comando modprobe. Por ejemplo, se puede
utilizar lo siguiente para activar el parámetro boostringer cuando el módulo se carga,
a pesar de la definición estática usada en el archivo zconfig.h:
#modprobe wctdm boostringer=1
Otro parámetro común para pasar a un módulo es opermode. Pasando éste al driver
wctdm, se puede configurar la TDM400P para un mejor rendimiento en la impedancia
de las líneas de un país.
# cd /usr/src/libpri-version
# make clean
# make
# make install
2.12 Instalando Asterisk 74
Instalación estándar
Asterisk esta compilado con gz a través del programa make. Para comenzar a compilar
Asterisk, hay que ejecutar las siguientes líneas de código:
# cd /usr/src/asterisk-version
# make clean
# make
# make install
# make simples
Se realiza el comando make samples para instalar los archivos de configuración por de-
fecto. Una vez más, si se utiliza un sistema que hace uso de los directorios /etc./rc.d/init.d
o /etc./init.d, deberá correr también el comando make config. Esto instala los
scripts de arranque y configura el sistema para ejecutar Asterisk automáticamente al
iniciar.
Hay muchos otros argumentos de make que se pueden pasar para compilar. Mientras
algunos los veremos a continuación, el resto se utilizan internamente en el archivo y
realmente no tienen utilidad para el usuario final.
Veamos algunos argumentos útiles de make.
Make clean
Se utiliza para borrar los binarios compilados del directorio fuente. Debe correrse este
comando antes de que se recompile o, si no hay espacio.
Make update
Se utiliza para actualizar el código existente del servidor CVS de Digium. Si se bajó el
código fuente de un servidor FTP se recibirá un mensaje de error.
Make upgrade
Si corre el comando make install para instalar Asterisk después de usar make update
para actualizar desde el CVS, el archivo .version no será actualizado. Si no quiere
borrar manualmente el archivo .version antes de correr make y make install, puede
usar el comando make upgrade en su lugar.
Make webvmail
El script de Asterisk WEB Voicemail se utiliza para darle una interfaz gráfica a la cuenta
de correo de voz, permitiéndole administrar y manejar, interactuando remotamente a
través de un navegador WEB, su correo de voz.
2.12 Instalando Asterisk 75
Cuando se corre el comando make webvmail, el script de Asterisk WEB Voicemail será
establecido dentro del directorio cgi-bin/ del demonio HiperText T Protocol (HTTP).
Si tiene políticas de seguridad especificas, tenga cuidado que esto utiliza un script
setuid root en Perl. Este comando instalará solo en distribuciones Red Hat y Fedora,
dado que otras distribuciones tienen diferentes caminos al directorio cgi-bin/. (Esto
por supuesto puede ser cambiado editando el Makefile.)
Make progdocs
Este comando crea documentación utilizando el software doxygen de comentarios pues-
tos junto con el código fuente por los desarrolladores. Debe tener correctamente insta-
lado el software doxygen en su sistema para que esto funcione.
Make mpg123
Asterisk utiliza el programa mpg123 para el stream Moving Picture Experts Group
Audio Layer 3 Encoding Standard (MP3) durante el uso de Music On Hold (MOH).
Debido a que Asterisk solo funciona con mpg123 v0.59r, este comando determina si
hay instalada una correcta versión del mpg123 en el sistema, y si no, intentará bajarla,
extraerla, y compilarla de forma automática. Tener cuidado que nuevas versiones no
funcionan, y muchas distribuciones tienen links simbólicos a mpg321 y mpg123 que
son diferentes programas. Si se ejecuta make install después de correr éste comando,
Asterisk detectará el directorio y lo instalará.
Make config
El comando make config instalará un script de inicialización Red Hat, si los directorios
/etc./rc.d/init.d o /etc./init.d existen. Si no existen, los scripts son instalados
con el permiso igual a 755. Si el script detecta que existe /etc./rc.d/init.d/, el
comando chkconfig -add asterisk debe correrse para que Asterisk se inicie automá-
ticamente cuando se reinicia el sistema.
Este script es realmente útil en sistemas basados en distribuciones Red Hat, aunque
los script de inicialización están disponibles en otras distribuciones en el directorio
./contrib./init.d/ del directorio fuente de Asterisk.
Editando el Makefile
Al principio del Makefile que viene en el directorio fuente de Asterisk hay varias op-
ciones para optimizar la forma de compilar Asterisk. Puede activar la optimización
de codec (GSM) (con el uso de instrucciones MMX), desactivar reescribir archivos
de configuración, agregar información de depuración extra, cambiar los directorios de
instalación y montaje de Asterisk, y modificar el tipo de procesador en donde se com-
pilara Asterisk. A pesar que nunca editará o cambiará cualquiera de estas opciones, se
mencionan para completar la configuración.
Activar optimizaciones GSM
Para activar la optimización GSM, descomentar la siguiente línea en el archivo Makefile
de su Asterisk en una arquitectura x86 CPU que soporte instrucciones MMX:
#K6OPT = -DK6OPT
Esto incluye los nuevos procesadores Pentium, Pentium Pro, y los AMD K6 y K7, sin
embargo, no debe activar el soporte MMX a menos que tenga un procesador INTEL
original, muchos problemas han sido reportados en procesadores no INTEL que utilizan
las instrucciones MMX.
2.12 Instalando Asterisk 76
# cd /usr/src/asterisk-sounds
# make install
2.12 Instalando Asterisk 77
# cd /usr/src/asterisk
# make update
# make clean
# make upgrade
Asterisk
Para instalar en orden Asterisk se requieren los siguientes archivos; se pueden instalar
con el comando yum install bison:
bison
M4
/usr/bin/ld: cannot find -lssl
El paquete de desarrollo OpenSSL se requiere para Asterisk con el módulo res_crypto.so
para el chequeo de las llaves Rivest, Shamir, Adleman Algorithm (RSA) realizado por
el protocolo Inter-Asterisk eXchange Version 2 (IAX2). Si el paquete de desarrollo
OpenSSL no está instalado, aparece el siguiente error:
Openssl_devel
E2fsprogs-devel
Zlib-devel
Krb5-devel
Krb5-libs
Puede utilizar el comando yum install openssl-devel para instalar estos archivos.
Zaptel
1) Cuando intente cargar el driver wctdm, se verá con un error como el siguiente:
Fatal: Module wctdm not found
2) Cuando intente cargar el driver wctdm o wcfxo, se verá un error como el siguiente:
ZT_CHANCONFIG failed on channel 1: No Such device or ardes (6)
FATAL: Module wctdm not found
La única forma de resolver este problema es utilizando nuevos motherboards que so-
porten PCI Versión 2.2.
Guardar el archivo y reiniciar el sistema para que los cambios tengan efecto.
agi-bin/ : contiene sus scripts customizados, que pueden interactuar con Asterisk a
través de las muchas aplicaciones (AGI).
firmware/ : contiene el firmware de varios dispositivos compatibles con Asterisk.
images/ : las aplicaciones que se comunican con canales que soportan imágenes graficas
buscan en el directorio /images. Muchos de los canales no soportan la transmisión de
imágenes, por lo que raramente se utiliza este directorio. Sin embargo, si se agregan
otros dispositivos que soportan y hacen uso de imágenes graficas, este directorio será
más relevante.
keys/ : asterisk puede utilizar llaves publicas/privadas para autenticar conexiones hacia
adentro por medio de la firma digital RSA. Si se establece una llave pública para una
conexión en el directorio /keys, esa conexión será autenticada por canales que sopor-
ten este método (como los canales IAX2). Las llaves privadas nunca se distribuyen al
público. Lo contrario es verdadero: se puede distribuir su llave pública a sus conexiones
permitiéndole ser autenticado con el uso de su llave privada. Ambas llaves (terminan
con extensiones de archivo .pub y .key para la llave publica y privada respectivamente)
están en el directorio /keys.
mohmp3/ : cuando configura Asterisk para MOH, las aplicaciones utilizan este directorio
para buscar por sus archivos MP3. Asterisk es un poco exigente en cuanto a como están
formateados los archivos MP3, se debe usar una Constant Bit Rate (CBR) codificando
y muestreando los tags ID3 de sus archivos.
sounds/ : todas las voces por defecto para Asterisk están en /sounds. Los contenidos
básicos que vienen con Asterisk por defecto están en sounds.txt.
/var/spool/asterisk
El directorio spool de Asterisk contiene varios subdirectorios, incluyendo outgoing/,
qcall/,tmp/ y voicemail/. Asterisk monitorea los directorios qcall y outgoing
en busca de archivos de texto que contienen pedidos de información. Estos archivos
permiten al usuario generar una simple llamada copiando o moviendo el archivo de
estructura correcto dentro del directorio outgoing/.
El viejo método qcall generaba llamadas utilizando una simple línea de texto con
el archivo de llamada. Los archivos de llamada para usarlos con el directorio qcall
tomaban la siguiente forma:
Dialstring CAller-ID Extensión Maxsecs [Identifier] [Required-response]
Esto limitaba un poco lo que se podía hacer con el archivo de llamada, y que tipo de
información se podía pasar a Asterisk. De este modo, un nuevo método se desarrolló
en Asterisk usando el directorio outgoing. Los archivos de llamada que estén en este
directorio pueden contener mucha mas información, como ser un contexto, extensiones,
y prioridades donde la llamada debe comenzar, o simplemente una aplicación y sus
argumentos.
Todos los voicemail y saludos de usuarios están en el directorio voicemail/. Extensiones
configuradas en voicemail.conf que tiene que haber sido logeadas por lo menos una
vez se crean como subdirectorio de voicemail/.
/var/run/
Este directorio contiene la información de procesos ID (pid) para todos los procesos
activos en el sistema, incluyendo Asterisk.
/var/log/asterisk
2.12 Instalando Asterisk 83
Usuarios
Pares
Una conexión definida como par (peer) es una conexión saliente. Los usuarios llaman
al sistema, mientras que los pares hacen que el sistema llame. Ya que los pares no nos
llaman, una definición de peer no requiere la configuración típica de un contexto. Sin
embargo, hay una excepción: si las llamadas que provienen del sistema son devueltas
al mismo mediante un bucle de retorno, las llamadas entrantes (que provienen de un
Proxy SIP, no de un usuario agente) serán correspondidas con la definición de par. El
contexto por defecto debería manejar estas llamadas entrantes apropiadamente, aunque
sea preferible para los contextos que sean definidos en base a un peer.
A fin de saber donde enviar una llamada a un anfitrión, debemos saber su posición en
relación con Internet (es decir su dirección de IP). La posición de un par puede ser defini-
da estáticamente o dinámicamente. Un par dinámico es configurado con host=dynamic
bajo el título de definición de par. Como la dirección de IP de un par dinámico puede
cambiar constantemente, este debe registrarse con Asterisk para avisarle su dirección
IP y entonces enrutar las llamadas con éxito. Si el punto remoto es otro Asterisk, el
uso de una declaración de registro es requerido, como se explicará más adelante.
Amigos
Un amigo es un término para definir tanto un usuario como un par. Sin embargo, las
uniones que son tanto usuario como par no siempre son definidas de esta forma, porque
definir cada dirección de llamada individualmente (usando tanto un usuario como par)
permite más granularidad y el control de las conexiones individuales.
2.13 Configuración inicial de Asterisk 85
Se puede conectar incluso con cualquier teléfono IP que soporte SIP o IAX2. Por otro
lado, en caso de no conectar la central a una línea telefónica de salida, se pueden cursar
las llamadas por Internet a un proveedor de servicio telefónico.
Luego de editar los archivos hay que recargarlos para que los cambios surtan efecto. Lue-
go de editar el archivo zaptel.conf, va a ser necesario ejecutar /sbin/ztcfg -vv (-vv
para salidas de depuración mas completas) para que se actualicen las configuraciones del
hardware. Los cambios hechos en zapata.conf necesitan ejecutar el comando reload
desde la consola de Asterisk, pero si se cambian los métodos de señalización es nece-
sario reiniciar Asterisk (comando restart). Es necesario hacer reload chan_iaz2.so
y reload chan_sip.so luego de editar los archivos iax.conf y sip.conf respectiva-
mente.
que necesita comportarse como una Terminal y usar señalización FXS. El MODEM en
la computadora es un ejemplo de un componente FXO.
fxsks=2
loadzone=us
defaultzone=us
La primera línea además de indicar si usamos señalización FXS o FXO especifica uno
de los siguientes protocolos para el canal 2:
La diferencia entre loop-start y ground-start tiene que ver con la manera en que el
equipo solicita tono de discado: con ground-start, solicita al extremo lejano el tono de
discado llevando momentáneamente a tierra uno de los hilos. El modo loop-start usa
un corto en la línea para pedir tono. Kewlstart es igual que loop-start pero posee
mayor inteligencia y es mejor para detectar desconexión del extremo lejano. El modo
Kewlstart es preferido para señalizar circuitos analógicos en Asterisk.
Para usar otro método que no sea el Kewlstart hay que reemplazar en fxsks la ter-
minación ks por gs o ls, para loop o ground start respectivamente.
loadzone configura el conjunto de indicadores para señalizar el canal. El archivo
zonedata.c contiene información acerca de todas las variaciones de sonido que un
sistema telefónico puede tener para los distintos países: tono de discado, ciclos de lla-
mada, tono de ocupado, etc. Se pueden configurar de manera independiente para cada
canal. defaultzone se usa en caso que no se especifique ninguna zona para un canal
dado.
Luego de configurar zaptel.conf se pueden cargar los drivers para la tarjeta. modprobe
se usa para cargar módulos del kernel de Linux. Por ejemplo para cargar el driver wctdm
se ejecuta:
# modprobe wctdm
Si el comando se ejecuta sin salida entonces se cargó de manera exitosa. Se puede
verificar que el hardware y los puertos se hayan cargado correctamente con el uso de
ztcfg:
#/sbin/ztcfg -vv
Aparecerán los canales que están configurados con sus respectivos métodos de señali-
zación:
2.13 Configuración inicial de Asterisk 88
Zaptel Configuration
======================
Channel map:
Channel 02: FXS Kewlstart (Default) (Slaves: 02)
1 channels configured.
Alarms Span
OK Wildcard TDM400P REV E/F Board 1
[trunkgroups]
; define any trunk groups
[channels]
; hardware channels
; default
usecallerid=yes
hidecallerid=no
callwaiting=no
threewaycalling=yes
transfer=yes
echocancel=yes
echotraining=yes
; define channels
2.13 Configuración inicial de Asterisk 89
[incoming]
;
;llamadas entrantes por el puerto FXO son dirigidas
;a este contexto desde zapata.conf
;
exten => s,1,Answer( )
exten => s,2,Echo( )
fxoks=1
fxsks=2
loadzone=us
defaultzone=us
Luego de cargar los drivers del hardware se puede verificar el estado usando /sbin/ztcfg -vv:
Zaptel Configuration
======================
Channel map:
Channel 01: FXO Kewlstart (Default) (Slaves: 01)
Channel 02: FXS Kewlstart (Default) (Slaves: 02)
2 channels configured.
[trunkgroups]
; define trunk groups
[channels]
; canales de hardware
; default
usecallerid=yes
hidecallerid=no
callwaiting=no
threewaycalling=yes
transfer=yes
2.13 Configuración inicial de Asterisk 91
echocancel=yes
echotraining=yes
immediate=no
; define canales
context=internal ; Usa el contexto [internal] en extensions.conf
signalling=fxo_ks ; Usa señalización FXO para un canal FXS
channel => 1 ; Teléfono colocado en puerto 1
context=incoming ;llamadas entrantes van a [incoming] en extensions.conf
signalling=fxs_ks ; Usa señalización FXS para un canal FXO
channel => 2 ; PSTN conectada al Puerto 2
[internal]
exten => 611,1,Answer( )
exten => 611,2,Echo( )
SIP y RTP
SIP es un protocolo de capa de aplicación que usa un puerto bien conocido, 5060, para
las comunicaciones. SIP puede ser transportado por los protocolos por User Datagram
Protocol (UDP) o Transmission Control Protocol (TCP). Asterisk no maneja la im-
plementación de TCP para transportar los mensajes SIP, pero es posible que futuras
versiones lo soporten. SIP se utiliza para establecer, modificar y terminar las sesiones
multimedia tales como llamadas telefónicas. SIP no transporta datos multimedia entre
los puntos finales.
RTP se usa para transportar datos multimedia (ej. voz) entre los puntos finales. RTP
usa números altos para sus puertos que van del 10000 al 20000 por defecto en Asterisk.
Una topología frecuente para ilustrar SIP y RTP, comúnmente conocida como el tra-
pezoide SIP es la que se muestra en la figura 2.7. Cuando un punto quiere comunicarse
con el otro, primero contacta su servidor Proxy y éste último trata de contactar al
2.13 Configuración inicial de Asterisk 92
usuario destino. Una vez que los teléfonos comienzan la llamada se comunican de ser
posible de manera directa uno con el otro, de tal forma que los datos no tienen que ser
cursados por los Proxy.
Hay otros protocolos de VoIP tales como H.323, MGCP, IAX y otros, pero SIP parece
ser el que está en apogeo. La ventaja de SIP reside en su amplia aceptación y flexibilidad
(y tradicionalmente en su simpleza).
Configuración de SIP
[general]
context=default
srvlookup=yes
[john]
type=friend
secret=welcome
qualify=yes ; par calificado si no está a mas de 2000ms de distancia
nat=no ; Este teléfono no está detrás de un NAT
host=dynamic ; Este dispositivo se registra con nosotros
canreinvite=no ; Asterisk por defecto trata de redireccionar
context=internal ; El contexto internal controla lo que se puede hacer
El archive sip.conf comienza con la sección [general], que contiene las configuracio-
nes de canal y las opciones por defecto para todos los usuarios (users) y pares (peers)
definidos en sip.conf. Se puede redefinir las configuraciones por defecto de manera
individual para cada usuario/par en la sección de definición respectiva.
Los registros del servicio de sistema de nombre de dominio (Domain Name System
Service, DNS SRV records) son una manera de establecer una dirección lógica y reso-
luble del lugar en el que se puede ser alcanzado. Esto permite que las llamadas sean
direccionadas a diferentes ubicaciones sin la necesidad de hacer cambios en direcciones
lógicas.
Usando registros SRV se logra muchas de las ventajas de los DNS, mientras que des-
habilitándose esta opción se quebranta la Request for Comment (RFC) de SIP y se
2.13 Configuración inicial de Asterisk 93
FQDN del servidor Asterisk. El campo de SIP Proxy es el mismo que se ingresó para
domain/realm con el agregado de :5060 al final (5060 en este caso se refiere al puerto
SIP usado para señalización y debe coincidir con el que se especifica en sip.conf).
Luego de ingresar la información anterior hay que verificar que el campo de enabled
esté colocado en Yes y luego cerrar el menú de configuración. X-lite se registrará con
Asterisk automáticamente. Si no se registra, habrá que reiniciar el cliente. Ya que X-lite
está minimizado a un icono en la barra de tareas (Tray-icon) para cerrar el programa
habrá que hacer clic derecho en el icono y seleccionar Exit, para poder reiniciar la
aplicación.
Al momento de redacción del presente trabajo se lanzó una nueva versión (3.0) del X-lite
para Windows que se muestra en las figuras 2.9 y 2.10. La configuración del sipphone
sigue basándose en los mismos parámetros, aunque se ha reformado el entorno visual.
Configuración del Dial Plan
Muchos teléfonos SIP, tanto versiones soft como hard, son teléfonos multilíneas. Esto
significa que pueden aceptar múltiples llamadas entrantes al mismo tiempo. Siendo
así, para probar el X-lite se puede hacer una llamada a uno mismo para probar el
funcionamiento. Para esto bastará con discar el interno numero 100 en el siguiente
ejemplo, o bien el interno 610 para utilizar la aplicación Echo():
[internal]
exten => 100,1,Dial(SIP/john)
exten => 611,1,Echo( )
Con SIP, el trafico RTP se pasa utilizando diferentes puertos que los usados para
señalización SIP. Por ejemplo, Asterisk recibe la señalización SIP por el puerto 5060 y
el trafico RTP por los puertos 10000 al 20000 por defecto. El protocolo IAX difiere en
que tanto la señalización como el tráfico pasan por el puerto 4569. Un ventaja de este
sistema es que IAX suele ser mejor soportado en topologías que utilizan NAT.
Un user IAX se utiliza para autenticar y manejar llamadas entrantes a la PBX. Para
llamadas salientes de la PBX, Asterisk utiliza un peer IAX configurado en el archivo
iax.conf para autenticarse contra el extremo remoto.
Nota: es posible probar IAX usando el servicio Free World Dial up (FWD). Este es un
sistema de VoIP donde proveedores del servicio permiten conectarse con otros miem-
bros de la red independientemente de la ubicación física, de manera gratuita. Hay más
información al respecto en http://www.fwdnet.net.
Configuración de iax.conf
[general]
bandwidth=low
disallow=lpc10
jitterbuffer=no
2.13 Configuración inicial de Asterisk 97
forcejitterbuffer=no
tos=lowdelay
autokill=yes
register => fwd_number:[email protected]
[iaxfwd]
type=user
context=incoming
auth=rsa
inkeys=freeworlddialup
[incoming]
exten => 10001,1,Dial(SIP/john)
Como se mencionó antes, un user IAX recibe llamadas entrantes, un peer IAX se usa
para hacer llamadas salientes.
Configuración de iax.conf
La siguiente entrada en el archivo iax.conf se puede usar para hacer una llamada a la
red FWD:
[iaxfwd]
type=peer
host=iax2.fwdnet.net
username=<numero de cuenta fwd>
secret=<password de cuenta fwd>
qualify=yes
disallow=all
allow=ulaw
allow=gsm
2.13 Configuración inicial de Asterisk 98
allow=ilbc
allow=g726
Un par se define como type=peer. Se usa la instrucción host para configurar el servidor
a través del cual se harán llamadas (iax2.fwdnet.net para el ejemplo). El número de
cuenta y contraseña se usarán para autenticarse en la red FWD y se definen respecti-
vamente con username y secret.
Se puede usar la instrucción qualify=yes para ocasionalmente chequear que el servi-
dor remoto esté respondiendo. El tiempo de respuesta (latencia) puede ser monitoreado
desde la consola de Asterisk con el comando iax2 show peers. Por defecto un par es
considerado inalcanzable luego de 2 segundos (2000 milisegundos). Se puede persona-
lizar el tiempo reemplazando yes por la cantidad de milisegundos en la instrucción
qualify.
Los CODEC disponibles y el orden de preferencia pueden ser definidos para cada par
(peer). La instrucción disallow=all se usa para resetear cualquier configuración de
CODEC previamente establecido. Se puede luego ir usando la instrucción allow para
permitir los CODEC que se prevé soportar y establecer su orden de preferencia (de
arriba hacia abajo) usando la sintaxis allow=codec.
El comando iax2 show registry de la interfaz de comandos de Asterisk verifica que
se haya registrado de manera correcta.
Configuración del dial plan
Como en las previas configuraciones, se creará un contexto seguido por instrucciones
para efectuar una prueba con la aplicación Echo(). Se puede usar tanto un teléfono
conectado al puerto FXS (si se dispone de uno) o un teléfono SIP (ej. X-lite) y llamar
el interno 613:
[internal]
exten => 613,1,Dial(IAX2/iaxfwd/613)
2.13.6. Depurando
Hay varios modos de depurar en Asterisk. Cuando se ha logrado conectar a la consola
de Asterisk es posible establecer distintos niveles de verbosidad y salidas de depuración.
# /usr/sbin/asterisk
# /usr/sbin/asterisk -r
2.14 Fundamentos del dial plan 99
Si se está teniendo problemas con un módulo que no se está cargando o que provoca que
Asterisk no pueda arrancar, iniciar asterisk con -c para monitorear el estado de carga
de los módulos. Por ejemplo si se intenta cargar el driver de canal OSS (que permite el
uso del canal CONSOLE) y Asterisk no puede abrir /dev/dsp se recibirá el siguiente
error al inicio:
Contextos
Los dialplans están divididos en secciones llamadas contextos. Los contextos son gru-
pos de extensiones. Una extensión que es definida en un contexto está completamente
aislada de extensiones en cualquier otro contexto, a menos que la interacción sea ex-
presamente permitida.
Como un ejemplo simple, imaginemos que tenemos dos compañías que comparten un
servidor Asterisk. Si colocamos el menú de voicemail de cada compañía en su propio
contexto, ellos han sido eficientemente separados del otro. Esto permite que se defina
independientemente lo que pasa cuando, supongamos, la extensión 0 es marcada: las
personas que presionen el 0 en el menú de voicemail de la Compañía A, hablarán con la
recepcionista de la Compañía A, y visitantes que presionen 0 en el menú de voicemail
de la Compañía B, hablarán con la recepcionista de la Compañía B. (Este ejemplo
asume, por supuesto, que se ha configurado Asterisk para transferir las llamadas a los
recepcionistas cuando los visitantes presionan 0).
Los contextos son denotados colocando el nombre del mismo entre corchetes ([]). El
nombre puede ser cualquier cosa, utilizando desde la letra A hasta la Z (minúscula o
mayúscula), los números de 0 a 9 y el guión bajo o alto. Por ejemplo, un contexto para
las llamadas entrantes podría ser:
[incoming]
Todas las instrucciones colocadas después de una definición de contexto son parte de
aquel contexto, hasta que el siguiente contexto es definido. Al principio del dial plan,
hay dos contextos especiales llamados [general] y [globals]. Más adelante en este
trabajo los describiremos.
Uno de los usos más importantes de los contextos es para hacer cumplir la seguridad
establecida en cuanto al uso de las líneas telefónicas. Usando contextos correctamente,
se puede dar cierto acceso a rasgos del sistema a personas que llaman (como llamadas
de larga distancia) que no están a disposición de otras. Si no se diseña el dial plan con
cuidado, se puede permitir por descuido que otros usen fraudulentamente el sistema.
Extensiones
Dentro de cada contexto, definimos una o varias extensiones. Una extensión es una
instrucción que Asterisk seguirá, provocado por una llamada entrante o por dígitos
marcados en un canal. Las extensiones especifican lo que le pasa a las llamadas cuando
ellas recorren su camino por el dial plan. Aunque las extensiones puedan ser usadas para
especificar extensiones telefónicas en el sentido tradicional (es decir, por favor llame a
Juan en la extensión 153), ellas pueden ser usadas para mucho más en Asterisk.
La sintaxis para una extensión es la palabra exten seguida de una flecha formada por
el signo igual y el signo mayor que:
2.14 Fundamentos del dial plan 101
exten =>
Esto es seguido del nombre de la extensión. Tratando con sistemas telefónicos, tendemos
a pensar en extensiones como los números que se marcarían para hacer que el otro
teléfono suene. Sin embargo en Asterisk siempre se podrá utilizar números, letras, o
combinaciones de estos.
Una extensión completa está formada de tres componentes:
El nombre (o número) de la extensión
La prioridad (cada extensión puede incluir pasos múltiples; el número de paso es
llamado "prioridad")
La aplicación (o comando) que ejecuta alguna acción en la llamada
Estos tres componentes son separados por comas, como esto:
exten => nombre, prioridad, aplicación ( )
Aquí se muestra un ejemplo simple de cómo podría lucir una verdadera extensión:
exten => 123,1, Answer ( )
En este ejemplo, el nombre de extensión es 123, la prioridad es 1 y la aplicación es
Answer ().
Prioridades
Cada extensión puede tener pasos múltiples, llamados prioridades. Cada prioridad es
numerada secuencialmente, comenzando con 1. Cada prioridad ejecuta una aplicación
específica. Como ejemplo, la extensión siguiente contestaría el teléfono (en la prioridad
número 1) y luego lo cuelga (en la prioridad número 2):
Aplicaciones
Las aplicaciones son los burros de carga del dial plan. Cada aplicación realiza una acción
específica en el canal, como reproducir un sonido, aceptar una entrada marcada o la
finalización de una llamada.
Nota: Prioridades sin Numerar No hay nada como establecer que las prioridades tienen
que ser numeradas secuencialmente y entonces contradecirnos nosotros mismos. La
versión 1.2 de Asterisk añade una vuelta de tuerca a la enumeración de prioridades.
Esto introduce el uso de la prioridad n, que significa "siguiente". Cada vez que Asterisk
encuentra una prioridad n, toma el número de la prioridad anterior y añade 1. Este
hace más fácil hacer los cambios en el dial plan, para no tener que volver a numerar
todos los pasos. Por ejemplo, el dial plan podría verse como lo siguiente:
2.14 Fundamentos del dial plan 102
La versión 1.2 también permite que se adjudique etiquetas de texto a prioridades. Ad-
judicar una etiqueta a una prioridad, simplemente añade texto dentro de un paréntesis
después de la prioridad, como esto:
exten => 123, n (etiqueta), hace algo
Algunas aplicaciones, como Answer ( ) y Hangup ( ), no necesitan ninguna otra instruc-
ción para hacer su trabajo. Otras aplicaciones requieren información adicional. Estas
informaciones, llamadas argumentos, pueden ser pasadas a las aplicaciones para indicar
como deben ejecutar las acciones. Para pasar argumentos a una aplicación, se los deberá
colocar entre paréntesis seguidos del nombre de la aplicación, separados por comas.
La Extensión s
Antes de comenzar con el dial plan, deberíamos explicar una extensión especial llamada
s. Cuando las llamadas entran en un contexto sin una extensión de destino específica
(por ejemplo, que suene una línea FXO), ellas son manejados automáticamente por la
extensión s. (La s significa start, ya que la mayor parte de las llamadas empiezan en la
extensión s.) Ya que esto es exactamente lo que necesitamos para el dial plan, vamos
a comenzar a unir los pedazos. Ejecutaremos tres acciones en la llamada (contestar,
reproducir sonido y colgar), entonces necesitamos crear una extensión s con tres prio-
ridades. Colocaremos las tres prioridades dentro [entrantes], ya que todas las llamadas
entrantes deberían comenzar en este contexto:
[incoming]
Ahora todo lo que tenemos que hacer es rellenar las aplicaciones y hemos creado nuestro
primer dial plan.
2.14 Fundamentos del dial plan 103
[incoming]
A pesar de que este ejemplo sea muy corto y simple, enfatiza los conceptos principales
de contextos, extensiones, prioridades y aplicaciones. Ahora que hemos cubierto éstos
conceptos básicos, vamos a seguir construyendo sobre nuestro ejemplo. Después de todo,
un sistema telefónico que simplemente reproduce un sonido y luego cuelga no es tan
útil!
2.15 Adición de Lógica al dial plan 104
[incoming]
[incoming]
Examinemos lo que hemos hecho hasta ahora. Cuando los usuarios llaman, ellos oirán
un saludo "Por favor marque el interno que usted desea llamar". Si ellos aprietan 1,
ellos oirán el número uno, y si ellos aprietan 2, ellos oirán el número dos. Mientras esto
es un buen principio, vamos a embellecerlo un poco. Usaremos la aplicación Goto ( )
para repetir el saludo después de poner el número:
[incoming]
[incoming]
Usando las extensiones i y t hacemos nuestro dial plan un poco más robusto y fácil de
usar. Dicho esto, todavía es completamente limitado, porque los visitantes exteriores
no tienen acceso para conectarse con alguna persona. Para hacer esto, tendremos que
aprender sobre otra aplicación, llamada Dial( ).
2.15 Adición de Lógica al dial plan 106
Ya que las extensiones 1 y 2 en nuestro dial plan son algo inútiles ahora que sabemos
usar la aplicación Dial ( ), vamos a sustituirlas y colocar por ellas las extensiones 101
y 102, que permitirán que los visitantes exteriores llamen a Juan y Julia:
[incoming]
Note que cualquiera de estos argumentos puede ser dejado en blanco. Por ejemplo, si
se quiere especificar una opción pero no un intervalo de espera, simplemente se deja el
argumento de intervalo de espera en blanco:
exten => 123,1, Dial (Zap/1,,r)
[incoming]
[internal]
Variables globales
Como su nombre lo indica, las variables globales se aplican a todas las extensiones en
todos los contextos. Las variables globales pueden ser usadas en todas partes dentro
de un dial plan para aumentar legibilidad y manejabilidad. Supongamos que se tiene
un dial plan grande y cientos de referencias al canal Zap/1. Ahora imaginemos que se
tenga que ir a través del dial plan cambiando todas aquellas referencias por Zap/2. Esto
sería un largo proceso predispuesto al error, por no decir más.
Por otra parte, si se había definido una variable global con el valor Zap/1 en el comienzo
del dial plan y luego referencias a esta, sólo se tendría que cambiar una línea.
Las variables globales deberían ser declaradas en el contexto [globals] al principio del
archivo extensions.conf. Sin embargo también pueden ser definidas mediante progra-
mación, usando la aplicación SetGlobalVar ( ). Aquí se muestran ambos métodos:
[globals]
JUAN=Zap/1
[internal]
Variables de canal
Una variable de canal (como el número de Caller ID) está asociada sólo con una llamada
en particular. A diferencia de las variables globales, las variables de canal son definidas
sólo para la duración de la llamada corriente y está disponible sólo para el canal que
participa en aquella llamada.
Hay muchas variables de canal predefinidas, disponibles para el uso dentro del dial
plan, que son explicadas en el archivo README.variables, en el subdirectorio /doc de
la fuente de Asterisk. Las variables de canal son definidas a través de la aplicación
Set ( ):
exten => 123,1, Set (NUMEROMAGICO=42)
Variables de entorno
Las variables de entorno son un modo de tener acceso a variables de entorno Unix desde
Asterisk. Estas está referidas como $ {ENV (var)}, donde var es la variable entorno
de Unix.
Ahora que hemos descrito las variables, vamos a ponerlas a trabajar dentro en nuestro
dial plan. Vamos a añadir variables para dos personas, Juan y Julia:
[globals]
JUAN=Zap/1
JULIA=SIP/julia
[incoming]
[internal]
2.15 Adición de Lógica al dial plan 111
[globals]
Juan=Zap/1
Julia=SIP/julia
OUTBOUNDTRUNK=Zap/4
Después, añadiremos contextos a nuestro dial plan para la marcación saliente. Podría-
mos preguntarnos en este punto, por qué tenemos que separar contextos para llamadas
salientes. Este es el modo a través del cual podemos regular y controlar quién tiene
permiso para hacer llamadas, y qué tipos de llamadas salientes se permiten hacer.
Primero, vamos a hacer un contexto para llamadas locales. Para ser consecuente con
los conmutadores telefónicos tradicionales, pondremos un 9 en el frente de nuestros
patrones, de modo que los usuarios tengan que marcar 9 antes de llamar a un número
exterior:
[outbound-local]
Vamos a examinar lo que acabamos de hacer. Hemos añadido una variable global lla-
mada OUTBOUNDTRUNK, que controlará que canal se usará para llamadas salientes.
Tenemos también añadido un contexto para llamadas locales. En la prioridad 1, toma-
mos la extensión marcada, sacamos el número 9 con la sintaxis ${EXTEN:1}, y luego se
intenta marcar aquel número en el canal designado por la variable OUTBOUNDTRUNK. Si
la llamada es exitosa, se tiende un puente entre quien llama y el canal de salida. Si la
llamada fracasa (porque el canal está ocupado o el número no puede ser marcado por
la razón que sea), la aplicación Congestión ( ) es llamada, que reproduce una señal de
ocupado (tono de congestión) para hacer saber al usuario que la llamada no se puede
realizar.
Antes de ir un poco más lejos, vayamos a asegurarnos que nuestro dial plan permite la
llamada saliente a los números de emergencia:
[outbound-local]
[outbound-long-distance]
Ahora que tenemos estos dos nuevos contextos necesitamos alguna forma para que los
contextos puedan ser capaces de usar otros contextos.
2.15.8. Inclusiones
Asterisk permite usar un contexto dentro de otro a través de la directiva include.
Ésta es usada para conceder el acceso a diferentes secciones del dial plan. Usaremos la
funcionalidad include para permitir a los usuarios en nuestro contexto [internal] la
capacidad de hacer llamadas salientes. Pero primero, vamos a cubrir la sintaxis.
La declaración incluir toma la forma siguiente, donde contexto es el nombre del contexto
remoto queremos incluir en el contexto corriente:
include => contexto
Cuando incluimos contextos dentro de nuestro contexto corriente, tenemos que ser cons-
cientes del orden en el cual los incluimos. Asterisk tratará primero de corresponder la
extensión en el contexto corriente. De no conseguirlo, intentará entonces el primer con-
texto incluido, y continuará con los otros contextos en el orden en que fueron incluidos.
Hasta el momento, nuestro dial plan tiene dos contextos para llamadas salientes, pero
los usuarios en el contexto [internal] no pueden utilizarlos. Vamos a remediar esto con
la inclusión de los dos contextos para llamadas salientes en el contexto [internal],
como se muestra:
[globals]
Juan=Zap/1
Julia=SIP/julia
OUTBOUNDTRUNK=Zap/4
[incoming]
[internal]
2.16 Más conceptos acerca del Dial plan 115
[outbound-local]
[outbound-long-distance]
Estas dos declaraciones de include hacen posible que los usuarios en el contexto [internal]
puedan hacer llamadas salientes. También deberíamos notar que para el bien de nuestra
seguridad se debería asegurar que el contexto [incoming] nunca permita la marcación
saliente. (Si esto se permitiera, las personas que llaman al sistema podrían hacer lla-
madas salientes que serían cobradas a nosotros!).
Expresiones básicas
2.Çada una de estas expresiones tiene un resultado particular, dependiendo del valor
de la variable utilizada.
2.16 Más conceptos acerca del Dial plan 116
En Asterisk, las expresiones siempre comienzan con el signo pesos y un corchete abierto
terminando con el corchete cerrado, tal como se muestra a continuación:
$[expresión]
Así, se pueden escribir dos ejemplos como sigue:
$[${COUNT} + 1]
$[${COUNT} / 2]
Cuando Asterisk encuentra una expresión en un dial plan, la reemplaza (en su totalidad)
con el valor resultante. Es importante notar que esto se realiza después de la sustitución
de la variable. Para demostrar esto, miremos el siguiente código:
Operadores
Cuando se crea el dial plan Asterisk, se está escribiendo código en un lenguaje especial.
Esto significa que el dial plan Asterisk, como cualquier lenguaje de programación,
reconoce símbolos llamados operadores que le permiten manipular variables. Listemos
a continuación los tipos de operadores que están disponibles en Asterisk:
Operadores Booleanos
Estos operadores evalúan verdadero en una declaración. Hablando en términos de
computación, esto se refiere a ver si la declaración es algo o nada (no cero, o cero,
verdadero o falso, on o off, y así). Los operadores Booleanos son:
expr1 | expr2
Este operador(llamado operador or ) devuelve el valor de expr1 si esto es verdadero (no
una cadena vacío ni cero). De otra forma, devuelve el valor de expr2.
expr1 & expr2
Este operador (llamado and ) devuelve el valor de expr1 si ambas expresiones son ver-
daderas. Sino, devuelve cero.
expr1 {=, >, >=, <, <=, !=} expr2
2.16 Más conceptos acerca del Dial plan 117
Sintaxis
Las funciones muchas veces se utilizan junto con la aplicación Set() para obtener o
establecer el valor de una variable. Para mostrar un simple ejemplo de esto, usemos
la función LEN(). Con esta función calculamos el largo de la cadena del argumento.
Calculemos el largo de la cadena de la variable y volvamos a leer el largo:
La aplicación GotoIf()
Otra aplicación que se puede usar en el dial plan es el GotoIfTime(). Mientras que
GotoIf() evalúa una expresión para decidir que hacer, GotoIfTime() verifica la hora del
sistema actual y usa esto para decidir si debe o no seguir una rama diferente en el dial
plan.
El uso más obvio de esta aplicación es para darle a las llamadas diferentes saludos antes
y después de las horas de trabajo.
La sintaxis para la aplicación GotoIfTime() es así:
GotoIfTime(times,days_of_week,days_of_month,months?label)
Resumiendo, GotoIfTime() envía a la llamada a una etiqueta (label) especifica si el día y
hora actual coincide con el criterio especificado por times,days_of_week,days_of_months.
Describamos cada argumento con un poco más de detalle:
2.16 Más conceptos acerca del Dial plan 120
Times : Es una lista de uno o más rangos de tiempos, en el formato de 24 horas. Como
ejemplo, 9:00 a.m. hasta 5:00 p.m. puede ser especificado como 09:00-17:00. El día
comienza a las 0:00 y termina a las 23:59.
Days_of_week : Es una lista de uno o más días de la semana. Se deben especificar los
días como mon, tue, wed, thu, fri, sat, y/o sun. Lunes a viernes se puede escribir como
mon-fri. Martes y jueves lo expresamos como tue,thu.
Days_of_month : Es una lista numérica de los días del mes. Los días se especifican por
el número desdel 1 al 31. Desdel 7 al 12 se expresaría como 7-12, y el 15 y el 30 como
15,30.
Months : Es una lista de uno o más meses del año. Los meses se escribirán como jan,
feb, mar, apr, y así.
Si lo que se necesita es que halla coincidencia en cualquiera de estos argumentos, sim-
plemente ponga un * dentro del argumento correspondiente.
El argumento label (etiqueta) puede ser alguno de los siguientes:
Una prioridad dentro de la misma expresión, como ser 10
Una extensión y una prioridad dentro del mismo contexto, como 123,10
Un contexto, extensión, y prioridad, como incoming,123,10
Una prioridad nombrada dentro de la misma extensión, como lo es passed
Ahora que vimos la sintaxis, hagamos algunos ejemplos. En este ejemplo se coincide
desde las 9:00 a.m. a las 5:59 p.m., de lunes a viernes, cualquier día del mes, en cualquier
mes del año:
Exten => s,1,GotoIfTime(09:00-17:59,mon-fri,*,*?open,s,1)
Si el usuario llama durante ese horario, la llamada se envía a la primera prioridad de
la extensión s en el contexto llamado open. Si se realiza la llamada fuera del horario
especificado, se envía a la próxima prioridad de la extensión actual. Esto le permite
de una manera fácil dividirse en múltiples horarios, como se muestra en el siguiente
ejemplo:
Casillas de correo de voz protegidas con clave ilimitadas, cada una de las cuales
tienen carpetas que permiten organizar el correo de voz.
Diferentes saludos para distintos estados
Saludos por defecto y personalizados
Habilidad de asociar teléfonos con más de una casilla de correo y casillas de correo
con más de un teléfono
Notificación de correo de voz por mail, con la opción de adjuntar el correo de voz
como un archivo de audio
Redireccionamiento y transmisiones de correo de voz
Indicador de mensaje en espera en muchos tipos de teléfonos
Estas son solo algunas de las cosas que se pueden configurar, mas adelante veremos otras
pero ahora nos introduciremos un poco más en los fundamentos de la configuración
típica de un correo de voz.
La configuración del correo de voz se define en el archivo voicemail.conf. Este archivo
contiene una diversidad de opciones que se pueden utilizar para personalizar el sistema
de correo de voz adaptándolo a las necesidades requeridas. Hacer énfasis en todas las
opciones que nos presenta el archivo voicemail.conf puede estar fuera del alcance de
esta sección, pero el archivo de configuración de muestra esta muy bien documentado
y es bastante fácil de seguir. Los contextos y casillas de correo de voz se definen al final
de todo en el archivo voicemail.conf.
Tal como el dial plan los contextos poseen diferentes partes separadas, los contextos
de correo de voz le permiten definir diferentes opciones de casillas de correo que están
separadas unas de otras. Esto permite guardar correo de voz de varias compañías u
oficinas en el mismo servidor. Los contextos del correo de voz son definidos de la misma
forma que los contextos del dial plan, con corchetes alrededor del nombre del contexto.
Dentro de cada contexto de correo de voz, se definen casillas de correo. La sintaxis para
definir casillas de correo es:
Mailbox => password,name[,email[,pager_email[,options]]]
Expliquemos que función cumple cada parte de la definición de casilla de correo:
Mailbox : es el número de casilla de correo. Usualmente se corresponde con el número
de la extensión del grupo asociado.
Password : es la clave numérica del propietario de la casilla de correo. El mismo utilizará
esta clave para acceder a su correo de voz.
Name : es el nombre de la casilla de correo del propietario. El directorio de la compañía
utiliza el texto en este campo para permitir a las personas que llaman decir sus nombres
de usuario.
Email : acá se ingresa la dirección de correo electrónico (el mail) del propietario de
la casilla de correo. Asterisk puede enviar notificaciones de correo de voz (incluyendo
el mensaje de voz como un archivo adjunto) hacia una dirección de correo electrónico
especificada.
2.16 Más conceptos acerca del Dial plan 122
[default]
101 => 1234, John Doe,[email protected],[email protected]
102 => 4444, Jane Doe,[email protected],[email protected]
Una vez creadas las casillas de correo para Jane y John, permitámosle a los usuarios
que llaman dejar un mensaje para ellos si es que no se contesta el teléfono. Para realizar
esto, usaremos la aplicación VoiceMail().
La aplicación VoiceMail() manda al usuario que llama a una casilla especifica, así puede
dejar un mensaje. La casilla de correo debe ser especificada como mailbox@context,
donde context es el nombre del contexto del correo de voz. El numero de casilla de
correo puede tener como prefijo la letra b o la letra u. Si utilizamos la letra b, el
usuario que llama escuchara el mensaje de ocupado del propietario del correo de voz.
Si utilizamos la letra u, se escuchará un mensaje de no disponible del propietario del
correo de voz (si es que existe un mensaje grabado de este tipo).
Veamos esto en un simple dial plan. Previamente, tendremos una línea como la que
sigue en nuestro contexto [internal], la cual nos permite llamar a John:
exten => 101,1,Dial(${JOHN},,r)
Bien, ahora cambiemos esto si es que John está ocupado (o en otra llamada), nos enviará
a su casilla de correo de voz, donde escucharemos su mensaje de ocupado (no olvidar
que la aplicación Dial() manda al usuario que llama a la prioridad n+101 si la línea
marcada esta ocupada):
Los usuarios pueden ingresar al correo de voz para escuchar sus mensajes, cambiar sus
opciones de correo de voz, y grabar sus propios saludos de correo de voz por medio de
la aplicación VoiceMailMain(). De una manera particular, VoiceMailMain() se utiliza
sin ningún argumento. Agreguemos la extensión 500 al contexto [internal] de nuestro
dial plan así los usuarios internos pueden discar este número para tener acceso a sus
mensajes de correo de voz:
Exten => 500,1,VoiceMailMain()
Una de las posibilidades del voicemail de Asterisl es el directorio de discado por nombre.
Este se crea con la aplicación Directory ( ). Esta aplicación usa los nombres definidos
en las casillas de correo en voicemail.conf para presentar a la persona que llama un
directorio de discado por nombres de los usuarios.
Directoy() usa hasta tres argumentos: el contexto de voicmail desde donde leer los
nombres, el contexto opcional del dial plan al cual discar al usuario y una cadena de
opciones (que también es opcional). Por defecto, la aplicación DIrectory ( ) busca a los
usuarios por el apellido, pero si se pasa como opción la letra f, se fuerza a que busque
por nombres.
Vamos a agregar dos directorios de discado por nombres al contexto [incoming] de
manera que las personas que llamen puedan buscar tanto por nombre como por apellido:
2.16.5. Macros
Los macros son unos constructores muy útiles designados para evitar repeticiones en
el dial plan. También nos ayudan a realizar cambios en el dial plan. Para ilustrar este
punto, echémosle un vistazo a nuestro simple dial plan nuevamente. Si recordamos
los cambios que realizamos para el correo de voz, habíamos terminado en la siguiente
extensión de John:
Definiendo macros
Para nuestro primer macro, usaremos la lógica del dial plan que veníamos utilizando pa-
ra el correo de voz de John y lo transformaremos en un macro. Luego usaremos el macro
para darle a John y Jane (y el resto de nuestros empleados) la misma funcionalidad.
La definición de un macro se parece a definir un contexto. (En efecto, se puede discu-
tir que son pequeños, contextos limitados). Se define un macro poniendo macro- y el
nombre del macro entre corchetes, como sigue:
[macro-voicemail]
Los comandos dentro del macro son muy similares a cualquier otro en el dial plan, el
único factor limitante es que los macros solo usan la extensión s. Agreguemos la lógica
de nuestro correo de voz al macro, cambiando la extensión a s tal como a continuación:
[macro-voicemail]
exten => s,1,Dial(${JOHN},10,r)
exten => s,2,VoiceMail(u101@default)
exten => s,102,VoiceMail(b101@default)
Para usar un macro en nuestro dial plan, nos referimos a la aplicación Macro(). Esta
misma llama al macro especificado y le pasa cualquier argumento. Por ejemplo, para
llamar a nuestro macro de correo de voz desde el dial plan, podemos realizar lo siguiente:
exten => 101,1,Macro(voicemail)
La aplicación Macro() también define muchas variables especiales para nuestro uso:
${MACRO_CONTEXT}
El contexto original en donde el macro será llamado.
${MACRO_EXTEN}
La extensión original en donde el macro será llamado.
${MACRO_PRIORITY}
La prioridad original en donde el macro será llamado.
${ARGn}
El argumento n-ésimo es pasado al macro.
Por ejemplo, el primer argumento puede ser ${ARG1}, segundo ${ARG2},etc.
[macro-voicemail]
exten => s,1,Dial(${JOHN},10,r)
exten => s,2,VoiceMail(u${MACRO_EXTEN}@default)
exten => s,102,VoiceMail(b${MACRO_EXTEN}@default)
Bien, ahora estamos más cerca de tener los macros como queremos, pero aún queda una
cosa para cambiar: necesitamos pasar el canal a llamar, como definimos con codificación
fija para ${JOHN}(recordemos que definimos la variable JOHN como el canal a llamar
cuando queramos contactar a John). Permitamos pasar el canal como un argumento, y
así nuestro primer macro estará completo:
[macro-voicemail]
exten => s,1,Dial(${ARG1},10,r)
exten => s,2,VoiceMail(u${MACRO_EXTEN}@default)
exten => s,102,VoiceMail(b${MACRO_EXTEN}@default)
Ahora que tenemos al macro terminado, utilicémoslo en nuestro dial plan. Aquí es
donde podemos llamar a nuestro macro para darle a John, Jane y Jack correo de voz:
Con 50 o más usuarios, este dial plan se verá compacto y organizado. Simplemente
tenemos una línea por usuario, referenciándolo a un macro que puede ser tan complicado
como se requiera. Podemos también tener algunos diferentes macros para varios tipos
de usos, como ser ejecutivos, telefonos_de_cortesia, agentes_call_center,
sets_analogos, dept_ventas, etc.
Para recuperar un valor desde la base de datos de Asterisk y asignarlo a una variable,
usamos la aplicación Set() nuevamente. Permitamos recibir el valor de count (nueva-
mente, desde la familia test), asignándoselo a la variable COUNT, y luego digámosle el
valor al usuario:
Podrá ver el valor de una llave determinada desde la línea de comando de Asterisk
mediante el comando database get family key. Para ver todos los contenidos de AstDB,
use el comando database show.
Existen dos formas de borrar datos de la base de datos Asterisk. Para borrar una llave,
usar DBdel(). La misma toma como argumento la familia y la llave, como sigue:
2.16 Más conceptos acerca del Dial plan 127
Continuemos con el próximo ejemplo. Acá creamos una lógica de dial plan en torno a la
aplicación LookBlacklist(), la cual verifica si se encuentra el número del identificador de
llamada (Caller ID) en la lista negra (la lista negra es simplemente una familia llamada
blacklist en la AstDB). Si LookupBlacklist() encuentra el numero en su lista, envía
la llamada a la prioridad n+101. De otra forma, la llamada continúa con la próxima
prioridad:
Para agregar un nuevo número a la lista negra, corra el comando database put blacklist
number 1 desde la interfaz de línea de comando de Asterisk.
Zapateller() es una simple aplicación Asterisk que ejecuta un tono especial de informa-
ción al comienzo de una llamada, que causa que los auto-diallers (comúnmente usados
por telemarketers) piensen que la línea ha sido desconectada. No solamente evitará esta
molestia, sino que sus sistemas marcaran su número como si estuviera fuera de servicio,
lo cual ayudará mucho a evitar toda clase de llamadas de telemarketing.
Para usar esta funcionalidad en su dial plan, simplemente llame a la aplicación Zapa-
teller().
También utilizamos la opción nocalerid por esto el tono se ejecutará solo cuando no
halla información de identificador de llamada en la llamada entrante. Por ejemplo,
podría usar Zapateller() en la extensión s de su contexto [incoming] de la siguiente
forma:
[incoming]
exten => s,1,Zapateller(nocallerid)
exten => s,2,Playback(enter-ext-of-person)
Estacionamiento de llamadas
así de esta forma puede salir de espera por otra extensión. Los parámetros para el
estacionamiento de llamada (como la extensión a usar, el número de espacios, y otras
más) se controlan por medio de la configuración del archivo features.conf. La sección
[general] del archivo features.conf contiene cuatro configuraciones relacionadas con el
estacionamiento de una llamada:
1) Parkext: es la extensión de espacio de estacionamiento. Transfiera una llamada a
esta extensión, y el sistema le dirá cuál posición de estacionamiento le corresponde a
la llamada. Por defecto, la extensión de estacionamiento es 700.
2) Parkpos: esta opción define el número de espacios de estacionamiento. Por ejemplo,
configurándolo desde 701-720 se crean 20 posiciones de estacionamiento, numeradas
desde la 701 a la 720.
3) Context: es el nombre del contexto de estacionamiento. Para poder estacionar lla-
madas, se debe incluir este contexto.
4) Parkingtime: si se activa, esta opción controla cuanto tiempo (en segundos) una
llamada puede permanecer en el espacio de estacionamiento. Si la llamada no es recogida
dentro del tiempo especificado, la extensión que la estacionó será llamada nuevamente.
También note que debido a que el usuario necesita transferir llamadas a la extensión
de espacio de estacionamiento, se debe asegurar que utilice las opciones t y/o T de la
aplicación Dial().
Creemos un simple dial plan para mostrar todo lo anterior:
[incoming]
include => parkedcalls
exten=103,1,Dial(SIP/Bob,,tT)
exten=104,1,Dial(SIP/Charlie,,tT)
Para ilustrar como funciona esto, diremos que Alicia llama dentro del sistema y marca
la extensión 103, para alcanzar a Bob. Luego de un tiempo, Bob transfiere la llamada
a la extensión 700, que le dice a él que la llamada de Alicia ha sido estacionada en la
posición 701. Bob entonces llama a Charlie a la extensión 104, y le dice a él que Alicia
está en la extensión 701. Charlie entonces marca la extensión 701, y comienza a charlar
con Alicia. Este es un modo simple y efectivo de permitir a los usuarios transferirse
llamadas entre ellos.
[rooms]
conf => 600
Se explicará por lo tanto, VoIP y que es lo que hace a las redes de VoIP diferentes de
las redes de voz de conmutación de circuitos tradicionales. Se explorará la necesidad de
protocolos VoIP, describiendo la historia y potencial futuro de cada uno. También se
harán consideraciones sobre la seguridad y capacidad de estos protocolos para trabajar
dentro de topologías que utilizan NAT. Se describirán los siguientes protocolos de VoIP:
IAX
SIP
H.323
MGCP
Skinny/SCCP
UNISTIM
Los CODEC son los medios por los cuales la voz análoga puede ser convertida a una
señal digital y llevada a través de Internet. La amplitud de banda en cualquier posición
es finita, y el número de conversaciones simultáneas que cualquier conexión particular
puede llevar está directamente relacionado con el tipo de codec implementado. Por lo
tanto, exploraremos las diferencias entre los codecs (G.711, G.726, G.723.1, G.729A,
GSM, iLBC, Speex, MP3, etc.) en cuanto a exigencias de amplitud de banda (nivel de
compresión) y calidad.
de audio, mientras que los protocolos de Internet son diseñados para cortar todo en
pedazos, encapsular los trozos de información en miles de paquetes y luego entregar
cada paquete a través de cualquier camino posible al punto lejano. Claramente, se
necesita algún tipo de puente.
IAX es un protocolo abierto, lo cual significa que cualquiera puede descargarlo y utili-
zarlo, pero no es todavía un estándar.
En Asterisk, IAX es provisto por el módulo chan_iax2.so.
Historia
El protocolo IAX fue desarrollado por Digium para la comunicación entre servidores
Asterisk (de ahí el Protocolo de Intercambio Inter-Asterisk). IAX es un protocolo de
transporte (como SIP) que usa un solo puerto UDP (4569) para ambos canales, el de
señalización y el de corrientes RTP. Esto hace más fácil trabajar detrás de un firewall
y NAT.
IAX también tiene la capacidad única de establecer (trunking) sesiones múltiples en un
único flujo de datos, que puede ser una ventaja de ancho de banda tremenda cuando se
envían muchos canales simultáneos a una caja remota. El Trunking permite que corrien-
tes de datos múltiples sean representadas con solo un encabezado de datagrama, para
bajar el elevado embotellamiento asociado con estos canales individuales. Esto ayuda a
bajar la latencia y reducir el procesamiento y el ancho de banda requerido, permitien-
do al protocolo escalar más fácilmente con un número grande de canales activos entre
puntos extremos.
Futuro
Ya que IAX fue optimizado para la voz, ha recibido un poco de críticas por no proveer
de la misma forma vídeo (pero de hecho, IAX sostiene el potencial para llevar más o
menos cualquier corriente de datos multimedia deseada). Como es un protocolo abierto,
los futuros tipos de servicios seguramente serán incorporados cuando la comunidad los
requiera.
IAX y NAT
El protocolo IAX2 fue deliberadamente diseñado para trabajar detrás de dispositivos
NAT. El uso de un puerto UDP tanto para señalización como para transmisión de
media también lleva el número de huecos requeridos en el firewall al mínimo. Estas
consideraciones han ayudado a hacer de IAX uno de los protocolos más fáciles (si no el
más fácil) para implementar en redes seguras.
2.18 La Necesidad de Protocolos VoIP 133
SIP
H.323
Las dos versiones de H.323 proveídas en Asterisk son manejadas por los módulos
chan_h323.so (suministrado en Asterisk) y chan_oh323.so (disponible como un com-
plemento libre).
Historia
H.323 fue desarrollado por la ITU en mayo de 1996 como un medio para transmitir
voz, vídeo, datos y comunicaciones de fax a través de una red IP conectada a la red
PSTN. Desde aquel tiempo,H.323 ha pasado por varias versiones y anexos (que aña-
den funcionalidad al protocolo), permitiendo funcionar en redes IP puras y redes más
extensamente distribuidas.
Futuro
El futuro de H.323 es sujeto de un arduo debate. Si los servicios sirven de medida, el
futuro no luce nada bien para H.323; casi nunca es mencionado (seguramente no con la
regularidad que se menciona a SIP). H.323 es comúnmente considerado técnicamente
superior a SIP, pero, como con tantas otras tecnologías, esto parece no importar. Uno
de los factores que hace a H.323 impopular es su complejidad.
H.323 todavía lleva por mucho la mayoría del tráfico VoIP de portadora, pero mientras
la gente se convierta en menos y menos dependiente de las portadoras tradicionales para
sus necesidades de telecomunicaciones, el futuro de H.323 se hace más difícil de predecir.
Mientras H.323 puede no ser el protocolo de opción para nuevas implementaciones,
seguramente por algún tiempo más vamos a tener que trabajar en la interoperabilidad
con H.323.
H.323 y NAT
El estándar H.323 utiliza el protocolo RTP para transportar media entre puntos ex-
tremos. A causa de esto, H.323 tiene los mismos problemas que SIP al trabajar con
topologías de red que implican un NAT. El método más fácil es simplemente pasar los
puertos apropiados a través del dispositivo NAT al cliente interno.
Para recibir llamadas, siempre se tendrá que pasar el puerto TCP 1720 al cliente.
Además, se tendrá que pasar los puertos UDP para RTP y Real Time Control Protocol
(RTCP) (hay que ver el manual del dispositivo para la variedad de puertos que requiere).
Clientes más viejos, como MSN, también requerirán puertos TCP para túneles (H.245)
(otra vez, ver el manual del cliente para la variedad de números de puerto).
Si se tiene a varios clientes detrás del dispositivo NAT, se tendrá que usar un gatekeeper
corriendo en modo Proxy. El gatekeeper requerirá una interfaz conectada a la subred
IP privada e Internet. El cliente H.323 en la subred IP privada se registrará entonces al
gatekeeper, que va a procesar las llamadas de los clientes. Nótese que cualquier cliente
externo que desee llamar deberá registrarse con el servidor Proxy.
Actualmente, Asterisk no puede actuar como un gatekeeper H.323. Se tendrá que usar
una aplicación aparte, como el Open H323 Gatekeeper de código abierto
http://www.gnugk.org.
MGCP
El Media Gateway Control Protocol (MGCP) también viene del IETF. Mientras el
despliegue MGCP es más extenso de lo que uno podría pensar, está perdiendo rápida-
mente terreno frente a protocolos como SIP y IAX. De todos modos, Asterisk ama los
protocolos, por lo que naturalmente lo provee rudimentariamente.
2.19 Codecs 135
El MGCP es definido en RFC 3435. Fue diseñado para hacer los dispositivos terminales
(como los teléfonos) tan simples como fuera posible y que tengan toda la lógica de
llamada y procesamiento manejado por gateways y agentes de llamada. A diferencia
de SIP, MGCP usa un modelo centralizado. Los teléfonos MGCP no pueden llamar
directamente a otros teléfonos MGCP; ellos siempre deben pasar por algún tipo de
regulador.
Asterisk provee MGCP a través del módulo chan_mgcp.so y los puntos extremos es-
tán definidos en el archivo de configuración mgcp.conf. Ya que Asterisk proporciona
sólo servicio básico de llamada de agente, no puede emular un teléfono MGCP (para
registrarse a otro regulador MGCP como un agente de usuario, por ejemplo).
Protocolos Patentados
Finalmente, vamos a mencionar dos protocolos patentados que son provistos por Aste-
risk.
Skinny/SCCP
El Skinny Client Control Protocol (SCCP) está patentado por Cisco. Es el protocolo
por defecto para puntos extremos en un Gerente de Llamada PBX de Cisco. Skinny es
provisto por Asterisk, pero si se unen teléfonos de Cisco al sistema, se recomienda que
se obtengan imágenes SIP para cualquier teléfono que provea y se conecten vía SIP.
UNISTIM
Como protocolo VoIP patentado por Nortel, UNISTIM, ha sido añadido recientemente
en Asterisk. Esto significa que Asterisk es la primer PBX en la historia en apoyar
nativamente terminales IP patentadas de los dos jugadores más grandes en VoIP, Nortel
y Cisco.
2.19. Codecs
Se entiende generalmente que CODEC son varios modelos matemáticos usados para
codificar digitalmente (y comprimir) la información de audio análoga. Muchos de es-
tos modelos toman en consideración la capacidad del cerebro humano de formar una
impresión a partir de información incompleta. Todos hemos visto ilusiones ópticas;
igualmente, los algoritmos de compresión de voz toman la ventaja de nuestra tendencia
de interpretar lo que creemos que deberíamos oír, más que lo que realmente oímos.
El objetivo de los algoritmos de codificación es balancear el equilibrio entre eficacia y
calidad.
Al principio, el término CODEC se refiere a un COder/DECoder: un dispositivo que
convierte señales entre análogo y digital. Ahora, el término parece estar relacionado
más con la COMPRESIÓN/DESCOMPRESIÓN.
Antes de que ahondemos en los CODEC individuales, en la tabla 2.2 se muestra una
referencia rápida de las características de los CODEC.
2.19.1. G.711
El G.711 es el CODEC fundamental de PSTN. De hecho, si alguien se refiere a PCM con
respecto a una red telefónica, le permiten pensar en G.711. Dos métodos de expansión
2.19 Codecs 136
son usados: Ley µ en Norteamérica y Ley A en el resto del mundo. El uno o el otro
entrega una palabra de 8 bits transmitida a 8.000 ciclos por segundo. Si se hacen las
matemáticas, se verá que este requiere que 64.000 bits sean transmitidos por segundo
(64kbps).
Muchas personas dirán que G.711 es un CODEC no compresor. Esto no es exactamente
verdadero, ya que la expansión es considerada una forma de compresión. Lo que es
verdadero es que G.711 es el CODEC base del cual todos los demás se derivan.
2.19.2. G.726
Este CODEC ha estado alrededor durante algún tiempo (solía ser G.721, que está ob-
soleto ahora), y es uno de los CODEC originales. También es conocido como Adaptable
Diferencial Pulse Code Modulation (APCM), y puede correr a varios bits por segun-
do. Las velocidades más comunes son 16 kbps, 24 kbps y 32 kbps. En este momento,
Asterisk provee sólo APCM-32, que es por mucho la velocidad más popular para este
CODEC.
El G.726 ofrece una calidad casi idéntica a G.711, pero usa sólo la mitad del ancho de
banda. Esto es posible porque lejos de enviar el resultado de la cuantificación, envía
sólo la información necesaria para describir la diferencia entre la corriente de bits actual
y la previa. El G.726 fracasó en los años 1990 debido a su inhabilidad de llevar señales
de módem y FAX, pero debido a su performance de ancho de banda y uso de CPU
hace ahora una reaparición. El G.726 es sobre todo atractivo porque no requiere mucho
trabajo computacional del sistema.
2.19.3. G.723.1
Para no confundirse con G.723 (que es otra versión obsoleta de APCM), este CODEC
fue diseñado para habla de baja tasa de bits. Tiene dos tasas: 5.3 kbps y 6.3 kbps.
G.723.1 es uno de los CODEC requeridos por su compatibilidad con H.323 (aunque otros
Codecs puedan ser empleados por H.323). Es actualmente obstaculizado por patentes
y requiere de licencia para ser usado en aplicaciones comerciales. Lo que significa que si
bien se puede conmutar dos llamadas G.723.1 por Asterisk, no se permiten decodificarlos
sin una licencia.
2.19 Codecs 137
2.19.4. G.729A
Considerando el poco ancho de banda que usa, G.729A entrega una calidad de sonido
impresionante. Esto se logra a partir del uso de Conjugate-Structure Algebraic-Code-
Excited Linear Prediction (CS-ACELP). A causa de las patentes, no se puede usar
G729A sin pagar una licencia; sin embargo, es muy popular y provisto en muchos
teléfonos y sistemas.
Para conseguir su impresionante radio de compresión, este codec requiere un igualmente
impresionante esfuerzo del CPU. En un sistema Asterisk, el uso de codecs pesados
atascará rápidamente el CPU.
El G.729A usa 8 kbps de ancho de banda.
2.19.5. GSM
GSM es el CODEC más querido por Asterisk. Este CODEC no viene estorbado por
una exigencia de licencia como G.723.1 y G.729A, y ofrece una excepcional performance
con respecto a la demanda de trabajo en el CPU. La calidad de sonido es generalmente
considerada de un grado menor que G.729A.
El GSM opera en 13 kbps.
2.19.6. iLBC
El CODEC de Internet Low Bitrate Codec (iLBC) proporciona una mezcla atractiva
de bajo ancho de banda baja y calidad, y brinda una calidad razonable en redes que
presentan vínculos débiles.
Naturalmente, Asterisk lo provee, pero no es tan popular como los CODEC ITU y así
puede no ser compatible con teléfonos IP comunes y sistemas de VoIP comerciales. Los
IETF RFCs 3951 y 3952 han sido publicados en apoyo a iLBC, e iLBC está en la lista
de estándares IETF.
Como iLBC usa algoritmos complejos para conseguir sus niveles altos de compresión,
tiene un uso bastante alto de CPU en Asterisk.
Mientras se permite usar iLBC sin pagar honorarios de derechos, el dueño de la patente
de iLBC, Global IP Sound (GIPS), quiere saber siempre cuando se lo usa en una
aplicación comercial. La forma de hacer esto es descargando e imprimiendo una copia
de la licencia de iLBC, firmando y devolviéndolo.
iLBC funciona en 13.3 kbps y 15.2 kbps.
2.19.7. Speex
Speex es un CODEC Variable BitRate (VBR), lo que significa que es capaz de diná-
micamente modificar su tasa para responder a las condiciones cambiantes de la red. Es
ofrecido en las versiones de banda estrecha y de banda ancha.
Speex puede funcionar en cualquier punto desde 2.15 a 22.4 kbps, debido a su tasa
variable.
2.20 Panorama de Asterisk 138
2.19.8. MP3
MP3 es un CODEC. Expresamente, es el Codificador de Audio 3 del Grupo de Expertos
de Imágenes en Movimiento. En Asterisk, el codec MP3 es típicamente usado para
música en espera MOH. MP3 es una optimización para música, no es un CODEC de
telefonía; sin embargo, es muy popular en sistemas de telefonía VoIP como un método
de entregar música en espera.
2.20.1. Desafíos
Como suele suceder con cualquier cosa que valga la pena, Asterisk debe enfrentar ciertos
desafíos, a continuación se discuten algunos de ellos.
Spam VoIP
Aunque parezca increíble pero es cierto. Siempre existirán personas que se creen con el
derecho de molestar a los demás en su afán de dinero. Existen fuertes esfuerzos para
evitar esta situación, pero solo el tiempo va a decir cuán eficaces resultan.
Ingeniería de bloqueo
Hay rumores que las mayores empresas de servicio de networking van a comenzar a
limitar artificialmente el trafico VoIP marcando y priorizando el tráfico de sus servicios
Premium VoIP y saboteando el tráfico VoIP de otros servicios no aprobados por ellos.
Algo de esto ya está teniendo lugar, con proveedores bloqueando tráfico de ciertos tipos
en sus redes. En los Estado Unidos, la Federal Communications Commission (FCC) ha
2.20 Panorama de Asterisk 139
puesto multas a compañías que propician dichas prácticas. En el resto del mundo, los
entes reguladores no siempre están tan abiertos a aceptar tráfico VoIP.
De cualquier manera, siempre existe la esperanza que la comunidad y la red van a
encontrar una manera para evitar los bloqueos, tal como sucede siempre.
QoS
Dado el principio de entrega con mayor esfuerzo de la Internet, basada en TCP-IP, aún
no está claro como impactará un tráfico creciente de VoIP en el funcionamiento global
de la red. Actualmente, hay todavía mucha capacidad excedente de ancho de banda en
los backbones de manera que la entrega con mejor esfuerzo funciona muy bien.
De cualquier manera, está probado que tan pronto se nos provee con más ancho de
banda en breve encontramos la manera de usarlo al límite de su capacidad. Hace cinco
años atrás una conexión DSL de un 1MB era algo soñado pero hoy parece apenas
satisfacer las necesidades.
Algunas personas dirán que el precio es la clave, pero la verdadera razón del éxito de
Asterisk es que es posible construir un sistema de telecomunicaciones de igual manera
que se construye un sitio Web: con total y absoluta personalización para cada faceta del
sistema. Los clientes lo han pedido por años y ahora Asterisk al fin provee la solución.
Asterisk puede usarse como un Puente entre una PBX tradicional y el futuro. Se puede
colocar Asterisk en frente de la PBX y usarlo como un portal (Gateway) e ir migrando
los clientes hacia Asterisk a medida que las necesidades lo requieren. También puede
usarse asterisk detrás de la PBX como un servidor periférico de aplicaciones. Es posible
incluso hacer las dos cosas como se muestra en la figura 2.11.
Las siguientes son algunas de las opciones que pueden usarse.
Mantener la vieja PBX pero evolucionar a IP
Las empresas han gastado vastas sumas de dinero comprando PBX y equipamiento y
ahora quieren una salida de esta jaula propietaria pero no quieren deshacerse de toda
esta tecnología. Esto no es un problema ya que Asterisk puede solucionar problemas
que van desde reemplazar el antiguo sistema de voicemail a proveer una manera de
agregar usuarios IP ampliando la capacidad nominal del sistema.
Encontrarme para seguirme
Con solo proveer a la PBX con una lista de números donde puede ser encontrado y se
llamará a todos cada vez que se llame al número de Direct Inward Dialing (DID). La
figura 2.12 ilustra ésta tecnología.
2.20 Panorama de Asterisk 140
Llamadas VoIP
Si se puede establecer una conexión desde la central Asterisk a la vieja PBX, entonces
Asterisk puede proveer acceso a servicios de VoIP, mientras que la vieja PBX continua
conectándose al mundo exterior como siempre lo hacía.
Asterisk, funcionando como un gateway solo necesita emular las funciones de la PSTN y
la PBX no sabrá distinguir que algo ha cambiado. La figura 2.13 muestra como Asterisk
puede ser usado para este propósito.
IVR
Muchas personas confunden el término de Respuesta Interactiva de Voz (Interactive
Voice Response, IVR) con Recepcionista Automatizado Auto Attendant (AA). Ya que
el sistema de AA fue la una de las primeras cosas para las que el IVR fue usado,
es comprensible que esta confusión persista. De cualquier manera, en la industria de
telecomunicaciones, el término de IVR representa mucho más que un AA. Este último
en general hace apenas algo más que presentar una manera de transferir llamadas hacia
los internos.
Un sistema de IVR es generalmente algo muy caro, no solo de comprar sino también de
configurar. Un sistema personalizado de IVR usualmente requiere conectividad a una
base de datos o una aplicación. Asterisk puede hacer esto perfectamente ya que posee
conectividad con base de datos y aplicaciones en sus más internos niveles.
3. Estudio descriptivo de las caracteristicas de una PyME
para establecer parámetros de diseño.
¿Qué tipo de cableado tiene el edificio? Descripción general de la red (Bus, Estrella)
¿Qué antigüedad tiene la instalación?
¿Qué tipo de cable es el que se ha utilizado?
¿Que placas de red poseen las PCs?
¿Qué equipos de red están dando el servicio? Son equipos configurables?
¿Que equipos han sido instalados por el proveedor del servicio de Banda Ancha?
¿Que velocidad a sido contratada para el servicio de Banda Ancha?
¿Cuál es la velocidad promedio a la que trabaja la red?
¿Se trabaja con algún tipo de servidor que brinde servicios específicos?
¿Se ha implementado algún mecanismo de seguridad en la red?
¿Cada puesto de trabajo tiene una PC?
Conexión a PSTN
El edificio presenta una topología de red tipo estrella, cableado con Unwired twisted
pair (UTP) categoría 5 y la instalación tiene una antigüedad de un año y medio.
Todos los puestos de trabajo poseen conectividad mediante placas de red 10-BaseT
y 100-BaseT de varios fabricantes (aproximadamente Catorce 100-BaseT y Tres 10-
BaseT).
El equipo de networking, es un Switch 3Com de capa dos, de la familia SuperStack 2
Dual Switch - Dual Speed Hub 500.(Se adjuntan especificaciones en apéndice ??).
El proveedor del servicio de banda ancha instaló un MODEM ADSL genérico no confi-
gurable. Para dar servicio a todos los puestos de trabajo se anexó un MODEM Tainet
CA81R, que realiza funciones de Router (NAT, DHCP, PROXY, FIREWALL).
La velocidad promedio a la que funciona la red de datos es 100 Mbps y la velocidad
contratada del servicio de internet es 1 Mega Byte (MB).
Las estaciones de trabajo tienen configuradas direcciones IP fijas.
3.3 Informe Relevamiento Técnico 146
A la red está conectado un Access Point para la gestión de las Notebooks. El mismo
brinda servicio Dinamic Host Configuration Protocol (DHCP) para cinco direcciones
IP.
Cada puesto de trabajo tiene una PC y cada dos puestos de trabajo hay un teléfono
(en promedio).
Conexión a PSTN
C. Los 0-800s no están restringidos (se utilizan para los servicios de Hewlett-Packard
(HP))
D. Total restricción para 0-600s.
E. 2 internos con salida internacional.
F. NO HAY INFORMES DE UTILIZACIÓN
La central permite ocho comunicaciones simultáneas entre internos y presenta facilida-
des para la ampliación y mantenimiento. Sin embargo, en este momento está funcio-
nando al límite de capacidad.
3.3.2. Costos
Telefonía: Entre $1300 y $1500 por mes
Internet: $316 (entre Internet y Sitio Web)
Se realiza mantenimiento reactivo de la Central Telefónica y no se realiza mantenimiento
de la red de datos.
4.1.2. Hardware
La instalación del hardware y su ubicación se recomienda que siga los conceptos indi-
cados anteriormente sobre puesta a tierra, ambiente, etc.
A continuación se listan los elementos de hardware para dar soporte al servidor Asterisk:
Placa zaptel TDM400P para dar soporte a las 4 líneas FXO
(www.digium.com/en/products/hardware/tdm400p.php)
Servidor: Procesador Pentium 4 3.0Ghz HT, 1GB RAM, HD 80G, Mot-
her Board ASUS 775 P5V800-MX
4.1 Diseño de una solución de VoIP 151
4.1.3. Software
La instalación de Asterisk se efectúa como se indicó en la respectiva sección de este
trabajo, utilizando el sistema operativo Linux distribución Debian (kernel 2.6), usando
los archivos de configuración extensions.conf y sip.conf, como se detalla más adelante,
para manejar los internos y el IVR.
La configuración de los clientes ya ha sido consignada previamente y se deberá proceder
acorde a la misma. En la configuración propuesta se han estructurado los internos y
privilegios para los mismos de la siguiente manera:
Cuatro internos de ventas, cuatro de administración y uno de operadora que sólo pueden
efectuar llamadas locales y llamadas al soporte técnico oficial de HP (0800).Los demás
internos pueden recibir llamadas desde las líneas externas sin poder realizarlas, pero si
tienen capacidad de derivar llamadas entre internos.
Cuatro internos de gerencia que tienen acceso directo a la línea de salida presionando
el número 9. Es decir, pueden efectuar cualquier llamada.
Los internos comienzan en 8000 y terminan en 8016.
Todos los internos pueden comunicarse mutuamente simplemente discando el número
correspondiente.
Todos los internos tienen disponibles sus respectivas casillas de voicemail para dejar
mensajes en caso de no estar disponibles. Para poder acceder a las casillas de voicemail
se ha configurado el interno 8080. Se debe ingresar el número de interno y contraseña
(1234 por defecto) para autenticarse.
Por otra parte, de las cuatro líneas externas, sólo se hace uso de tres de ellas para
llamadas interno-externo, de manera tal que siempre quede una línea disponible para
las comunicaciones entrantes a la empresa (externo-interno).
Además se encuentra habilitado el número de llamadas emergencia para que todos los
internos puedan acceder a éste directamente.
A continuación exponemos los archivos, en cada línea se comenta la utilidad de cada
comando.
4.1 Diseño de una solución de VoIP 152
sip.conf
[general]
;
context=default
srvlookup=yes
;
;
;INTERNOS: 1 operadora, 4 de ventas, 4 de administración,
; 4 de gerencia y 4 de servicio técnico
;
[8000]
;
;Interno de operadora
;
type=friend
secret=operadora
context=internal ; El contexto internal controla lo que se puede hacer
nat=no ; Este teléfono no está detrás de un NAT
host=dynamic ; Este dispositivo se registra con nosotros
qualify=yes ; par calificado si no está a mas de 2000ms de distancia
canreinvite=no ; Asterisk por defecto trata de redireccionar
;
;-------------------------> Ventas
;
[8001]
;
type=friend
secret=8001
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8002]
;
type=friend
secret=8002
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8003]
;
type=friend
secret=8003
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8004]
;
type=friend
secret=8004
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
;-------------------------> Administración
;
[8005]
;
type=friend
secret=8005
context=internal
nat=no
host=dynamic
4.1 Diseño de una solución de VoIP 153
qualify=yes
canreinvite=no
;
[8006]
;
type=friend
secret=8006
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8007]
;
type=friend
secret=8007
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8009]
;
type=friend
secret=8009
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
;-------------------------> Gerencia
;
[8008]
;
type=friend
secret=8008
context=internalgerencia ; el contexto de gerencia tiene mayores privilegios
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8010]
;
type=friend
secret=8010
context=internalgerencia
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8011]
;
type=friend
secret=8011
context=internalgerencia
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8012]
;
type=friend
secret=8012
context=internalgerencia
nat=no
host=dynamic
qualify=yes
canreinvite=no
4.1 Diseño de una solución de VoIP 154
;
;-------------------------> Soporte técnico
;
[8013]
;
type=friend
secret=8013
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8014]
;
type=friend
secret=8014
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8015]
;
type=friend
secret=8015
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
;
[8016]
;
type=friend
secret=8016
context=internal
nat=no
host=dynamic
qualify=yes
canreinvite=no
extensions.conf
[globals]
;variables globales
NUMEROMARCADO=0
NUMVOICEMAIL=8080
OPERADORA=8000
SIPVENTAS=SIP/8001&SIP/8002&SIP/8003&SIP/8004
SIPADMINISTRACION=SIP/8005&SIP/8006&SIP/8007&SIP/8009
SIPTECNICO=SIP/8013&SIP/8014&SIP/8015&SIP/8016
CANALESDESALIDA=ZAP/1&ZAP/2&ZAP/3
;
LOCALACBA=_9[45]XXXXXX
EMERGENCIA=911
SOPORTETECNICO=_90800XXXXXX
;
[default]
;
[internal]
;
;los internos normales usan este contexto
;
include => checkvoicemail ;extension para acceder a los voicemail
include => internoainterno ;extension para manejar llamadas entre internos
;
exten => ${LOCALACBA},1,SetVar(NUMEROMARCADO=${EXTEN});carga variable para usarla en context llamadas ext.
exten => ${LOCALACBA},2,GoTo(internoexternonormal,s,1) ;lo lleva al contexto para manejar llamadas locales
exten => ${EMERGENCIA},1,Dial(${CANALESDESALIDA}/${EMERGENCIA}) ;llamadas de emergencia
exten => ${EMERGENCIA},2,Hangup()
exten => ${EMERGENCIA},102,Playback(personal-nohaylineas)
4.1 Diseño de una solución de VoIP 155
voicemail.conf
[general]
; Default formats for writing Voicemail
;format=g723sf|wav49|wav
format=wav49|gsm|wav
; Maximum length of a voicemail message in seconds
;maxmessage=180
4.1 Diseño de una solución de VoIP 157
zapata.conf
;
; Zapata telephony interface
;
; Configuration file
[channels]
;
; Default language
;
language=es
;
; Default context
;
context=externointerno
;
; Signalling method (default is fxs). Valid values:
; em: E & M
; em_w: E & M Wink
; featd: Feature Group D (The fake, Adtran style, DTMF)
; featdmf: Feature Group D (The real thing, MF (domestic, US))
; featb: Feature Group B (MF (domestic, US))
; fxs_ls: FXS (Loop Start)
; fxs_gs: FXS (Ground Start)
; fxs_ks: FXS (Kewl Start)
; fxo_ls: FXO (Loop Start)
; fxo_gs: FXO (Ground Start)
; fxo_ks: FXO (Kewl Start)
; pri_cpe: PRI signalling, CPE side
; pri_net: PRI signalling, Network side
; gr303fxoks_net: GR-303 Signalling, FXO Loopstart, Network side
; gr303fxsks_cpe: GR-303 Signalling, FXS Loopstart, CPE side
; sf: SF (Inband Tone) Signalling
; sf_w: SF Wink
; sf_featd: SF Feature Group D (The fake, Adtran style, DTMF)
; sf_featdmf: SF Feature Group D (The real thing, MF (domestic, US))
; sf_featb: SF Feature Group B (MF (domestic, US))
; The following are used for Radio interfaces:
; fxs_rx: Receive audio/COR on an FXS kewlstart interface (FXO at the channel bank)
; fxs_tx: Transmit audio/PTT on an FXS loopstart interface (FXO at the channel bank)
; fxo_rx: Receive audio/COR on an FXO loopstart interface (FXS at the channel bank)
; fxo_tx: Transmit audio/PTT on an FXO groundstart interface (FXS at the channel bank)
; em_rx: Receive audio/COR on an E&M interface (1-way)
4.1 Diseño de una solución de VoIP 158
; shouldn’t be.
;
;relaxdtmf=yes
;
; You may also set the default receive and transmit gains (in dB)
;
rxgain=0.0
txgain=0.0
;
; Logical groups can be assigned to allow outgoing rollover. Groups
; range from 0 to 31, and multiple groups can be specified.
;
group=1
;
; Ring groups (a.k.a. call groups) and pickup groups. If a phone is ringing
; and it is a member of a group which is one of your pickup groups, then
; you can answer it by picking up and dialing *8#. For simple offices, just
; make these both the same
;
callgroup=1
pickupgroup=1
;
; Specify whether the channel should be answered immediately or
; if the simple switch should provide dialtone, read digits, etc.
;
immediate=no
;
; On trunk interfaces (FXS) and E&M interfaces (E&M, Wink, Feature Group D
; etc, it can be useful to perform busy detection either in an effort to
; detect hangup or for detecting busies
;
busydetect=yes
;
; If busydetect is enabled, is also possible to specify how many
; busy tones to wait before hanging up. The default is 4, but
; better results can be achieved if set to 6 or even 8. Mind that
; higher the number, more time is needed to hangup a channel, but
; lower is probability to get random hangups
;
busycount=6
;
channel => 1
zaptel.conf
fxsks=1-4
loadzone=ar
defaultzone=us
Las llamadas entre internos y las llamadas locales desde una PBX lejana, solo depen-
derán de una conexión a internet con el suficiente ancho de banda para poder cursar
las mismas con una calidad de servicio satisfactoria.
Por supuesto que se puede utilizar SIP o H.323 (no así MGCP) para interconectar dos
servidores Asterisk, sin embargo realizar esto con IAX es, no solo lo más común sino
también lo más correcto y eficiente.
A su vez, para compartir un Dial Plan se puede realizar lo siguiente:
Diseñar inteligentemente el Dial Plan en cada servidor para que quede bien claro
cuando una extensión en el otro servidor está siendo llamada, por ejemplo usando
3xxx para el servidor A, 4xxx para el servidor B y 5xxx para las extensiones en
el servidor C.
Usar el comando switch para hacer que el servidor A realice consultas locales en
el servidor B sobre las extensiones desconocidas (ambos servidores deberán estar
permanentemente conectados).
Utilizar el Distributed Universal Number Discovery (DUNDi).
A continuación, se presenta una descripción general del archivo de configuración iax.conf,
y luego se presentarán algunos ejemplos prácticos de interconexión de servidores Aste-
risk.
4.2.2. IAX
El archivo de configuración iax.conf contiene toda la información de configuración que
necesita Asterisk para crear y manejar canales IAX. Las secciones en el archivo están
separadas por encabezados, que están formados por una palabra entre corchetes. El
nombre entre corchetes será el nombre del canal, con una notable excepción: la sección
[general], que no es un canal, sino el área donde los parámetros de protocolo globales
son definidos.
La primera línea en el archivo iax.conf deberá ser el encabezado [general]. Los pa-
rámetros en esta sección se aplicarán a todas las conexiones que utilicen este protocolo,
a menos que sean definidos de una forma diferente particularmente en la definición de
un canal específico. Si se definen los parámetros de un canal bajo la sección [general],
no se necesitará definirlos en cada canal; su valor pasa a ser el valor por defecto.
Aquí se enlistan los parámetros que se podrán configurar. Como algunos de estos pará-
metros pueden ser redefinidos en cada canal en particular, se identificarán aquellos que
son globales con la marca (global) y aquellos que opcionalmente pueden modificarse
con la marca (channel):
Accountcode(channel)
El código de cuenta puede definirse en un par - usuario básico. Si está definido, este
código de cuenta será asignado a un registro de llamadas siempre que no se especifique
ningún código de cuenta de usuario. El nombre de accountcode configurado será utiliza-
do como nombredelarchivo.csv en el directorio /var/log/Asterisk/cdr-csv/ para
almacenar CDRs para el usuario/par/amigo.
4.2 Interconexión Asterisk 161
accountcode=iax-username
allow y disallow(channel)
Codecs específicos pueden permitirse o rechazarse, limitando los mismos a aquellos
preferidos por el diseñador del sistema. Allow y disallow pueden ser definidos en un
canal par básico. Hay que tener en cuenta que utilizar el comando allow en la sección
[general] afectará a todos los canales que se definan posteriormente, a menos que se
resetee mediante disallow-all. La negociación de los codecs se realizará en el orden
en que han sido definidos. Las mejores prácticas sugieren que se defina disallow-all,
seguido de una declaración allow explícita para cada codec que se desee utilizar. Si no
se define nada, se asume allow-all (todos permitidos).
disallow=all
allow=ulaw
allow=gsm
allow=ilbc
amaflags(channel)
A partir de este parámetro, se podrá especificar que mecanismo estándar de generación
y transmisión de CDRs se utilizará. Para esto, se podrá elegir una de cuatro opciones
aplicables a todas las conexiones IAX.
amaflags=default|omit|billing|documentation
authdebug(global)
Se podrá minimizar la cantidad de depuración de autorización simplemente deshabili-
tándola. Esta estará habilitada si no se realiza la deshabilitación explícitamente.
authdebug=no
autokill (global)
Para minimizar el peligro de parar cuando un host es inalcanzable, se puede setear
autokill a si para especificar que cualquier conexión nueva deberá ser dada de baja
si un mensaje Acknowledge (ACK) no es recibido en 2.000 ms. Alternativamente, se
puede reemplazar si con el número de milisegundos a esperar antes de considerar un
par inalcanzable. autokill configura el tiempo de espera para todos los pares IAX2, pero
se puede configurar para cada par individualmente mediante la utilización del comando
qualify.
autokill=1500
underlinebandwidth (channel)
bandwidth es un atajo que permitirá no tener que usar disallow-all y luego habilitar
cada CODEC específico mediante declaraciones allow. Las opciones son las siguientes:
high: permite todos los codecs (G.723.1, GSM, ulaw, alaw, G.726, ADPCM, sli-
near, LPC10, G.729, Speex, iLBC).
medium: permite todos los codecs excepto slinear, ley µ, y ley A.
low: permite todos los codecs médium excepto G.726 y ADPCM.
bandwidth=low|medium|high
bindport y bindaddr(global)
4.2 Interconexión Asterisk 162
El buffer de jitter afecta solo los datos recibidos en el extremo final de la comunicación.
Cualquier corriente de datos que se transmita no se verá afectado por el buffer de jitter
del emisor, y el extremo receptor será el responsable de solucionar esta variación de
jitter de sus conexiones entrantes.
El buffer de jitter se habilita seteando el parámetro en yes.
jitterbuffer=yes|no
language(channel)
Este parámetro setea el lenguaje que se desee. El lenguaje global por defecto es el
inglés. El lenguaje seteado es enviado por el canal como un elemento de información.
Es también utilizado por aplicaciones como SayNumber() que tiene diferentes archivos
para cada lenguaje. Hay que tener en cuenta que los demás idiomas no estarán instalados
en el sistema, y quedará en manos de cada diseñador configurar el mismo para utilizar
el lenguaje de preferencia.
language=en
mailboxdetail(global)
Si este parámetro es seteado en yes, una cuenta de mensajes es enviada al usuario, en
vez de una simple declaración de si un nuevo o viejo mensaje existe.
mailboxdetail=yes
maxjitterbuffer(channel)
Este parámetro es utilizado para establecer el máximo tamaño del buffer de jitter, en
milisegundos. Hay que asegurar que el buffer no sea demasiado grande, ya que esto
deriva en una mayor latencia.
maxjitterbuffer=500
regcontext y regexten(channel)
Especificando el contexto que contiene las acciones a ejecutar, se puede configurar las
acciones que Asterisk deberá ejecutar cuando un par se registra con el servidor. Esta
opción trabaja en conjunto con el parámetro regexten, que especifica la extensión a
ejecutar. Si no se configurar regexten, el nombre del par es utilizado como extensión.
regcontext=registered-phones
regexten=myphone
resyncthreshold(channel)
El umbral de resincronización es usado para resincronizar el buffer de jitter si se ha
detectado un cambio significante sobre algunos frames. Este umbral es definido como
el jitter medido más el valor de resincronización, en milisegundos.
resyncthreshold=1000
tos(global)
Asterisk puede establecer los bits de Type of Service (TOS) en el encabezado IP para
ayudar a mejorar la perfonmance en los routers que respetan los bits de TOS en su
cálculo de rutas. Los siguientes valores son los utilizados:
lowdelay: minimiza el retardo.
throughput: minimiza el throughput.
reliability: maximiza la fiabilidad.
4.2 Interconexión Asterisk 164
El comando register
Cuando la IP del par es desconocida (ya sea porque tiene asignada su IP automáti-
camente o porque se encuentra detrás de un NAT), el usuario no tiene donde enviar
la llamada. Para compensar esto, el par activamente se registra con el usuario para
proveerle su identidad y ubicación.
En el par, dentro de la sección [general] del archivo iax.conf, se deberá añadir una
línea de registro:
register => user:[email protected]
Esto continuamente actualiza información para el usuario, y de esta forma siempre
podrá alcanzar al par por más que la IP de este último cambie.
El comando register es necesario solo cuando se desea conectar un servidor con una
dirección IP dinámica, a otro con una IP fija. Por lo tanto, en el usuario siempre deberá
estar definido host=dynamic, en la parte del archivo iax.conf correspondiente al par.
Con los ajustes generales definidos, ahora se podrá definir los canales. Definir un canal
invitado (canal guest ) se recomienda en el caso que se desee recibir llamadas IAX
anónimas. Para esto se deberá configurar lo siguiente:
[guest]
type=user
context=incoming
callerid="Incoming IAX Guest"
Si se desea aceptar llamadas desde la Red Mundial Dialup Libre, Asterisk contiene
una llave de seguridad predefinida que asegura que las conexiones anónimas no podrán
burlar una llamada entrante de esta Red. Para esto se deberá configurar un canal
iax-fwd:
4.2 Interconexión Asterisk 165
[iaxfwd]
type=user
context=incoming
auth=rsa
inkeys=freeworlddialup
Si se anuncian recursos en una red DUNDi, el usuario asociado deberá ser declarado
en el archivo iax.conf:
[dundi]
type=user
dbsecret=dundi/secret
context=dundi-incoming
[user]
type=user
context=local_users
auth=md5,plaintext,rsa
secret=wasabi
notransfer=yes
jitterbuffer=yes
callerid="Happy Tempura" <(800) 555-1234>
accountcode=seaweed
deny=0.0.0.0/0.0.0.0
permit=192.168.1.100/255.255.255.0
language=en
Las llamadas entrantes desde este canal llegarán al contexto local_user y requerirán al
sistema que acepte código de llamador (caller ID)"Happy Tempura"<(800) 555-1234>.
El sistema estará dispuesto a aceptar autentificación MD5, de texto plano o RSA desde
este usuario, mientras que se proporciona la contraseña wasabi y la llamada se recibe
de la dirección IP 192.168.1.100. A todas las llamadas relacionadas con este canal se
le asignará el código de cuenta seaweed. Como se definió notransfer, las corrientes de
datos enviadas siempre pasarán a través de Asterisk; no podrán ser redireccionadas a
otro nodo IAX.
Si se desea configurar el propio sistema como un nodo remoto, y se desea conectarse a
otro nodo remoto que figura como usuario, se deberá definir el nodo propio como un
par:
[peer]
type=peer
username=sushi
secret=wasabi
host=192.168.1.101
qualify=yes
trunk=yes
4.2 Interconexión Asterisk 166
Un par puede referenciarse en un Dial Plan con el nombre colocado entre corchetes
pero autentificarse con un nombre de usuario diferente. El host se especifica tanto
por dirección IP o mediante FQDN. Se puede determinar la latencia entre el par y el
host remoto, siempre que el par este activo, mediante qualify=yes. Para minimizar la
cantidad de sobreencabezado por llamadas múltiples a un mismo par, se pueden truncar
las mismas.
El trunking es único de IAX y está diseñado para tomar ventaja del hecho de que dos
sitios pueden tener múltiples conexiones de VoIP entre ellos. El trunking IAX reduce en
sobreencabezado cargando varios canales en un solo paquete de señalización. Se puede
habilitar el mismo colocando trunk=yes en iax.conf.
Se muestra un canal en la figura 4.2 con trunk deshabilitado y luego en la figura 4.3
con esta opción habilitada.
Parámetros específicos de los canales
A continuación se especifican los parámetros específicos de los canales IAX:
callerid
Se puede setear una sugerencia de identificación de llamador tanto para un usuario
como para un par mediante callerid. Si se define el campo Caller ID para un usuario,
cualquier llamada que arribe a ese canal tendrá la identificación asignada a él. Si se
define este campo para un par, se está requiriendo que el extremo lejano que utilice
esa identificación (pero no se tendrá ninguna seguridad de que se aplique). Si se desea
que los usuarios entrantes definan su propia identificación, hay que asegurarse que no
se configure el campo callerid.
callerid=Juan Martín <(800) 555-1234>
defaultip
Este parámetro complementa la acción de especificar host=dynamic. Si un host no está
aún registrado con el servidor, el sistema intentará enviar mensajes a la dirección IP
por defecto configurada aquí.
defaultip=192.168.1.101
inkeys
Se puede utilizar esta opción para autentificar a un usuario mediante el uso de una
clave RSA. Para asociar más de una clave con la definición de un canal de usuario, se
4.2 Interconexión Asterisk 167
deberá separar los nombres claves por dos punto ( : ). Cualquiera de esas claves serán
necesarias para validar una determinada conexión. inkey es la clave pública que podrá
distribuirse entre los diferentes usuarios.
inkeys=server_one:server_two
mailbox
Si se asocia un mailbox con un par dentro de la definición de un canal, un voicemail
enviará un Message Waiting Indication (MWI) a los nodos extremos de ese canal. Si el
número de mailbox de un voicemail se encuentra en otro contexto que el default, se
podrá especificar mediante mailbox@contexto. Para asociar múltiples mailbox con un
par, se deberán utilizar múltiples declaraciones mailbox.
mailbox=1000@internal
outkey
Se puede utilizar esta opción para autentificar un par mediante el uso de una clave
RSA. Solo una clave podrá utilizarse para una autentificación saliente.
outkey=private_key
qualify
Se pude setear este parámetro en yes, no o un tiempo en milisegundos. Si optamos por
la primera opción, mensajes PING serán enviados periódicamente a los pares remotos
para determinar tanto si están activos como la latencia entre las respuestas. Los pares
contestarán con mensajes PONG. Un par se determinará inalcanzable si no se recibe
una respuesta en 2.000 milisegundos (para cambiar este valor por defecto, se deberá
especificar el tiempo de espera de una respuesta).
qualify=yes|no|1500
Una conexión IAX entre dos servidores Asterisk se realiza en varias instancias:
Configurar servidores Asterisk en ambos entremos en el archivo de configuración
iax.conf, uno como par y otro como usuario.
Colocar el Dial Plan del usuario en el archivo extensions.conf, para que de esta
forma se puedan realizar llamadas desde el usuario hacia el par.
Opcionalmente se podrá registrar el par con el usuario, ya que la dirección IP del
par es dinámica y por lo tanto desconocida por el usuario.
Repetir los pasos anteriores en la dirección opuesta, intercambiando par por usua-
rio, y así permitir las llamadas en ambas direcciones.
[username]
type=user
4.2 Interconexión Asterisk 168
auth=md5
secret=contraseña
context=iax2users
El contexto es importante ya que indica el contexto local donde se deberán colocar las
llamadas entrantes de ese usuario.
Esta configuración deja el usuario remoto registrado en el sistema desde cualquier host.
Si se desea restringir con que dirección IP o host el usuario remoto puede comunicarse,
se deberán añadir los comandos permit o deny cuando se describe al usuario en el
archivo iax.conf del par.
[peername]
type=peer
host=hostname.domain.tld
(o "dynamic" que luego requerirá el comando "register" en el par)
auth=md5
secret=contraseña
username=username-at-the-peer
Notesé que:
- type=user es para autentificar una llamada entrante
- type=peer es alguien a quien se llama
- type=friend por supuesto, realiza las dos funciones
Ahora que los dos primeros pasos han sido realizados, lo único que resta hacer es
incluir estas funciones en el Dial Plan. Para esto, se describirán ejemplos prácticos que
mostrarán varias formas de lograrlo.
extensions.conf:
Este ejemplo utiliza SIP como reserva, en caso que ocurran problemas con la conexión
IAX.
4.2 Interconexión Asterisk 169
Ejemplo 2
Server A iax.conf
[general]
register => <username>:<password>@<serverB hostname or IP>
[serverB]
type=friend
user=<username>
secret=<password>
host=<serverB hostname or IP>
Server A extensions.conf
Server B iax.conf
[serverA]
type=friend
user=<username>
secret=<password>
host=<dynamic> | <serverA hostname or IP>
Server B extensions.conf
Ejemplo 3
[default]
exten => _801XXX,1,Goto,srvA|${EXTEN}|1
exten => _802XXX,1,Goto,srvB|${EXTEN}|1
[srvA]
exten => _801XXX,1,StripMSD,3
exten => _XXX,2,Goto,1
switch => IAX/serverA
[srvB]
exten => _802XXX,1,StripMSD,3
exten => _XXX,2,Goto,1
switch => IAX/serverB
4.2 Interconexión Asterisk 170
Ejemplo 4
[outbound]
switch => IAX2/master:[email protected]/outbound
[slave]
type=user
auth=plaintext
context=outbound
context=outbound2
secret=secret
host=dynamic
callerid="slave"
trunk=yes
notransfer=yes
[slave]
type=peer
auth=plaintext
context=outbound-nuphone
secret=secret
host=dynamic
trunk=yes
notransfer=yes
4.2.4. DUNDi
DUNDi es un sistema peer to peer para localizar puertas de enlaces desde internet
hacia servicios de telefonía. Es un sistema totalmente distribuido sin la presencia de
una autoridad centralizada.
4.2 Interconexión Asterisk 171
DUNDi es como un gran guía de teléfonos que permite que se pregunte a diferentes
pares si conocen una ruta de VoIP alternativa hacia un número de extensión o número
telefónico de la PSTN.
Este sistema ejecuta las consultas dinámicamente, bien mediante el comando switch
en el archivo extension.conf, o mediante el uso de la aplicación DUNDiLookup(). Sin
embargo DUNDi está disponible solo para Asterisk 1.2 o una versión mayor.
Se puede utilizar también el protocolo DUNDi en una red privada, permitiendo que
múltiples servidores Asterisk (ubicados en cada sucursal de una empresa por ejemplo,
e interconectados entre ellos) puedan ejecutar consultas dinámicas sobre la dirección
VoIP de una extensión particular en la red.
Conclusión
5. Conclusión final
Una vez obtenido nuestro potencial cliente y efectuadas las diversas entrevistas para
realizar el relevamiento técnico, se pudo detectar que para los tiempos prácticos de
las empresas, un buen comienzo y una solución real era resolver de manera puntual
los problemas de su sistema de comunicación que representaban pérdida de tiempo y
dinero para la misma.
Con este enfoque la solución de Asterisk quedó acotada y permitió que los plazos
de diseño fueran razonables y útiles. Sin embargo, a partir de aquí se podrán ir
incorporando aplicaciones adicionales, como por ejemplo interconexión entre las
sucursales de la empresa usando el protocolo IAX para interconectar servidores
Asterisk, como se explicó en el presente trabajo.
Durante la instalación y configuración de Asterisk para realizar el presente dise-
ño surgieron algunas apreciaciones en cuanto a este sistema como una solución
de comunicaciones; diseñar una PBX Asterisk no resulta una tarea trivial y lleva
bastante tiempo internalizar los conceptos referentes al funcionamiento, manejo
de los dial plans, archivos de configuración y demás. Aunque una vez que esto se
ha logrado, queda confirmada la versatilidad y el dinamismo que imprime a las
soluciones de comunicación posibles, permitiendo que el desarrollador pueda con-
jugar sus conocimientos y creatividad para atacar los problemas y requerimientos
de una empresa.
Desde el punto de vista de un emprendimiento de telecomunicaciones, los costos
de una implementacion Asterisk respecto de una central tradicional caen en de-
pendencia directa respecto de las aplicaciónes que la empresa requiera: Asterisk
realmente se convierte en una solución rentable cuando la empresa explota sus
diversas posibilidades de base de datos, interconexión de PBX, manejo de CDR,
IVR totalmente personalizable, uso de comunicaciones VoIP, entre otros.
Ofrecer una solución VoIP basada en Asterisk representa un mayor desafío para
el emprendedor debido a que lo convierte a uno en un desarrollador propiamen-
te dicho y no en un simple revendedor de tecnología propietaria. Esto es así ya
que se deberá, no solo proporcionar el equipamiento, sino además generar la im-
plementación que brinde la solución a un conjunto de necesidades específicas del
cliente.
A partir de este diseño, quedaría para una futura investigación analizar los rendimientos
de ancho de banda para manejar comunicaciones multimedia utilizando distintos codecs
para los diversos tipos de canales. También sería de gran utilidad medir la robustez de
una instalación específica, atancando el servidor con conexiones para comprobar su
tolerancia y respuesta frente a múltiples llamadas.
Apéndice
A. Acrónimos y siglas
AA Auto Attendant
ACK Acknowledge
ADSI Analog Display Services Interface
ADSL Asincronic Digital
AGI
APCM Adaptable Diferencial Pulse Code Modulation
ATA Analog Telephone Adaptor
BIOS
BRI Basic Rate Interfase
CAC Carrier Access Corporation
CBR Constant Bit Rate
CDR Call Detail Recorder
CLI Command-Line Interface
CO Central Office
CODEC COder/DECoder
CPU Central Processor Unit
CS-ACELP Conjugate-Structure Algebraic-Code-Excited Linear Prediction
[1] Bezama, Eric Báez.2006 -Ventajas del Software GNU frente a otro tipo de sotfware- Software
Libre Chile (www.softwarelibre.cl).
[2] Cambronero,David Fernández, Eberhard Zangger.2005 -Voz sobre IP, la revolución de las
redes telefónicas- Novatika Upgrade.
[3] Gagliardi, Alejo.2006 -Asterisk configuración e implementación- NexIT Specialist no 22.
[4] García, Rafael Achaerandio.2005 -Oportunidades de negocio y nuevos servicios y aplicaciones
en las redes del futuro- IDC España.