libro asterisk 1.8.x - version 1.2

646
Asterisk 1.8.X v. 1.2 “Las comunicaciones del presente” CentOS 6.4 Asterisk 1.8.20.1 Marzo 2013 By VozToVoice www.voztovoice.org

Upload: juan-pedro-hernandez-poemape

Post on 13-Oct-2015

341 views

Category:

Documents


36 download

TRANSCRIPT

  • Asterisk 1.8.X v. 1.2Las comunicaciones del presente

    CentOS 6.4Asterisk 1.8.20.1

    Marzo 2013

    By VozToVoicewww.voztovoice.org

  • Convenciones tipogrficas.

    Negrita = comandos que el usuario tiene que teclear en la consola de Linux

    NegritaCursiva: Lineas que hay que aadir/modificar en los archivos de configuracin

    Nombreprograma = Indica el nombre de un programa o librera

    Cursiva: respuesta del servidor Linux a los comandos enviados

    CLI> indica que se est trabajando en la consola de Asterisk

    mysql> indica que se est trabajando en la consola del cliente MySQL

    Si encuentran alguna incorreccin o errata pueden escribir al autor:

    [email protected]

    i

  • Este documento se publica bajo la GNU Free Documentation License, versin 1.3 o sucesivas, publicadas por la Free Software Foundation. Est permitido copiar, distribuir y/o modificar este documento bajo los trminos indicados en la licencia. Una copia integral de la licencia es presente en la apndice H de este libro.

    Copyright (C) 2012-2016 Andrea Sannucci Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

    ii

  • INDICE

    Capitulo I - Instalacin de Asterisk .......................................................................................... 1

    1.1 Preparacin del VPS Linode 11.2 SSH y clave RSA 7

    1.2.1 Clave RSA en Windows 71.2.2 Clave RSA en Linux 101.2.3 Configuracin servidor SSH 12

    1.3 Utilidades, libreras, dependencias 151.4 DAHDI 181.5 LibPRI 201.6 Res_fax, GoogleTalk, LibiCAL y SRTP 211.7 Instalacin de Asterisk 27

    Capitulo II - Configuracin inicial de Asterisk ......................................................................... 36

    2.1 Instalar y configurar un cortafuego 362.2 Carpetas y archivos 392.3 asterisk.conf 412.4 modules.conf 432.5 Msica en espera y MP3 452.6 El comando asterisk 482.7 Preparacin del dialplan extensions.conf 50

    Capitulo III Protocolo SIP y archivo sip.conf.......................................................................... 56

    3.1 sip.conf 583.2 Directmedia 723.3 Contraseas seguras 743.4 Ngrep 743.5 SoftPhone X-Lite y REGISTER 753.6 Softphone 3CX 803.7 Llamadas entre extensiones 823.8 SIP INVITE y CANCEL 833.9 Los codecs 86

    3.9.1 Negociacin de codecs en Asterisk 89

    Capitulo IV Protocolo IAX2 iax.conf ................................................................................. 93

    4.1 iax.conf 934.2 Softphone Zoiper 98

    iii

  • Capitulo V - GoogleTalk gtalk.conf jabber.conf................................................................... 104

    5.1 jabber.conf y gtalk.conf 1055.2 Google Voice 1125.3 Aplicacin JabberSend 1135.4 La funcin JABBER_RECEIVE 114

    Capitulo VI - Asterisk y la red PSTN........................................................................................ 117

    6.1 Tarjeta Digium TDM410 con 4 puertos FXO 118 6.1.1 OSLEC 122

    6.2 Tarjeta Digium TDM410 con 2 puertos FXS 1266.3 Tarjeta Digium TE120P 1286.4 Wanpipe 1336.5 DAHDI_GENCONF 1356.6 Linksys SPA3102 Gateway FXO/FXS 135

    Capitulo VII - Dialplan Configuracin avanzada.................................................................. 146

    7.1 Las Variables 146 7.2 Pattern Matching 1497.3 La aplicacin Echo 1507.4 El contexto Subscribe 1517.5 Las Macro 1557.6 Autenticar las Llamadas Salientes con la aplicacin Authenticate 1587.7 Limitar llamadas salientes: funciones GROUP y GROUP_COUNT 161

    Capitulo VIII - IVR ................................................................................................................. 169

    8.1 Grabacin de las locuciones 1698.2 Configuracin numero geogrfico 1718.3 Creacin del IVR 1728.4 IVR Clsico 1768.5 Horario Apertura/Cierre 177

    Capitulo IX - Funcionalidades avanzadas de Asterisk features.conf ................................... 183

    9.1 features.conf 1839.2 Callgroup y Pickupgroup 1939.3 Aplicacin Dial y features.conf 1959.4 Las aplicaciones Park y ParkAndAnnounce 2009.5 La aplicacin FollowMe (Sgueme) 203

    iv

  • Capitulo X - Asterisk y los calendarios .................................................................................. 211

    10.1 calendar.conf 21210.2 CALENDAR_BUSY 22210.3 CALENDAR_EVENT 22410.4 CALENDAR_QUERY y CALENDAR_QUERY_RESULT 22610.5 CALENDAR_WRITE 22810.6 Enviar las notificaciones de los calendarios a nmeros fijos/celulares 233

    Capitulo XI - CCSS (Call Completion Supplementary System) Rellamada ................... 236

    11.1 Configuracin del CCSS 23611.2 CCSS 1 Prueba 23911.3 CCSS 2 Prueba 24011.4 CCSS 3 Prueba 241

    Capitulo XII Asterisk Realtime............................................................................................... 244

    12.1 Realtime esttico 24412.2 Realtime dinmico 251

    12.2.1 Extensiones SIP en Realtime 25112.2.2 Extensiones IAX en Realtime 26012.2.3 Dialplan en Realtime dinmico 264

    Capitulo XIII IVR avanzados func_odbc.conf ........... ....................................................... 269

    13.1 Empleados 26913.2 Encuesta 27413.3 Bolsa de minutos 27613.4 Consultas con respuestas mltiples 278

    Capitulo XIV - Buzn de voz voicemail.conf........................................................................ 282

    14.1 voicemail.conf 28214.2 Mensajes de voz en una base de datos 29414.3 Buzones de voz en una base de datos 297

    Capitulo XV - Las conferencias audio ................................................................................... 301

    15.1 meetme.conf 30115.2 Aplicacin ConfBridge 306

    v

  • 15.3 Meetme en Realtime Dinmico 30715.4 Aplicacin Page 310

    Capitulo XVI - Distribucin automtica de llamadas Colas de espera ........................... 314

    16.1 Los agentes 31416.2 Las colas de espera queue.conf 31816.3 Agentes dinmicos 32716.4 Estadsticas de las colas 33016.5 Colas, agentes y estadsticas en Realtime dinmico 33316.6 La aplicacin Chan_Spy 341

    Capitulo XVII - Asterisk y los FAX ........................................................................................ 347

    17.1 IAXmodem 34717.2 Hylafax 35117.3 Protocolo T38 372

    17.3.1 Aplicacin ReceiveFax 37717.3.2 Applicacin SendFax 378

    Capitulo XVIII - Conexiones entre servidores Asterisk ....................................................... 383

    18.1 Conectar dos servidores Asterisk con el protocolo SIP 38318.2 Conectar dos servidores Asterisk con el protocolo IAX2 38718.3 El protocolo DUNDi 38918.4 Conectar dos servidores Asterisk con OpenVPN 40018.5 Conectar dos Servidores Asterisk con TLS y SRTP 418

    Capitulo XIX AMI y AGI ............................................................................................ 426

    19.1 AMI (Asterisk Manager Interface) 42619.2 AGI (Asterisk Gateway Interface) 43519.3 Las variantes AGI 441

    19.3.1 EAGI 44119.3.2 FastAGI 44219.3.3 Async AGI 444

    Capitulo XX - Los registros en Asterisk ................................................................................. 449

    20.1 CDR (Call Detail Record) 44920.1.1 cdr.conf 45120.1.2 cdr_manager.conf 454

    vi

  • 20.1.3 CDR adaptive 45520.2 CEL (Channel Event Logging) 46020.3 Logger.conf 467

    20.3.1 Debug 471

    Capitulo XXI - Seguridad en Asterisk ................................................................................... 474

    21.1 Reglas de oro 47421.2 Fail2ban 47421.3 Bloquear IP por pases 477

    Capitulo XXII - Monitorear Asterisk .....................................................................................484

    22.1 Monit 48422.2 SNMP 48922.3 Nagios 492

    22.3.1 NDOutils 50322.3.2 PNP4NAGIOS 505

    22.4 Monitoreo calidad llamadas 51022.4.1 Monitoreo calidad llamadas desde la consola de Asterisk 51022.4.2 Monitoreo calidad llamadas con VoIPMonitor 511

    22.5 CDR-STATS 515

    Capitulo XXIII - Conectar un Softphone (Blink) de forma segura: SIP TLS y SRTP ...... 524

    23.1 Creacin de los certificados 52423.2 Configuracin Softphone Blink 528

    Capitulo XXIV - Openfire y Asterisk ..................................................................................... 533

    24.1 Instalacin de Openfire 53324.2 Instalar el Plugin SIPPhone en Openfire 54124.3 El Plugin Asterisk-IM 54424.4 Asterisk como cliente en Openfire 54824.5 Conectar dos servidores Openfire 55224.6 Openfire Connection Manager 556

    Capitulo XXV - Asterisk y alta disponibilidad ......................................................................... 561

    25.1 Replicacin MySQL Master-Slave 56125.2 Replicacin MySQL Master-Master 56725.3 DRBD - Raid1 va TCP 577

    vii

  • 25.4 Heartbeat 584

    Capitulo XXVI - Asterisk GUI ............................................................................................. 592

    Capitulo XXVII FreePBX ................................................................................................... 598

    Apndice A Instalar CentOS 6.4 en una maquina virtual con VirtualBox 606

    Apndice B Licencia GNU FDL 627

    viii

  • Introduccin versin 1.0

    Despus de unos cuantos meses de trabajo, toma vida la primera versin del libro dedicado a la versin 1.8.X de Asterisk PBX. Como siempre pasa con los manuales, muchos dirn que no se abordaron algunos temas importantes, otros que la parte descriptiva es muy sucinta. La verdad, todos tienen razn. Iba a aadir una cuantos prrafos ms pero pens que poda dejarlo para maana. Lo que si les puedo decir es que en la prxima versin estarn presentes estos termas:

    Aplicacin Chan_spy Aplicacin GotoIfTime (para enrutar las llamadas entrantes segn la fecha y la hora) El funcionamiento de la negociacin de los codec audio a lo largo de una llamada

    Siempre he sido una persona muy parca con las palabras y la escritura. No me gusta alargarme demasiado cuando escribo y no me gusta que las palabras sobren. Puede ser que en algunas partes del libro me he pasado un poco aplicando esta regla, pero para eso estn las primera versiones de un manual. De ellas se aprende para mejorarlas.

    La que me gusta de este manual es que parte desde la instalacin del sistema operativo (Linux CentOS 6.2) y acompaa quien lo lee hacia la instalacin y configuracin de Asterisk hasta armar una centralita completamente lista para las funciones bsicas e intermedias. Todo esto probando cada nueva configuracin como si se estuviera trabajando en un laboratorio de prueba.

    Quiero darles las gracias a los viejos y nuevos participantes a mis cursos a distancia que son los que me animaron y me animan a escribir y mejorar este libro. Es gracias a ellos que he ido aprendiendo cada da ms y que con sus preguntas me inspiran a la hora de escribir.

    Introduccin versin 1.2

    Esta versin es una actualizacin bastante consistente de la anterior. Finalmente aqu encuentran los temas que me haba propuesto incluir en el libro:

    La aplicacin ChanSpy La gestin de las llamadas entrantes segn la franja horaria La negociacin de los codec

    Adems se han incluido nuevos temas como:

    la aplicacin FollowMe (Sgueme) la programacin de la trasferencia de las llamadas consultas en base de datos con resultados mltiples.

    Espero que lo disfruten.

    ix

  • Capitulo I

    Instalacin de Asterisk

    Asterisk es el programa Open Source ms reconocido para implementar una PBX. Para una lista completa de las funcionalidades brindadas, visiten la pgina de los desarrolladores. Entre ellas:

    Registro (Log) de llamadas Grabacin de llamadas Desvo de llamadas Trasferencia de llamadas Conferencias audio Msica en espera Gestin de colas (call center) Soporte para tarjetas y Gateway FXO, FXS, digitales y celulares IVR Buzn de voz

    Este libro abarca la instalacin de Asterisk en un VPS (Servidor Virtual Privado) remoto y es valida para cualquier Servidor Linux CentOS. Con el VPS remoto la ventaja es tener una PBX siempre activa, independiente de la banda ancha disponible en la casa/oficina y evita tener una computadora dedicada y siempre encendida. En este caso, considerando la relacin calidad/precio, se ha optado por los VPS de la empresa Linode. Para aquellos que quieran trabajar con un servidor local, en la apndice A es presente una gua para la instalacin de CentOS en VirtualBox.

    1.1 Preparacin del VPS

    Los VPS de Linode, utilizan como sistema de virtualizacin Xen. Como la versin 6.4 de CentOS ya no incluye este sistema de virtualizacin entre los paquetes disponibles, para instalar DAHDI se utilizar directamente el ultimo Kernel Linux que se configurar con el sistema de arranque GRUB.

    Una vez adquirido el servidor Linode, desde la pagina de administracin se selecciona el enlace que aparece en la imagen que sigue:

    Se escoge el centro de datos donde se quiere tener el servidor virtual remoto (en este caso Dallas):

  • En la nueva ventana que aparecer se configuran algunos parmetros (distribucin Linux, Memoria disco, swap y contrasea del usuario root:

    Terminada la configuracin se presiona el botn Rebuild. Empezar el proceso de instalacin y configuracin del sistema operativo. Una vez que haya terminado, ya se puede iniciar el servidor presionando el botn Boot.

    2

  • Como se puede ver en la imagen, el Kernel que se instala es la versin Latest 32 bit (3.7.10-linode49). De esta versin no hay las fuentes disponibles y eso imposibilita la instalacin de DAHDI y ,en general, de todos los programas que se instalan como mdulos del Kernel. Por eso en los prximos prrafos se ver como instalar en el servidor Linode, la ultima versin disponible del Kernel Linux y el sistema de arranque GRUB.

    Una vez que el servidor est corriendo, como indicado en la imagen que sigue, que aparece en el lado derecho de la pagina de administracin de Linode, se puede acceder al servidor con el programa PuTTy (un cliente SSH):

    Para conocer la direccin IP del servidor Linode, se entra en la siguiente pagina, donde aparecen todos los datos de configuracin de la red:

    3

  • Se descarga el programa PuTTy para Windows desde esta pagina:

    http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe

    Una vez descargado se ejecuta. Aparecer la siguiente ventana:

    En Host Name (or IP address) se pone la direccin IP del servidor Linode, en Port 22 y en Saved Sessions un nombre que identifique la conexin al VPS. Terminada la configuracin se presiona el botn Save y luego el botn Open que aparece ms abajo. Se abrir una nueva ventana donde en login as hay que poner root y en password la contrasea que se ha escogido al momento de la instalacin del sistema operativo.

    Si se est utilizando Linux se abre una ventana terminal y para conectarse al servidor remoto se ejecuta el siguiente comando:

    ssh root@IPservidor

    El resultado ser:

    La primera cosa que hay que hacer es actualizar el sistema:

    yum update -y

    De esta forma se pasar de la versin 6.2 a la versin 6.4 de CentOS. Luego se instala el ultimo Kernel

    4

  • Linux disponible y el sistema de arranque GRUB:

    yum install kernel grub -y

    Se averigua la versin del Kernel que se ha instalado:

    rpm -q kernelkernel-2.6.32-358.2.1.el6.i686

    y con esos datos se configura GRUB:

    nano /boot/grub/grub.conf

    #boot=/dev/xvdadefault=0timeout=5title CentOS (2.6.32-358.2.1.el6) root (hd0) kernel /boot/vmlinuz-2.6.32-358.2.1.el6.i686 root=/dev/xvda initrd /boot/initramfs-2.6.32-358.2.1.el6.i686.img

    Se guardan las modificaciones y se crea un enlace simblico del archivo que se acaba de crear:

    ln -s /boot/grub/grub.conf /boot/grub/menu.lst

    El paso a seguir es modificar la configuracin del servidor Linode. Desde la pagina de administracin se selecciona el enlace que aparece en la imagen:

    En la nueva pagina se modifican los parmetros como indicado en las dos siguientes imgenes:

    5

  • En Boot Settings Kernel escogemos pv-grub-x86_32

    Casi al final de la pagina se modifican los dos parmetros indicados cambiado la opcin de Yes a No. Para terminar se guardan los cambios presionando el botn Save Changes. Se regresar a la pagina principal del servidor Linode y de ah se reinicia:

    Para averiguar que efectivamente el sistema se reinicia utilizando el Kernel Linux instalado y el gestor de arranque GRUB, en la pagina de Linode se entra en el men Remote access y luego se sigue el enlace Launch Lish Ajax Console che permite acceder al servidor desde una consola local. Se abrir una nueva ventana y despus de unos segundos aparecer esta imagen:

    6

  • 1.2 SSH y clave RSA

    RSA es un sistema criptogrfico de clave publica che permite la configuracin de conexiones seguras. Para crear la clave RSA se descarga el programa PuTTygen (para Windows):

    1.2.1 Clave RSA en Windows

    Para crear la clave RSA se descarga el programa PuTTygen:

    http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe

    Se ejecuta:

    En Number of bits in a generated key se pone 2048 y luego se presiona el botn Generate. Para la creacin de la clave se necesita generar una serie aleatoria de nmeros y se hace moviendo el ratn en el cuadro que aparece bajo la linea Key:

    7

  • Hay que seguir moviendo el ratn hasta que la barra que aparece no llegue al final de la linea. Terminada la operacin se tendr disponible la clave RSA (publica y privada):

    IMPORTANTE: para aumentar la seguridad de la clave privada, se puede asociar con una contrasea. La contrasea se escribe en la casilla Key passphrase y se repite en Confirm passphrase.

    8

  • Se guarda la clave privada en una carpeta del ordenador local presionando el botn Save private key(en este caso se nombra claveprivada):

    Para continuar se selecciona todo el texto que aparece en la imagen que sigue, se presiona el botn derecho del ratn y se escoge en el men copiar:

    El texto copiado es la clave publica. Se accede nuevamente con PuTTy al servidor remoto y se sigue este procedimiento para utilizar la clave publica; se crea la carpeta ssh:

    mkdir .ssh

    9

  • se permite el acceso a la carpeta creada solamente al usuario root:

    chmod 700 .ssh

    se entra en la carpeta:

    cd .ssh

    se crea el archivo authorized_keys que es donde el sistema buscar las claves RSA publicas del sistema (en este caso para el usuario root):

    nano authorized_keys

    se pega el contenido copiado desde PuTTygen que debe quedar todo en la misma linea:

    Se guarda el archivo presionando las teclas CTRL-X. Se asigna al archivo recin creado los permisos de lectura y escritura solamente al usuario root:

    chmod 600 /root/.ssh/authorized_keys

    Ya se puede continuar con la configuracin del servidor SSH (parrago 1.2.3).

    1.2.2 Clave RSA en Linux

    Se accede al servidor linux LOCAL como usuario root y e la ventana terminal se escribe:

    cd /root

    mkdir .ssh

    se permite el acceso a la carpeta creada solamente al usuario root:

    chmod 700 .ssh

    se entra en la carpeta:

    cd .ssh

    Se crea la clave RSA

    10

  • ssh-keygen -t rsa

    Enter file in which to save the key (/root/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:2e:86:eb:d0:8e:2d:49:1f:0e:83:a8:b2:45:e7:2b:26 root@li215-240The key's randomart image is:+--[ RSA 2048]----+| || || || ||... . S ||o.++.. . ||..o*+.o . ||E.==o+ . ||o+.+* |+-----------------+[root@li215-240 .ssh]# ls -ltotal 8-rw------- 1 root root 1675 Mar 11 20:06 id_rsa-rw-r--r-- 1 root root 396 Mar 11 20:06 id_rsa.pub

    Cuando el sistema lo solicita (lineas en negrita), se puede configurar la clave con una contrasea. Se crearn dos archivos:

    id_rsa que contiene la clave privada id_rsa.pub que contiene la clave publica

    El segundo archivo se copia en el servidor Linode remoto:

    scp id_rsa.pub root@IPservidorremoto:/tmp

    Con este comando se copia la clave publica en la carpeta /tmp del servidor remoto. Luego se aade la clave al archivo authorized_keys en la carpeta /root/.ssh

    cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys

    Se borra la clave publica:

    rm /tmp/id_rsa.pub

    11

  • y se cambian los permisos del archivo authorized_keys:

    chmod 600 /root/.ssh/authorized_keys

    Ya se puede continuar con la configuracin del servidor SSH (parrago 1.2.3).

    1.2.3 Configuracin servidor SSH

    Terminada la operacin de creacin y configuracin de las claves RSA, hay que modificar algunos parmetros del servidor SSH para permitir el acceso al VPS solamente al usuario root si se autentica con la clave RSA; adems, para aumentar la seguridad, se cambia el puerto predefinido para el acceso SSH (22 TCP), escogiendo otro (15000 TCP). Esto se hace modificando el archivo de configuracin del servidor SSH:

    nano /etc/ssh/sshd_config

    Se buscan estas lineas (para buscar un texto con el editor nano hay que presionar la tecla CTRL junto a la tecla W):

    #Port 22#RSAAuthentication yesPasswordAuthentication yes

    y se modifican para que queden:

    Port 15000RSAAuthentication yesPasswordAuthentication no

    Se guardan los cambios y se reinicia el servidor SSH:

    /etc/init.d/sshd restart

    Se abre otra instancia del cliente SSH:

    12

  • Se pone la IP del servidor Linode, come puerto el 15000 y se asigna un nuevo nombre a esta nueva conexin.

    En la barra de la izquierda se busca el men SSH, luego Auth y se presiona el botn Browse. Se busca la clave privada en la carpeta donde se ha guardado anteriormente y se selecciona. Se vuelve al men Session (en la izquierda) y se guarda esta nueva configuracin presionando el botn Save. Ahora hay dos sesiones disponibles en el cliente SSH: Linode y Linode2. Para acceder al servidor Linux se escoge la sesin Linode2, botn Load y luego botn Open. Debe aparecer esta ventana:

    13

  • Una vez que se haya escrito el nombre de usuario root en login as:, automticamente el cliente se conectar al servidor autenticndose con la clave RSA creada.

    Para conectarse desde el servidor Linux LOCAL:

    ssh -p 15000 root@localhost

    Para terminar la configuracin del VPS, se modifica la hora predefinida del servidor:

    rm /etc/localtimerm: remove regular file `/etc/localtime'? Y

    Se crea un enlace simblico a la hora de Colombia:

    ln -s /usr/share/zoneinfo/America/Bogota /etc/localtime

    se averigua que la hora sea exacta con el comando:

    date

    Para que la hora se actualice de manera automtica se instala el servidor NTP (Network Time Protocol):

    yum install ntp

    Se configura para que se inicie automticamente al arrancar el servidor Linux:

    chkconfig ntpd on

    y se inicia:

    service ntpd startStarting ntpd: [ OK ]

    Para modificar el idioma predefinido (ingles) y ponerlo en espaol (de Colombia):

    nano /etc/sysconfig/i18n

    se modifica esta linea:

    LANG="en_US.UTF-8"

    14

  • para que quede:

    LANG="es_CO.iso88591"

    Para activar el nuevo idioma basta salir y volver a entrar al servidor con PuTTy.

    1.3 Utilidades, libreras, dependencias

    Antes de la compilacin de Asterisk, se instalarn una serie de libreras y dependencias que permitirn obtener la instalacin de la mayora de los mdulos de la PBX. Se empieza con Vorbis que es una librera para la compresin/descompresin audio:

    yum install libvorbis libvorbis-devel vorbis-tools libogg libogg-devel

    se sigue con CURL que es un cliente que permite recibir o enviar archivos utilizando los protocolos HTTP, HTTPS, FTP, GOPHER, DICT, TELNET:

    yum install curl curl-devel libidn-devel

    se instalan todas las libreras y dependencias que se necesitan para compilar las fuentes:

    yum install gcc ncurses-devel make gcc-c++ compat-libtermcap zlib-devel libtool bison-devel \bison openssl-devel bzip2-devel wget newt-devel subversion flex gtk2-devel

    a seguir para crear y gestionar las bases de datos, MySQL:

    yum install mysql mysql-server mysql-devel

    UNIXODBC que es la implementacin Linux de los API ODBC que permiten conectarse a muchos sistemas de gestin de base de datos (ej: MySQL):

    yum install unixODBC unixODBC-devel mysql-connector-odbc libtool-ltdl-devel

    Se instala FESTIVAL, que es un sistema de text to speech (disponible en espaol):

    yum install festival festival-devel

    Una vez terminada esta parte se empieza a instalar una serie de programas desde las fuentes; el primero es SPEEX que es un programa para la compresin audio especficamente diseado para la voz.

    IMPORTANTE: Para todos los programas que se instalan desde las fuentes, antes de descargarlos, averiguar si hay una versin ms reciente disponible.

    cd /usr/src

    15

  • wget http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz

    tar -xf speex-1.2rc1.tar.gz

    cd speex-1.2rc1

    ./configure --prefix=/usrmakemake install

    Se continua con LAME que es utiliza para codificar archivos audio en formato MP3:

    cd /usr/src

    wget http://ufpr.dl.sourceforge.net/sourceforge/lame/lame-3.99.5.tar.gz

    tar -xf lame-3.99.5.tar.gz

    cd lame-3.99.5

    ./configure --prefix=/usrmakemake install

    LIBMAD que es un MPEG audio decodificador de alta calidad:

    cd /usr/src

    wget http://prdownloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz

    tar -xf libmad-0.15.1b.tar.gz

    cd libmad-0.15.1b

    ./configure --prefix=/usr

    Para que la compilacin tenga xito hay que modificar una linea del Makefile:

    nano Makefile

    CFLAGS = -Wall -march=i486 -g -O -fforce-mem -fforce-addr -fthread-jumps

    para que quede:

    CFLAGS = -Wall -march=i486 -g -O -fforce-addr -fthread-jumps

    16

  • se continua con la compilacin e instalacin:

    makemake install

    WAVPACK es un compresor audio de alto rendimiento sin perdida de calidad:

    cd /usr/src

    wget http://www.wavpack.com/wavpack-4.60.1.tar.bz2

    tar -xf wavpack-4.60.1.tar.bz2

    cd wavpack-4.60.1

    ./configure --prefix=/usrmakemake install

    Se termina con SOX que es un programa que permite la manipulacin de archivos audio y la posibilidad de pasarlos de un formato a otro:

    cd /usr/src

    wget http://downloads.sourceforge.net/project/sox/sox/14.4.1/sox-14.4.1.tar.gz

    tar -xf sox-14.4.1.tar.gz

    cd sox-14.4.1

    ./configure -prefix=/usr

    Al finalizar el configure aparecer esta tabla donde se encontrarn todos los formatos audio que se podrn manipular con SOX:

    17

  • Se termina con la compilacin e instalacin:

    makemake install

    1.4 DAHDI

    El paquete DADHI (Digium Asterisk Hardware Device Interface) permite cargar los drivers y configurar distintos tipos de tarjetas en Asterisk (analgicas, digitales, RDSI/ISDN, cancelador de ECHO). Asterisk adems se apoya en DAHDI para las conferencias audio (modulo app_meetme) y el trunking IAX2 (tema tratado en la configuracin del archivo iax.conf). Se instala el paquete de desarrollo del Kernel:

    yum install kernel-devel

    Se continua con la ultima versin disponible de DAHDI-Linux:

    cd /usr/src

    wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/dahdi-linux-current.tar.gz

    tar -xf dahdi-linux-current.tar.gz

    cd dahdi-linux-2.6.2

    18

  • makemake install

    Se termina con la ultima versin disponible de DAHDI-Tools:

    cd /usr/src

    wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/dahdi-tools-current.tar.gz

    tar -xf dahdi-tools-current.tar.gz

    cd dahdi-tools-2.6.2

    ./configure

    make menuselect

    en la ventana que aparece se seleccionan todos los mdulos disponibles como indicado en la imagen que sigue:

    Se guarda la configuracin presionando la tecla tabulador hasta posicionarse sobre Save & Exit. Se termina con la compilacin e instalacin:

    makemake installmake config

    Ya se puede iniciar DAHDI:

    /etc/init.d/dahdi startLoading DAHDI hardware modules: wct4xxp: [ OK ] wcte12xp: [ OK ]

    19

  • wct1xxp: [ OK ] wcte11xp: [ OK ] wctdm24xxp: [ OK ] wcfxo: [ OK ] wctdm: [ OK ] wcb4xxp: [ OK ] wctc4xxp: [ OK ] xpp_usb: [ OK ]

    No hardware timing source found in /proc/dahdi, loading dahdi_dummyRunning dahdi_cfg: [ OK ]

    En el caso del servidor Linode, no se va a instalar ningn tipo de tarjeta y es buena practica no cargar todos los driver de DAHDI al momento de su arranque para ahorrar recursos de sistema. Esto se hace modificando este archivo:

    nano /etc/dahdi/modules

    y se aade el carcter # a todas las lineas que no lo tienen. Se guardan las modificaciones y se reinicia DAHDI:

    service dahdi restartUnloading DAHDI hardware modules: doneLoading DAHDI hardware modules:

    Running dahdi_cfg: [ OK ]

    1.5 LIBPRI

    En el caso que se quiera instalar tarjetas digitales en el servidor Asterisk (E1, T1, ISDN), despus de instalar DAHDI, hay que instalar la librera libpri

    cd /usr/src

    wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4.14.tar.gz

    se descomprime:

    tar -xf libpri-1.4.14.tar.gz

    se entra en la carpeta:

    cd libpri-1.4.14

    se compila y se instala:

    20

  • makemake install

    1.6 Res_fax, GoogleTalk, LibiCAL y SRTP

    En este prrafo se ver como instalar SpanDSP, un procesador de seales digitales que en Asterisk permite la instalacin del modulo res_fax para la recepcin y envo de FAX, y IKSEMEL que permite implementar el protocolo XMPP en Asterisk y de esta forma conectarse a GoogleTalk y/o a cualquier servidor de tipo XMPP (otro ejemplo es Openfire):

    Para SpanDSP se necesita instalar primero las libreras libtiff y libxml2:

    yum install libtiff libtiff-devel libxml2 libxml2-devel

    se continua con SpanDSP:

    cd /usr/src

    wget http://www.soft-switch.org/downloads/spandsp/spandsp-0.0.6pre21.tgz

    tar -xf spandsp-0.0.6pre21.tgz

    cd spandsp-0.0.6

    ./configure --prefix=/usrmakemake install

    El protocolo XMPP permite conexione seguras entre cliente y servidor utilizando el protocolo TLS; para ese efecto se instala, antes de IKSEMEL, las relativas libreras:

    yum install gnutls gnutls-devel gnutls-utils

    se continua con IKSEMEL:

    cd /usr/src

    wget http://iksemel.googlecode.com/files/iksemel-1.4.tar.gz

    tar -xf iksemel-1.4.tar.gz

    cd iksemel-1.4

    ./configure --prefix=/usrmake

    21

  • antes de la instalacin se ejecuta un test para averiguar que la compilacin haya tenido xito:

    make checkPASS: tst-ikstackPASS: tst-iksPASS: tst-saxPASS: tst-domPASS: tst-shaPASS: tst-md5PASS: tst-filterPASS: tst-jid==================All 8 tests passed==================

    Ya que todo est bien, se puede instalar:

    make install

    Antes de la instalacin de Asterisk, se termina la preparacin del sistema con unos programas ms. Primero un servidor de correo electrnico, SENDMAIL:

    yum install sendmail sendmail-devel sendmail-cf

    Se configura para que arranque en automtico:

    chkconfig sendmail on

    Al alquilar el servidor Linode, cada usuario tiene asignado un sub-dominio que se puede utilizar para la configuracin del sistema. Este dato aparece en la pagina de administracin de Linode, bajo el men Remote Access

    22

  • En este caso el sub-dominio asignado es li371-235.members.linode.com. Ese nombre se pone en la configuracin de red del servidor de la siguiente forma:

    nano /etc/sysconfig/network

    al final del archivo se aade la siguiente linea:

    HOSTNAME=li371-235.members.linode.com

    Se guardan los cambios y se reinicia el servicio de red:

    service network restart

    El sub-dominio se utilizar tambin para el envo de los correos electrnicos. Por defecto el servidor de correo electrnico escucha solamente en la puerto TCP 25 local. Para que sea alcanzable tambin desde remoto hay que abrir el archivo de configuracin de Sendmail:

    nano /etc/mail/sendmail.mc

    se busca esta linea:

    DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

    y modificarla como sigue:

    DAEMON_OPTIONS(`Port=smtp,, Name=MTA')dnl

    se guardan los cambios y se vuelve a compilar la configuracin de Sendmail:

    make -C /etc/mail

    se reinicia el servidor de correo:

    /etc/init.d/sendmail restart

    para hacer la prueba de conexin al servidor de correo electrnico desde remoto, se abre una ventana terminal en Windows y se escribe:

    C:\> telnet -a IPLinode 25

    En lugar de IPLinode se pone la IP del servidor Linode. El resultado:

    23

  • OpenLDAP es la versin open source del protocolo Lightweight Directory Access. Normalmente se utiliza para crear un directorio de usuarios que puede ser consultado y/o modificado desde remoto. Muchos programas implementan la posibilidad de conectarse a un servidor OpenLDAP y Asterisk, desde la versin 1.6.X, presenta esta posibilidad:

    yum install compat-openldap openldap openldap-clients openldap-devel openldap-servers

    SNMP es el Protocolo Simple de Administracin de Red y sirve para controlar y monitorear el desempeo del servidor Linux. En Asterisk permite monitorear, entre otras cosas, los canales y las llamadas. Se utilizar junto a NAGIOS para controlar el servidor Asterisk y enviar avisos cuando se verifique algn tipo de problema:

    yum install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils

    En Asterisk existe la posibilidad de guardar los registros de las llamadas en un servidor RADIUS a travs de un cliente RADIUS que hay que instalar. En este caso se instala desde las fuentes:

    cd /usr/src

    wget http://download.berlios.de/radiusclient-ng/radiusclient-ng-0.5.6.tar.gz

    tar -xf radiusclient-ng-0.5.6.tar.gz

    cd radiusclient-ng-0.5.6

    ./configure --prefix=/usrmakemake install

    Se continua la preparacin del servidor con la instalacin del lenguaje de programacin LUA que permite escribir el dialplan (o plan de marcado) utilizando este lenguaje. Al terminar la instalacin de Asterisk se encontrar un archivo de ejemplo en la carpeta /etc/asterisk. En este caso se instala desde las fuentes. Primero unas dependencias:

    yum install readline-devel

    luego el programa:

    cd /usr/src

    wget http://www.lua.org/ftp/lua-5.1.5.tar.gz

    tar -xf lua-5.1.5.tar.gz

    cd lua-5.1.5

    24

  • Se modifica el archivo Makefile para que el programa se instale por defecto en la carpeta /usr:

    nano Makefile

    se modifica esta linea:

    INSTALL_TOP= /usr/local

    para que quede:

    INSTALL_TOP= /usr

    Para la versin CentOS de 64bit hay que modificar tambin este archivo:

    nano src/Makefile

    cambiar esta linea:

    CFLAGS= -O2 -Wall $(MYCFLAGS)

    para que quede:

    CFLAGS= -O2 -Wall -fpic $(MYCFLAGS)

    Se guardan los cambios, se compila e instala:

    make linux make install

    Para terminar se compilan los paquetes que permiten utilizar las nuevas funcionalidades de Asterisk 1.8.X. Primero LIBICAL que permite la implementacin del protocolo iCalendar (RFC5546) a travs del modulo res_calendar:

    cd /usr/src

    wget http://downloads.sourceforge.net/project/freeassociation/libical/libical-0.48/libical-0.48.tar.gz

    tar -xf libical-0.48.tar.gz

    cd libical-0.48

    ./configure --prefix=/usrmakemake install

    Luego NEON que es una librera que permite la implementacin del protocolo WebDAV en Asterisk:

    25

  • cd /usr/src

    wget http://webdav.org/neon/neon-0.29.6.tar.gz

    tar -xf neon-0.29.6.tar.gz

    cd neon-0.29.6

    ./configure --prefix=/usrmakemake install

    Por ultimo la librera LIBSRTP que permite implementar el cifrado del flujo media en Asterisk a travs del protocolo SRTP (RFC3711):

    cd /usr/src

    wget http://downloads.sourceforge.net/project/srtp/srtp/1.4.4/srtp-1.4.4.tgz

    tar -xf srtp-1.4.4.tgz

    cd srtp

    ./configure --prefix=/usr CFLAGS=-fPIC make

    Antes de lanzar el make runtest, para que tenga xito, hay que modificar una linea en el archivo que ejecuta el test:

    nano test/rtpw_test.sh

    cambiar esta linea:

    RTPW=rtpw

    para que quede:

    RTPW=./rtpw

    Se continua con el test:

    make runtestmake install

    26

  • 1.7 Instalacin de Asterisk

    Terminada la preparacin del servidor, se inicia con la instalacin de Asterisk. Se descarga la ultima versin 1.8.X disponible:

    cd /usr/src

    wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8.20.1.tar.gz

    tar -xf asterisk-1.8.20.1.tar.gz

    cd asterisk-1.8.20.1

    ./configuremake menuselect

    Desde la versin 1.8.X lo que antes era un paquete a parte (asterisk-addons) ahora es presente en el paquete principal de Asterisk. Como se puede notar, los mdulos relacionados con MySQL (menos res_mysql) son deprecated y muy probablemente en las futuras versiones sern eliminados. Se entra en el men Add-ons y se activan los paquetes que siguen:

    En Asterisk 1.8.X est presente un nuevo men Channel Event Logging que como se ver ms adelante, permite complementar el CDR (call detail record) con nuevas informaciones relacionadas con las llamadas:

    En Resource modules se controla que los mdulos relacionados con las funciones calendario y cifrado del flujo media estn activados:

    27

  • Se seleccionan todos los mdulos en el men Utilities y AGI Samples:

    En Core Sound Packages se seleccionan todos los paquetes disponibles:

    28

  • En Music On Hold File Packages se hace lo mismo:

    Como se hace lo mismo en Extra Sound Packages:

    29

  • Se guarda la configuracin presionando la tecla tabulador hasta posicionarse sobre Save & Exit. Se termina con la compilacin e instalacin:

    make

    Si a lo largo de la compilacin aparece este error:

    make[1]: *** [format_mp3.o] Error 1make: *** [addons] Error 2

    se continua con:

    contrib/scripts/get_mp3_source.sh

    y luego otra vez el make:

    make

    se instala Asterisk:

    make install

    se instalan los archivos de configuracin predefinidos:

    make samples

    30

  • se configura el script de arranque de Asterisk:

    make config

    Terminada la instalacin, se procede a la configuracin de MySQL para crear la base de datos y la tabla donde se guardarn los registros de las llamadas.

    /etc/init.d/mysqld start

    se configura para que arranque en automtico:

    chkconfig mysqld on

    y se crea una contrasea para el usuario root de MySQL (sesamo):

    IMPORTANTE: para un sistema en produccin utilizar siempre contraseas fuertes

    mysqladmin -u root password sesamo

    Para asegurar el servidor MySQL se ejecuta el programa:

    mysql_secure_installation

    Se contestan las preguntas somo sigue:

    Enter current password for root (enter for none): sesamoOK, successfully used password, moving on...

    Change the root password? [Y/n] n ... skipping.

    Remove anonymous users? [Y/n] y ... Success!

    Disallow root login remotely? [Y/n] y ... Success!

    Remove test database and access to it? [Y/n] y - Dropping test database...

    Reload privilege tables now? [Y/n] y ... Success!

    Cleaning up...

    31

  • All done! If you've completed all of the above steps, your MySQLinstallation should now be secure.

    Thanks for using MySQL!

    Se reinicia el servidor MySQL:

    service mysqld restart

    Se crea la base de datos para guardar los registros de las llamadas. Se entra en el cliente de MySQL:

    mysql -u root -psesamo

    se crea la base de datos asteriskcdr:

    mysql> create database asteriskcdr;

    se selecciona:

    mysql> use asteriskcdr

    se crea la tabla cdr (copiando y pegando las lineas que siguen):

    mysql> CREATE TABLE cdr ( calldate datetime NOT NULL default '0000-00-00 00:00:00', clid varchar(80) NOT NULL default '', src varchar(80) NOT NULL default '', dst varchar(80) NOT NULL default '', dcontext varchar(80) NOT NULL default '', channel varchar(80) NOT NULL default '', dstchannel varchar(80) NOT NULL default '', lastapp varchar(80) NOT NULL default '', lastdata varchar(80) NOT NULL default '', duration int(11) NOT NULL default '0', billsec int(11) NOT NULL default '0', disposition varchar(45) NOT NULL default '', amaflags int(11) NOT NULL default '0', accountcode varchar(20) NOT NULL default '', peeraccount varchar(20) NOT NULL default '', uniqueid varchar(32) NOT NULL default '', linkedid varchar(80) NOT NULL default '', userfield varchar(255) NOT NULL default '', KEY callerid (clid));

    Con la versin 1.8 de Asterisk se han aadido dos nuevos campos a la tabla CDR:

    32

  • linkedid peeraccount

    que permiten tener informaciones ms detalladas de cada llamada.

    Se otorgan los permisos de acceso a la base de datos creada al usuario asterisk, desde local:

    mysql> GRANT ALL PRIVILEGES ON asteriskcdr.* TO 'asterisk'@'localhost' IDENTIFIED BY 'sesamo';

    desde remoto:

    mysql> GRANT ALL PRIVILEGES ON asteriskcdr.* TO 'asterisk'@'%' IDENTIFIED BY 'sesamo';

    se actualizan los permisos:

    mysql> flush privileges;

    se sale del cliente:

    mysql> quit

    En Asterisk la conexin a la base de datos y la tabla de los registros de las llamadas, se configura en el archivo cdr_mysql.conf. Se renombra el predefinido:

    mv /etc/asterisk/cdr_mysql.conf /etc/asterisk/cdr_mysql.conf.old

    se crea uno nuevo:

    nano /etc/asterisk/cdr_mysql.conf

    se aaden las siguientes lineas:

    [global]hostname=localhostdbname=asteriskcdrtable=cdrpassword=sesamouser=asteriskport=3306sock=/var/lib/mysql/mysql.sock

    Los datos:1. [global] etiqueta inicial del bloque2. hostname - nombre de dominio o IP del servidor MySQL

    33

  • 3. dbname - nombre de la base de datos4. table - nombre de la tabla5. password - contrasea del usuario que tiene los permisos para acceder a la base de datos6. user - nombre del usuario que tiene los permisos para acceder a la base de datos7. port puerto donde MySQL recibir las conexiones (predefinido 3306)8. sock archivo que se crea cuando se inicia MySQL y que se necesita indicar para una correcta

    conexin

    Se guardan los cambios y se inicia Asterisk:

    /etc/init.d/asterisk start

    se averigua que est corriendo:

    /etc/init.d/asterisk statusasterisk (pid 2403) is running...

    se entra en la consola:

    asterisk -rvvvvvvvvvvvvvvvv

    se controla que la conexin a la base de datos est activa:

    CLI> cdr mysql statusConnected to asteriskcdr@localhost, port 3306 using table cdr for 59 seconds. Wrote 0 records since last restart.

    Se sale de la consola:

    CLI> quitExecuting last minute cleanups

    34

  • Capitulo II

    Configuracin inicial de Asterisk

    2.1 Instalar y configurar un cortafuegos

    Para proteger el servidor Linux de accesos no autorizados hay que instalar un firewall (cortafuegos) y abrir los puertos que Asterisk necesita para aceptar conexiones externas. Esta es la parte ms delicada de la configuracin del servidor porque es donde se definen los puertos y los servicios que son accesibles desde Internet. En el caso del VPS Linode se instalar y Configurar IPtables.

    Si Asterisk se encuentra instalado en un computador local conectado a Internet a travs de un router hay dos opciones:

    Abrir los puertos desde la pagina de administracin del router. Configurar en el router una DMZ que apunte a la IP local del servidor donde est instalado

    Asterisk y luego gestionar los puertos directamente con IPtables en el servidor Linux

    Para instalar iptables:

    yum install iptables

    Iptables se encarga de gestionar todos los paquetes que entren y salgan del servidor Linux. Para eso utiliza tres tipos de tablas:

    la tabla filter donde pasan todos los paquetes en entrada y salida. La tabla filter acepta tres tipos de opciones (cadenas)

    INPUT para los paquetes en entrada OUTPUT para los paquetes en salida FORWARD para redireccionar los paquetes

    la tabla NAT se utiliza para rescribir las direcciones o los puertos de los paquetes la tabla MANGLE se utiliza para modificar algunos parmetros de los paquetes (un ejemplo es

    marcar los paquetes para que sean procesados y enviados con una prioridad ms alta)

    Las reglas se definen una por linea y sern procesadas por iptables siguiendo la misma secuencia.

    Cuando no se especifica diversamente, todas las reglas se aplicarn a la tabla filter:

    Se acepta todo el trafico en entrada con destino la interfaz lookpack

    iptables -A INPUT -i lo -j ACCEPT

    Se rechaza (REJECT) todo el trafico entrante destinado a las IP 127.0.0.0/127.255.255.255 menos los paquetes para la interfaz -lo

  • iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

    Se aceptan todos los paquetes en entrada de conexiones ya establecidas, o relacionados con conexiones establecidas. Vase protocolo TCP

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    Se dejan pasar todos los paquetes salientes.

    iptables -A OUTPUT -j ACCEPT

    Se deja pasar todo el trafico en entrada para el protocolo SSH (puerto 15000 TCP)

    iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 15000 -j ACCEPT

    Se deja pasar todo el trafico en entrada destinado al puerto udp 4569 (protocolo IAX2)

    iptables -A INPUT -p udp --dport 4569 -j ACCEPT

    Se deja pasar todo el trafico en entrada destinado al puerto udp 5060 (protocolo SIP)

    iptables -A INPUT -p udp --dport 5060 -j ACCEPT

    Se deja pasar todo el trafico en entrada destinado al puerto tcp 5060 (protocolo SIP sobre TCP)

    iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5060 -j ACCEPT

    Se deja pasar todo el trafico en entrada destinado a los puertos udp que van de 10000 a 20000 (protocolo RTP)

    iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT

    Se dejan pasar las solicitudes de ping

    iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

    A este punto, ya que se han definido los puertos base que se necesitan abiertos, se bloquea todo el trafico restante.

    iptables -A INPUT -j REJECTiptables -A FORWARD -j REJECT

    Se averigua el estado de las reglas definidas con el comando:

    iptables -L

    Aparecer:

    37

  • Chain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhereREJECT all -- anywhere loopback/8 reject-with icmp-port-unreachableACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT tcp -- anywhere anywhere state NEW tcp dpt:hydapACCEPT udp -- anywhere anywhere udp dpt:iaxACCEPT udp -- anywhere anywhere udp dpt:sipACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sipACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnpACCEPT icmp -- anywhere anywhere icmp echo-requestREJECT all -- anywhere anywhere reject-with icmp-port-unreachable

    Chain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-port-unreachable

    Chain OUTPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere

    Para guardar los cambios:

    service iptables saveSaving firewall rules to /etc/sysconfig/iptables: [ OK ]

    Se inicia el servicio:

    service iptables start

    Para iniciar iptables automticamente:

    chkconfig iptables on

    Para terminar hay que configurar Asterisk para que use los puertos UDP desde 10000 hasta 20000 para el protocolo RTP (es el que se encarga, una vez establecida la conexin entre dos canales, del flujo audio/video)

    Se renombra el archivo predefinido:

    mv /etc/asterisk/rtp.conf /etc/asterisk/rtp.conf.old

    Se crea uno nuevo:

    nano /etc/asterisk/rtp.conf

    38

  • Se copian las siguientes lineas:

    [general]rtpstart=10000rtpend=20000rtpchecksums=nodtmftimeout=3000rtcpinterval=5000strictrtp=yes

    Los datos:

    [general] etiqueta inicial del archivo de configuracin rtpstart puerto inicial para el trafico RTP rtpend puerto final para el trafico RTP rtpchecksums Activar o no la suma de verificacin en los paquetes RTP dtmftimeout la cantidad de tiempo (en mili segundos) que un tono DTMF sin marcador de fin

    tiene los permisos para continuar en el trafico RTP mili segundos entre cada reporte del protocolo RTCP (protocolo che se utiliza para controlar el

    flujo RTP strictrtp Lo paquetes que no proceden del mismo flujo RTP utilizado en la conexin sern

    eliminados

    Se guardan los cambios efectuados y se recarga la configuracin de Asterisk:

    /etc/init.d/asterisk reload

    2.2 Carpetas y archivos

    Al terminar la instalacin de Asterisk unas cuantas carpetas nuevas sern creadas.

    /etc/asterisk

    Contiene todos los archivos de configuracin de Asterisk.

    /usr/lib/asterisk/modules

    Contiene todos los mdulos compilados y utilizables en Asterisk.

    /var/lib/asterisk

    Que a su vez contiene las siguientes carpetas:

    agi-bin/

    39

  • donde se guardan los script AGI.

    firmware/

    Donde se guardan los firmware de las tarjetas en uso.

    images/

    Donde las aplicaciones irn a buscar las imgenes cuando se comuniquen con telfonos que soportan esta funcin.

    keys/

    Donde se guardan las claves publicas y privadas que Asterisk necesita para autenticarse con otros servidores o servicios (Ej: DUNDi, IAX2).

    sounds/

    Contiene todas las locuciones que se pueden utilizar en el plan de marcado (dialplan).

    moh/

    La msica en espera que viene con la instalacin de Asterisk (no mp3).

    phoneprov/

    donde se guardan los archivos de configuracin de los telfonos que se quiere aprovisionar directamente desde Asterisk

    static-http/

    donde se encuentran algunos programas para interactuar con Asterisk desde un navegador Web

    /var/spool/asterisk

    Que contiene:

    dictate/

    Donde se guardarn los archivos audio creados con la aplicacin Dictate().

    meetme/

    Donde se guardarn las grabaciones de las conferencias.

    monitor/

    40

  • donde se guardarn los archivos audio de las grabaciones de las llamadas

    outgoing/

    Donde hay que mover los archivos de llamadas (call files).

    system/

    Carpeta para archivos temporales creados por la aplicacin System().

    tmp/

    Carpeta donde se guardan los archivos temporales creados por algunas aplicaciones (Ej. buzn de voz).

    voicemail/

    Donde se guardarn los archivos audio de los mensajes de voz dejados en el buzn de voz y los mensajes audio personalizados de cada usuario.

    /var/run/asterisk

    Contiene la ID del proceso de Asterisk cuando est corriendo.

    /var/log/asterisk

    Donde se guardarn todos los registros de Asterisk (errores, mensajes, llamadas y eventos, debug). De revisar cuando se tengan problemas con Asterisk.

    2.3 asterisk.conf

    En el archivo asterisk.conf, que se encuentra en la carpeta /etc/asterisk, se puede modificar la configuracin general de Asterisk. Se divide en cuatro bloques:

    un bloque donde se definen las carpetas de trabajo de Asterisk un bloque donde se definen distintas opciones del funcionamiento de Asterisk un bloque donde se definen los permisos para el socket de Asterisk un bloque donde se define el tipo de comportamiento que debe tener Asterisk para determinadas

    aplicaciones (dialplan, AGI, Realtime).

    [directories](!)astetcdir => /etc/asteriskastmoddir => /usr/lib/asterisk/modulesastvarlibdir => /var/lib/asteriskastdbdir => /var/lib/asteriskastkeydir => /var/lib/asterisk

    41

  • astdatadir => /var/lib/asteriskastagidir => /var/lib/asterisk/agi-binastspooldir => /var/spool/asteriskastrundir => /var/run/asteriskastlogdir => /var/log/asterisk

    El Bloque [directories] es donde se pueden cambiar las carpetas de configuracin de Asterisk. El valor (!) despus de la etiqueta [directories] indica que el bloque esta comentado (no ser ledo por Asterisk).

    [options];verbose = 3;debug = 3;alwaysfork = yes;nofork = yes;quiet = yes;timestamp = yes;execincludes = yes;console = yes;highpriority = ye;initcrypto = yes;nocolor = yes;dontwarn = yes;dumpcore = yes;languageprefix = yes;internal_timing = yes;systemname = my_system_name;autosystemname = yes;maxcalls = 10;maxload = 0.9;maxfiles = 1000;minmemfree = 1;cache_record_files = yes;record_cache_dir = /tmp;transmit_silence_during_record = yes;transmit_silence = yes;transcode_via_sln = yes;sendfullybooted = yes;runuser = asterisk;rungroup = asterisk;lightbackground = yes;documentation_language = en_US;hideconnect = yes

    El Bloque [options] permite modificar algunas opciones de Asterisk. Por defecto todas las opciones estn comentadas (no aplican). Algunos ejemplos:

    si se quiere quitar los colores en la consola de Asterisk, se quita el punto y coma de la linea

    42

  • nocolors=yes Si el sistema donde est instalado Asterisk no puede cursar ms de 30 llamadas, se pone

    maxcalls = 30 y se quita el punto y coma delante de la linea si se quiere que al alcanzar un consumo del 0,9 (90%) de la CPU del servidor, no se curse ms

    llamadas, se quita el punto y coma delante de maxload = 0.9 si en lugar del usuario y grupo root, se quiere que el Asterisk arranque con usuario y grupo

    asterisk (que hay que crear) se quita el punto y coma delante de runuser = asterisk y rungroup = asterisk

    si se utiliza un servidor dedicado para la base de datos y todos los registros de llamadas de distintos servidores Asterisk se guardan en ese servidor, no hay forma de saber de cual servidor es un determinado registro. Para que esto sea posible, en cada servidor Asterisk hay que configurar el parmetro systemname con un valor que identifique el servidor Asterisk. De esta forma en los registros de llamadas se podr saber en cual PBX se origin la llamada.

    ;[files];astctlpermissions = 0660;astctlowner = root;astctlgroup = apache;astctl = asterisk.ctl

    El Bloque [files] es donde se definen permisos, usuarios y nombre del socket de Asterisk.

    [compat]pbx_realtime=1.6res_agi=1.6app_set=1.6

    El Bloque [compat] es donde se puede cambiar el comportamiento de Asterisk para el dialplan, el AGI y el Realtime (temas que sern abordados en lo prximos captulos). En las versiones anteriores a la 1.8 y 1.6 cuando se definan las opciones de una aplicacin, se separaban con un pipe | Desde la versin 1.6 hay que sostituir el pipe con una coma. Si se quiere que Asterisk interprete correctamente los pipe hay que modificar las tres lineas de la siguiente forma:

    [compat]pbx_realtime=1.4res_agi=1.4app_set=1.4

    2.4 modules.conf

    Cuando se instala Asterisk, todos los mdulos se guardan en la carpeta /usr/lib/asterisk/modules. Por defecto cuando se inicia Asterisk, todos los mdulos sern cargados. Este comportamiento se debe a la configuracin predefinida del archivo modules.conf. Si se abre este archivo, despus de la etiqueta [modules] se encontrar el parmetro:

    43

  • autoload=yes

    que significa que todos los mdulos compilados se cargarn al iniciar Asterisk. Otra forma de cargar los mdulos podra ser poner ese parmetro en no y luego en el mismo archivo utilizar el parmetro load para cargar los mdulos uno a uno.

    En el mismo archivo encontramos el parmetro preload. Este parmetro se utiliza para cargar un modulo antes de todos los dems. Como se ver ms adelante, en el caso de los mdulos relacionados con ODBC, hay que utilizar este parmetro para cargar estos modulo por primeros.

    Es muy probable que a lo largo de la configuracin de Asterisk, no se necesite utilizar algunos mdulos y es una buena practica desactivarlos de forma que no se carguen al iniciar Asterisk. En este modo se reduce la memoria y los recursos utilizados por la PBX.

    Un ejemplo puede ser el canal Skinny que se utiliza en los telfonos de marca CISCO. Si no se va a utilizar este protocolo, es mejor desactivarlo en el archivo modules.conf. Esto se hace utilizando el parmetro noload. Se abre el archivo modules.conf:

    nano /etc/asterisk/modules.conf

    y al final se aade la siguiente linea:

    noload => chan_skinny.so

    Se guardan los cambios y se reinicia Asterisk:

    service asterisk restart

    Se entra en la consola de Asterisk:

    asterisk -rvvvvvvvvvvvvvv

    y con el comando:

    CLI> module show like chan

    se vern todos los canales disponibles:

    Module Description Use Countchan_local.so Local Proxy Channel (Note: used internal 0chan_iax2.so Inter Asterisk eXchange (Ver 2) 0chan_sip.so Session Initiation Protocol (SIP) 0chan_dahdi.so DAHDI Telephony Driver w/PRI 0chan_oss.so OSS Console Channel Driver 0app_chanspy.so Listen to the audio of an active channel 0chan_bridge.so Bridge Interaction Channel 0app_dumpchan.so Dump Info About The Calling Channel 0

    44

  • chan_mgcp.so Media Gateway Control Protocol (MGCP) 0chan_gtalk.so Gtalk Channel Driver 0chan_unistim.so UNISTIM Protocol (USTM) 0chan_agent.so Agent Proxy Channel 0func_channel.so Channel information dialplan functions 0chan_jingle.so Jingle Channel Driver 0app_channelredirect.so Redirects a given channel to a dialplan 0app_chanisavail.so Check channel availability 0chan_phone.so Linux Telephony API Support 017 modules loaded

    El canal chan_skinny no aparece porque se ha configurado para que no se cargue. Si en un determinado momento se quiere cargar un modulo que ha sido configurado para no cargarse al iniciar Asterisk, se utiliza el comando:

    CLI> module load chan_skinny.so

    [Dec 9 11:09:18] NOTICE[3054]: chan_skinny.c:7144 config_load: Configuring skinny from skinny.conf == Parsing '/etc/asterisk/skinny.conf': == Found == Skinny listening on 0.0.0.0:2000 == Registered channel type 'Skinny' (Skinny Client Control Protocol (Skinny)) == Manager registered action SKINNYdevices == Manager registered action SKINNYshowdevice == Manager registered action SKINNYlines == Manager registered action SKINNYshowline Loaded chan_skinny.so => (Skinny Client Control Protocol (Skinny))

    El modulo cargado de esta forma quedar activo hasta el siguiente reinicio de Asterisk.

    2.5 Msica en espera y MP3

    Una de las funcionalidades de Asterisk es la msica en espera. En muchos servicios de asistencia al cliente es tpico escucharla mientras se espera que algn operador nos atienda. En este prrafo se mostrar la configuracin de la msica en espera con archivos MP3.

    Primero se crea la carpeta donde guardar los archivos MP3:

    mkdir /var/lib/asterisk/mohmp3

    Se descarga un archivo mp3 en la carpeta creada.

    cd /var/lib/asterisk/mohmp3

    wget http://www.voztovoice.org/tmp/fresas.mp3

    45

  • Informaciones sobre el archivo:

    sox --i fresas.mp3

    Terminada la descarga del fichero MP3, el paso que sigue es configurar el archivo musiconhold.conf, utilizado para este tipo de configuracin.

    Se modifica de la siguiente manera:

    nano /etc/asterisk/musiconhold.conf

    Se aaden las siguientes lneas al final del archivo:

    [mp3]mode=filesdirectory=/var/lib/asterisk/mohmp3random=yes

    [mp3] Nombre de la nueva clase de msica en espera mode= files la nueva clase utilizar archivos audio directory=/var/lib/asterisk/mohmp3 los archivos se encontrarn en la carpeta indicada en el

    parametro directory random=yes los archivos audio se utilizarn de forma aleatoria

    Se accede a la consola de Asterisk:

    asterisk -rvvvvvvvvvvvvv

    Se escribe:

    CLI> moh reload

    para recargar la configuracin de la msica en espera.

    CLI> moh show classes

    Para ver las clases de msica en espera configuradas. Aparecer:

    46

  • Class: default localhosMode: files localhosDirectory: /var/lib/asterisk/moh

    Class: mp3Mode: filesDirectory: /var/lib/asterisk/mohmp3

    CLI> quit

    Cuando se utilizan archivos MP3 para la msica en espera, hay que tener en cuenta que el sistema necesitar utilizar bastante recursos de la CPU. Esto porque los archivo MP3 tendrn que ser convertidos en el formato audio requerido por el canal que est accediendo al servicio.

    Considerando que los telfonos IP no tienen un sistema de audio de alta calidad se puede bajar la frecuencia de muestreo de los archivos MP3 sin perder en calidad del audio escuchado. El programa que permite este tipo de operacin es el mismo SOX.

    sox fresas.mp3 -V -r 22050 -c 1 fresas1.mp3

    -c 1 se pasa el archivo de estreo a mono (un canal). -r 22050 frecuencia de muestreo de 44100 H/z a 22050 Hz. archivo1.mp3 nombre del archivo resultado de la conversin.

    Usando la opcin -V aparecer en la pantalla todo el proceso:

    47

  • Se borra el archivo original:

    rm fresas.mp3rm: remove regular file `fresas.mp3'? Y

    Para probar la nueva configuracin se necesita crear una extensin en el archivo extensions.conf (el dialplan o plan de marcado) que se ver ms adelante.

    IMPORTANTE: cada vez que se modifican o aaden nuevos archivos en la carpeta hay que recargar la configuracin de la msica en espera o reiniciar Asterisk:

    /etc/init.d/asterisk restart

    Para luego averiguar que efectivamente el archivo mp3 est presente en la lista de archivos para la musica en espera [mp3]

    asterisk -rvvvvvvvvvvvvvvv

    CLI> moh show filesClass: default File: /var/lib/asterisk/moh/macroform-the_simplicity File: /var/lib/asterisk/moh/manolo_camp-morning_coffee File: /var/lib/asterisk/moh/macroform-robot_dity File: /var/lib/asterisk/moh/reno_project-system File: /var/lib/asterisk/moh/macroform-cold_dayClass: mp3 File: /var/lib/asterisk/mohmp3/fresas1

    2.6 El comando asterisk

    Como se ha visto anteriormente, para entrar en la consola de Asterisk, se ha utilizado el comando:

    asterisk -rvvvvvvvvvvvvvvvvvvvvv

    La opcin -r significa que la conexin se hace a un instancia de Asterisk que ya est corriendo, el numero de v presentes despus de la r, indica el grado de detalle que se quiere tener en la consola. Para una lista de los comando disponibles:

    asterisk -h

    Asterisk 1.8.20.1, Copyright (C) 1999 - 2012, Digium, Inc. and others.Usage: asterisk [OPTIONS]Valid Options: -V Display version number and exit -C Use an alternate configuration file -G Run as a group other than the caller

    48

  • -U Run as a user other than the caller -c Provide console CLI -d Enable extra debugging -f Do not fork -F Always fork -g Dump core in case of a crash -h This help screen -i Initialize crypto keys at startup -I Enable internal timing if DAHDI timer is available -L Limit the maximum load average before rejecting new calls -M Limit the maximum number of calls to the specified value -m Mute debugging and console output on the console -n Disable console colorization -p Run as pseudo-realtime thread -q Quiet mode (suppress output) -r Connect to Asterisk on this machine -R Same as -r, except attempt to reconnect if disconnected -s Connect to Asterisk via socket (only valid with -r) -t Record soundfiles in /var/tmp and move them where they belong after they are done -T Display the time in [Mmm dd hh:mm:ss] format for each line of output to the CLI -v Increase verbosity (multiple v's = more verbose) -x Execute command (implies -r) -X Execute includes by default (allows #exec in asterisk.conf) -W Adjust terminal colors to compensate for a light background

    Si se quiere ver la versin de Asterisk:

    asterisk -VAsterisk 1.8.20.1

    Si se quiere iniciar Asterisk directamente sin utilizar el script de arranque, primero se para el servicio:

    service asterisk stop

    y luego de utiliza la opcin -c

    asterisk -cvvvvvvvvvvvvvvvvvvvvv

    para salir de la consola y terminar el programa:

    CLI> core stop now

    Algunas de las opciones disponibles, se vern a lo largo del curso. Para terminar se reinicia el Asterisk:

    service asterisk start

    49

  • 2.7 Preparacin del dialplan extensions.conf

    El archivo de configuracin de Asterisk extensions.conf es donde se define el dialplan de la centralita. Todas las llamadas entrantes y salientes se procesan en este archivo. Para que Asterisk sepa come tratarlas se definen contextos, extensiones y prioridades. Ms adelante se ver como se crea un contexto y dentro del contexto las extensiones y las prioridades. Una pequea parntesis. En el lenguaje comn, la extensin es el numero de telfono interno de una oficina o de un determinado servicio con el que se quiere comunicar. En el caso de Asterisk, la extensin es una serie de nmeros o letras que definen un bloque del dialplan dentro del cual se ejecutan aplicaciones o funciones de la PBX.

    El dialplan se puede escribir tambin en lenguaje AEL y LUA. Como en este libro no se van a utilizar es mejor desactivar los respectivos mdulos:

    nano /etc/asterisk/modules.conf

    al final del archivo se aade:

    noload => pbx_ael.sonoload => pbx_lua.so

    Se guardan los cambios y se reinicia Asterisk:

    service asterisk restart

    En este prrafo se presentar la configuracin base del archivo para luego enriquecerlo a lo largo del libro. Este archivo se divide en tres bloques:

    Parte general Parte dedicada a las variables globales el dialplan

    En la columna descripcin, en negrita, el valor asociado al parmetro. Al final del modulo, la configuracin completa del archivo.

    Parmetro Descripcin[general] etiqueta que da inicio a la parte generalstatic no=cuando se modifica una extensin en el

    dialplan el modulo pbx_config reescribir este archivo y se perdern todos los comentarios presentes.yes=el modulo pbx_config no actualiza automticamente el dialplan

    writeprotect si writeprotect=no y static=yes y se guarda la

    50

  • Parmetro Descripcinconfiguracin del dialplan con el comando dialplan save se perdern todos los comentarios presentes en el archivo.si writeprotect=yes no se perdern los comentarios y se desactiva el comando dialplan save

    autofallthrough yes=si una llamada, por cualquier motivo, se sale del dialplan ser terminada

    extenpatternmatchnew yes=mejora la velocidad de elaboracin del dialplan para contextos con un numero elevado de extensiones.

    clearglobalvars no=si se recarga el dialplan, las variables globales mantendrn su valor definidoyes=si se recarga el dialplan, las variables globales sern reajustadas y asociadas nuevamente

    [globals] desde esta etiqueta empieza la definicin de las variables globales.

    1000 se asocia a la variable 1000 un valor. En este caso SIP/1000

    JUST se asocia a la variable JUST el valor SIP/justvoipmarko se asocia a la variable marko el valor

    IAX2/marko

    Terminada la configuracin general y globals se empieza a construir el dialplan. Para iniciar se crearan dos contexto: internas y externas. En uno se definir la parte accesible a todas las extensiones y en el otro la parte dedicada a las llamadas salientes. De esta forma se podr controlar quienes tienen acceso y a que. Cada contexto se compone de extensiones y cada extensin de prioridades. Un primero ejemplo:

    [internas]

    se define el contexto internas

    exten => 123,1,Answer

    el comando exten => es para definir una extensin. 123 es la extensin, 1 es la prioridad y Answer es la aplicacin que se utilizar. En este caso Answer contesta la llamada

    La segunda linea:

    exten => 123,2,Playback(hello-world)

    la extensin es la misma, la prioridad es la numero 2 y en este caso la aplicacin es Playback cuya funcin es enviar el audio de una locucin al canal que est llamando

    51

  • La tercera linea:

    exten => 123,3,Hangup

    la extensin es siempre la misma, la prioridad es la numero 3 y la aplicacin es Hangup que lo que hace es terminar la llamada.

    Con este primer ejemplo ya se puede empezar a entender como funciona el dialplan. Desde una extensin conectada a Asterisk se marca 123 y si esa extensin tiene acceso al contexto internas, se ejecutar la primera linea, luego la segunda y por ultimo la tercera. Las prioridades indican el orden en que se procesa el dialplan para una determinada extensin.

    Otra forma de escribir esta parte del dialplan es:

    exten => 123,1,Answerexten => 123,n,Playback(hello-world)exten => 123,n,Hangup

    La n de la segunda y tercera linea est por next y aade una prioridad a la que la precede. Desde la versin 1.6.2.X de Asterisk hay una forma mucho ms sencilla de escribir el dialplan y es la que se utilizar en este libro:

    exten => 123,1,Answersame => n,Playback(hello-world)same => n,Hangup

    el same con que empieza la segunda y la tercera linea significa que se est trabajando con el mismo numero de extensin (123 en este caso) y ya no hace falta indicarlo.

    Ahora se configura otra extensin que permite escuchar la msica de espera MP3 creada en el prrafo 2.5:

    exten => 200,1,Answersame => n,MusicOnHold(mp3,60)same => n,Hangup

    Marcando la extensin 200, Asterisk contestar la llamada (Answer) ejecutar la aplicacin MusicOnHold que permite escuchar la msica de espera de una clase configurada en el archivo musiconhold.conf (es este caso la clase mp3). La segunda opcin (60) define el tiempo, en segundos, que se escuchar la msica. Pasados los 60 segundos, la llamada terminar (Hangup).

    En el dialplan se pueden definir contextos que incluyen otros contextos. De esta forma si un determinado contexto incluye otro, ese contexto tendr acceso a las extensiones presentes en el contexto incluido. Por ahora se definen dos de esta forma:

    [externas]

    52

  • include => internas

    [locales]include => internas

    Con estos primeros datos se construye el dialplan. Se renombra el archivo predefinido:

    mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.old

    se crea uno nuevo:

    nano /etc/asterisk/extensions.conf

    y se copian las siguientes lineas:

    [general]static=yeswriteprotect=yseautofallthrough=yseextenpatternmatchnew=yseclearglobalvars=yes

    [globals]1000=SIP/1000JUST=SIP/justvoipmarko=IAX2/marko

    [internas]exten => 123,1,Answersame => n,Playback(hello-world)same => n,Hangup

    exten => 200,1,Answersame => n,MusicOnHold(mp3,60)same => n,Hangup

    [externas]include => internas

    [locales]include => internas

    Se guarda la configuracin y se recarga el dialplan desde la consola de Asterisk:

    asterisk -rvvvvvvvvvvvvv

    CLI> dialplan reload

    53

  • Para ver el contexto externas:

    CLI> dialplan show externas[ Context 'externas' created by 'pbx_config' ] Include => 'internas' [pbx_config]-= 0 extensions (0 priorities) in 1 context. =-

    Para ver el contexto internas:

    CLI> dialplan show internas[ Context 'internas' created by 'pbx_config' ] '123' => 1. Answer() [pbx_config] 2. Playback(helloworld) [pbx_config] 3. Hangup() [pbx_config] '200' => 1. Answer() [pbx_config] 2. MusicOnHold(mp3,60) [pbx_config] 3. Hangup() [pbx_config]-= 2 extensions (6 priorities) in 1 context. =-

    Para una lista de comandos disponibles:

    CLI> help dialplan dialplan add extension Add new extension into context dialplan add ignorepat Add new ignore pattern dialplan add include Include context in other context dialplan debug Show fast extension pattern matching data structures dialplan reload Reload extensions and *only* extensions dialplan remove extension Remove a specified extension dialplan remove ignorepat Remove ignore pattern from context dialplan remove include Remove a specified include from context dialplan save Save current dialplan into a file dialplan set chanvar Set a channel variabledialplan set extenpatternmatch Use the Old extension pattern matching algorithm.dialplan set extenpatternmatch Use the New extension pattern matching algorithm. dialplan set global Set global dialplan variable dialplan show chanvar Show channel variables dialplan show globals Show global dialplan variables dialplan show Show dialplan

    54

  • Capitulo III

    Protocolo SIP y el archivo sip.conf

    El protocolo SIP es un protocolo de sealizacin que permite:

    localizar un usuario contactar un usuario para determinar su voluntad de establecer una sesin Negociacin de los media (audio/video) que se utilizarn a lo largo de la sesin Modificar una sesin establecida Terminar una sesin establecida

    Este protocolo ha sido definido por la IETF (The Internet Engineering Task Force) que es la entidad que se encarga de definir los estndar para la red Internet. En este caso el documento que define el protocolo SIP es el RFC (Request for Comments) 3261. En ese documento se explica como deben funcionar programas y/o dispositivos que quieran implementar el protocolo SIP. Desde un punto de vista del funcionamiento, los mensajes que se envan son una mezcla entre el protocolo HTTP (Hypertext Transfer Protocol) y el protocolo SMTP (Simple Mail Transfer Protocol). Dentro del protocolo SIP existen los mtodos, que representan las distintas solicitudes que un dispositivo puede enviar a otro. Los seis mtodos principales del protocolo SIP son:

    REGISTER INVITE BYE ACK CANCEL OPTIONS

    Asterisk PBX es un B2BUA (back-to-back user agent) y su funcin es la de hacer de intermediario entre los usuarios. Un usuario (o User Agent como definido en el protocolo SIP) enviar todas sus peticiones a Asterisk que se encargar de procesarlas y de esta forma permitir establecer sesiones media. Como Asterisk implementa distintos tipos de protocolos (SIP, IAX2, H323), l mismo se encargar de establecer llamadas entre usuarios que estn utilizando diferentes protocolos.

    En Asterisk, el archivo sip.conf es donde se definen las extensiones SIP, los proveedores SIP y, en general, todo lo relacionado con el protocolo SIP. El archivo sip.conf est estructurado en tres bloques:

    Una parte general donde se define la configuracin global del protocolo SIP. Al momento de configurar una extensin o una troncal, si no se definen algunos parmetros, estos sern tomados de la parte general del archivo. Un ejemplo son los codecs audio.

    Un bloque central donde se configura el registro a los proveedores VoIP y/o otros servidores Asterisk

    Una parte final donde se configuran las extensiones internas, las troncales y las conexiones a otros servidores Asterisk.

    Hay que pensar en Asterisk como un conmutador que quizs algn da hemos visto en la recepcin de

  • un Hotel o una empresa. Asterisk tiene las mismas funcionalidades. Con las extensiones configuradas se podrn llamar entre ellas, se podrn efectuar llamadas a telfonos fijos y/o celulares, utilizar proveedores SIP, Gateway PSTN, y aprovechar los tpicos servicios de una PBX como llamada en espera, desvo de llamadas, llamada a tres, contestador automtico, buzn de voz, etc.

    En los VPS Linode hay la posibilidad de activar una direccin IP local. Normalmente se utiliza para la creacin de una red local entre distintos VPS que estn en el mismo Datacenter. En este caso se activa para volver la configuracin del sip.conf lo ms real posible. Para hacerlo se entra en la pagina de administracin del VPS y en la pestaa Remote Access se escoge el enlace evidenciado en la imagen que sigue:

    Aparecer la direccin IP local:

    Se anota el valor y se configura una nueva tarjeta de red virtual:

    nano /etc/sysconfig/network-scripts/ifcfg-eth0:1

    Se aaden estas lineas:

    DEVICE=eth0:1BOOTPROTO=noneONBOOT=yesIPADDR=192.168.181.15NETMASK=255.255.128.0

    En IPADDR se pone la IP local creada en su VPS Linode. Se guardan las modificaciones y se reinicia la red del servidor:

    service network restart

    Con el comando:

    ifconfig

    57

  • se ver la nueva tarjeta de red configurada:

    3.1 sip.conf

    La configuracin que sigue abarca los parmetros ms importantes del sip.conf; cada lnea de la tabla viene acompaada por una breve explicacin Si es presente un asterisco antes del nombre del parmetro, significa que es una nueva funcionalidad aadida con la versin 1.8 de Asterisk o que han habido cambios en su configuracin. En negrita la opcin que se utilizar para cada parmetro. Al final de la tabla, la configuracin completa del archivo.

    Parmetro Descripcin

    [general] etiqueta que introduce la parte general de la configuracincontext default = el contexto donde llegarn las llamadas no

    autenticadas si allowguest=yesallowguest No = no se permiten llamadas entrantes (INVITE) de usuarios

    no autenticados (aumenta la seguridad de Asterisk)Yes = se permiten llamadas entrantes (INVITE de usuarios no autenticados

    allowtransfer En casi todos los telfonos SIP, a lo largo de una llamada, es posible presionar un botn para transferirla a otra extensin/numero. Este parmetro define si Asterisk aceptar este tipo de solicitudes. Posibles opciones: No y Yes

    realm si al servidor es asociado un dominio registrado, se puede definir este parmetro para que la autentificacin se haga utilizando ese nombre de dominio (digest authentication RFC2617). Se deja comentado

    *udpbindaddr Es la direccin IP y el puerto donde Asterisk se pondr a la escucha para las sealizacin SIP utilizando el protocolo UDP. Como desde la versin 1.8, Asterisk soporta el protocolo IPv6 para el protocolo SIP, es posible configurar cuatro escenarios distintos:

    1. 192.168.1.0 Asterisk aceptar conexiones solamente si enviadas a la direccin IPv4 indicada

    2. 2600:3c00::f03c:91ff:fedf:a455 - Asterisk aceptar conexiones solamente si enviadas a la direccin IPv6 indicada

    3. 0.0.0.0 Asterisk aceptar conexiones en todas las

    58

  • Parmetro Descripcin

    direcciones IPv4 presentes en el servidor Linux4. :: - Asterisk aceptar conexiones en todas las direcciones

    IPv4 y IPv6 dando prioridad a la primera IP que encuentra. En el caso de Linode ser IPv6

    Como se va a trabajar con IPv4, para que Asterisk escuche en todas las direcciones IPv4 puerto 5060 (el predefinido) el Valor es: 0.0.0.0:5060

    tcpenable Desde la versin 1.6 es posible configurar Asterisk para que permita la sealizacin SIP sobre el protocolo TCP Valor yes

    *tcpbindaddr Es la direccin IP y el puerto donde Asterisk se pondr a la escucha para las sealizacin SIP utilizando el protocolo TCP. Como para el protocolo UDP es posible utilizar cuatro escenarios distintos para indicar IP y puerto de escucha. En este caso se configurar para que escuche en todas las direcciones IPv4 puerto 5060. Valor: 0.0.0.0:560

    tcpauthtimeout Representa el nmeros de segundos que tiene a disposicin un cliente para registrarse utilizando el protocolo TCP. Si no lo hace antes del tiempo indicado, sera desconectado. Valor: 30

    tcpauthlimit Numero mximo de conexiones no autenticadas permitidas utilizando el protocolo TCP. Valor:100

    transport Define el protocolo de trasporte predefinido para la sealizacin SIP. Valor: udp

    srvlookup Permite hacer bsquedas de registros DNS SRV basadas en los nombres de dominio para llamadas SIP salientes del tipo: usuario@dominio. Asterisk hace esta bsqueda limitndose al primer valor encontrado. Valor: Yes

    maxexpiry Tiempo mximo, en segundos, permitido para REGISTER y SUBSCRIBE entrantes. Valor 3600 Esto significa que cuando una extensin se registre a Asterisk, mximo cada 3600 segundos tendr que volver a registrarse aunque en la configuracin de la extensin (Softphone, ATA, telfono SIP se haya indicado un valor mayor a 3600

    minexpiry Tiempo mnimo, en segundos, permitido para REGISTER y SUBSCRIBE entrantes. Valor: 60

    defaultexpiry Cuando un cliente se registra a Asterisk, enva en el paquete SIP REGISTER el tiempo de duracin de su registro. En el caso que no lo haga, Asterisk considerar que el registro durar el tiempo indicado en este parmetro expresado en segundos. Valor: 120

    mwiexpiry La mayora de los telfonos SIP, cuando la extensin registrada recibe un nuevo mensaje en el buzn de voz, lo sealan a travs de un icono en la pantalla o un indicador luminoso. Esto porque

    59

  • Parmetro Descripcin

    se suscribe a este tipo de servicio en el servidor Asterisk. Este parmetro indica cada cuantos segundos las suscripcin tendr que ser renovada. Valor 3600

    maxforwards Cada vez que un mensaje Sip se enva puede atravesar distintos servidores antes de llegar al destinatario. Con este parmetro se limita el numero de veces que se puede reenviar. Se utiliza tambin para evitar que se creen bucles. Valor. 70

    qualifyfreq Cada cuantos segundos enviar un paquete OPTIONS a la extensin registrada en Asterisk. Esto permite saber si la extensin misma es alcanzable y al mismo tiempo mantener abierta la conexin con la extensiones que se encuentran detrs de un NAT. El mtodo OPTIONS del protocolo SIP se utiliza tambin para conocer los mtodos disponible en un determinado cliente. Valor 60

    *preferred_codec_only Asterisk contesta a un INVITE entrante con un solo codec audio en lugar de enviar toda la lista de codecs configurados para una determinada extensin. Esto permite que el llamante enve el flujo audio con el codec que se ha establecido. Valor: no

    disallow all Se desactivan todos los codec audio y videoallow Se indican los codec audio y video utilizables. Pueden ser

    indicados uno por linea o en la misma linea separados por una coma:allow=alawallow=ulawoallow=alaw,ulawulaw: se utiliza en Estados Unidos, Canad y Australiaalaw = se utiliza en Asia, Europa, frica y Amrica Latina

    mohinterpret clase de msica de espera predefinida default mohsuggest Clase de msica de espera cuando un canal de tipo peer se pone

    en espera default parkinglot Asterisk, entre sus funcionalidades, permite parquear una

    llamada. Como desde la versin 1.6.X es posible configurar ms de un contexto de parqueo, en este parmetro se indica el predefinido. Valor: default

    language el idioma predefinido para las locuciones . Valor es (Espaol)relaxdtmf Configurar en yes si Asterisk tiene problemas en reconocer los

    DTMF (tonos) recibidos. Valor: nosendrpid Como se ver ms adelante cada mensaje SIP se compone de

    diferentes lineas. Cada linea se llama HEADER o cabecera. Este

    60

  • Parmetro Descripcin

    parmetro define se entre los distintos HEADER se enva tambin el Remote-Party-ID. Este parmetro es muy til para las transferencias atendida de las llamadas entre extensiones Valor: yes

    trustrpid yes = la cabecera Remote-Party-ID tiene que ser de confianza para ser aceptada.

    rpid_update En algunos casos, la nica forma de actualizar los datos de una sesin es enviando un paquete SIP UPDATE. Con este parmetro se activa o desactiva. Valor: yes

    prematuremedia En Asterisk es posible enviar audio aunque la llamada no ha sido contestada. Un ejemplo es cuando llamamos un numero celular (en Colombia) y si nadie contesta escuchamos la voz que dice "Sistema correo de voz. Tendr cobro a partir de este momento". Si colgamos, no pagamos nada porque la llamada realmente no ha sido contestada. Esta funcionalidad se llama "Early Media". Durante el Early Media, los tonos DTMF no funcionan y no se pueden utilizar. Este comportamiento se obtiene poniendo como valor no y en el dialplan utilizando la aplicacin Progress

    useragent Asterisk se presentar con este nombre al momento de comunicarse con otros servidores o proveedores SIP. Valor: VozToVoice v. 1.0 Personalizar

    sdpsession asterisksdpowner asterisk dtmfmode protocolo para el envo de los DTMF (Dual-Tone Multi-

    Frequency). Seran los tonos que se generan cuando se hunden las teclas del telfono. Valor: rfc2833 Otro valor bastante comn es inband. Con inband los tonos se envan en el flujo audio (protocolo RTP). Inband no funciona con el codec audio G729 y G722. A cada tecla del telfono estn asociados dos tonos de diferente frecuencia:

    RFC4733videosupport no=no se activa el soporte para vdeo llamadas

    61

  • Parmetro Descripcin

    yes=se activa el soporte para vdeo llamadasmaxcallbitrate Banda mxima utilizable para vdeo llamadas (predefinida 384

    kb/s)callevents yes=cuando el estado de una extensin cambia, el Asterisk

    Manager Interface (AMI) genera el correspondiente evento authfailureevents yes=el AMI generar un evento cuando una peer no se puede

    autenticar con la PBXalwaysauthreject yes=cuando un INVITE o un REGISTER es rechazado por

    Asterisk, en lugar de enviar el verdadero motivo del rechazo, Asterisk contestar siempre con un 401 Unauthorized. De esta forma no da pistas a los que estn intentando acceder al sistema

    use_q850_reason Yes Permite el envo de los cdigos Q850 en el Header Reason que normalmente se utiliza para conocer el porque una llamada SIP ha sido terminada. Esta serie de cdigos, es utilizado por algunos Gateway para mejorar la compatibilidad con