Instalación e Configuración dun PBX Asterisk en Debian Lenny

De Wiki do Ciclo ASIR do IES de Rodeira
Revisión feita o 26 de xuño de 2014 ás 09:55 por Xavi (conversa | contribucións) (Nova páxina: "==Introducción== O obxectivo principal é a instalación dun PBX funcional mediante Asterisk nun equipo informático con Debian Lenny, actualmente en estado "testing". O Equipo d...")
(dif) ← Revisión máis antiga | Revisión actual (dif) | Revisión máis nova → (dif)
Saltar á navegación Saltar á procura

Introducción

O obxectivo principal é a instalación dun PBX funcional mediante Asterisk nun equipo informático con Debian Lenny, actualmente en estado "testing". O Equipo dispon do seguinte hardware:

  • CPU: Pentium III (Coppermine) 1Ghz
  • RAM: 512Mb SDRAM
  • Disco Duro: IDE 40Gb
  • Tarxeta Rede: 100M Realtek RTL8139
  • Tarxetas de Telefonía:
    • Cologne Chip Designs GmbH ISDN (HFC-PCI) rev 02 (Beronet Billion BN250 1 porto BRI)
    • Tiger Jet Network Inc. Tiger 3XX (OpenVox A400P)


O kernel actual é o 2.6.26-1-686, e ten incorporados os drivers para RDSI de isdn4linux, que cargan o módulo hisax para as dúas tarxetas. En futuras versións do kernel, o sistema a empregar será o máis moderno mISDN que incorpora o driver misdn útil para a tarxeta Cologne Chip Designs. Para a tarxeta OpenVox A400P se emprega habitualmente o driver zaptel.

O módulo hisax está soportado por asterisk para tarxetas BRI, aínda que parece que é necesario un parche

A tarxeta RDSI Cologne Chip Design e soportada normalmente polo driver bristuff de junghanns, que parece ser o de máis calidade, pero que precisa de parchear o Asterisk (existen scripts automatizados). Neste caso (Beronet Billion BN250) parece que o driver ideal e o misdn coa ventaxa de pasar a formar parte do próximo kernel Linux. A partir do kernel 2.6.27 ven incluido mISDN 2.0, non dispoñible en Debian neste momento, o instalaremos para probalo con Asterisk. A versión 1.x de misdn pode instalarse perfectamente no kernel de Lenny, mentras que a versión 2.x é necesario utilizala mediante chan_lcr, proporcionada pola aplicación Linux Call Router.

Mais drivers que poden soportar a tarxeta RDSI son:

A versión de Asterisk que imos empregar é a última Asterisk 1.6, e o faremos dende 0, xa que non está dispoñible ningún tipo de paquete Debian para esta versión. A versión 1.6 presenta notables cambios na súa arquitectura que iremos abordando a medida que avancemos na instalación. Un dos máis importantes é o abandono dos drivers zaptel en favor de DAHDI (Digium Asterisk Hardware Device Interface) que consta de dúas partes, os módulos para o kernel (dahdi-linux) e as utilidades de configuración (dahdi-tools), reemplazando /etc/asterisk/zapata.conf por /etc/asterisk/chan_dahdi.conf e /etc/zaptel.conf por /etc/dahdi/system.conf. Ainda que este cambio parece moi drástico, a rama 1.4 tamén vai abandonar o driver zaptel.

Esquema de Rede

Esquema da Rede

O PBX Asterisk estará situado no aula IF3 de Informática, conectada a Rede Telefónica mediante unha liña RDSI por medio do interface BRI, e tendo doble acceso a Internet, un directo a través da ADSL sobre RDSI da propia IF3 e outro a través da liña ADSL dos ciclos utilando Gandalf como pasarela e router. O acceso principal a Internet e o acceso dende fora do centro o PBX Asterisk se fará a través da liña ADSL dos ciclos e de Gandalf. En caso de fallo da ADSL dos ciclos, o PBX empregaría a ADSL de IF3.

Unha posibilidade a estudiar sería tamén o balanceo das chamadas VoIP sobre as dúas liñas ADSL, de xeito que se utilicen simultáneamente si se atopan dispoñibles e ademáis contemplar a posibilidade de un servidor Asterisk de seguridade que tomaría o relevo en caso de caída do principal. Electrónica dispón tamén doutra liña ADSL que sería perfectamente posible utilizar do mesmo xeito.

Será posible conectar e utilizar o servidor PBX Asterisk:

  • Dende IF3, IF4 e o Departamento de Informática
  • Dende as aulas de Administrativo, Electrónica e Telecomunicacións, aula de Informática da ESO e Aula Mentor.
  • Dende Internet, tanto a través da liña ADSL de IF3 como a liña ADSL dos ciclos. Tamén podería utilizar a ADSL de Electrónica

O acceso principal será a través do ADSL dos Ciclos, para o que Gandalf terá que facer o rutado necesario.

Os casos de uso poderían ser os seguintes:

Chamada dende a Rede Telefónica o número da liña RDSI de IF3

  • Dependendo do marcado podemos encamiñala hacia: Telefono analóxico conectado o PBX-Asterisk, Teléfono IP conectado en calquera punto da rede, Softphone de calquera punto da rede, Teléfono IP ou softphone conectado a Internet fora do centro e rexistrado no noso PBX-Asterisk, chamada mediante un proveedor VoIP externo a outro número conectado a rede telefónica dentro ou fora de España ou a un softphone ou teléfono IP rexistrado con ese proveedor.

Chamada dende Internet (externa mediante VoIP) a través do PBX-Asterisk.

  • Igual que o punto Anterior

Chamada dende un teléfono interior (Softphone, teléfono IP ou teléfono de liña telefónica)

  • Igual que o primeiro punto

Como en realidade dispoñemos de dúas liñas telefónicas (a da IF3 e a de Electrónica) a configuración poderá ser máis adiante moito máis completa, pero este traballo deberá estudiarse con posteridade a instalación, xa que a liña de Electrónica será xestionada por outro PBX con Trixbox.

Servicios Planeados

Contestador Automático
Permitirá a cada extensión utilizar un contestador automático.
Recepción de Correos
Permitirá que se poda escoitar o correo electrónico de cada usuario vía telefónica.
Chamadas dende telefonía fixa
As chamadas recibidas a través de liña telefonica conmutada se poderán redirixir a través de varios proveedores de VoIP, a liñas de teléfono VoIP directamente rexistradas co servidor Asterisk, ou co servidor Trixbox, a outras liñas telefónicas fixas ou os teléfonos conectados o servidor Asterisk ou Trixbox.
Chamadas a través de VoIP
Os encaminamentos serán similares o punto anterior.
Avisos
Poderanse programar avisos telefónicos que se produciran no momento indicado. Por exemplo, sms para aviso de claustros ou reunións de departamentos.
Chamadas entre proveedores VoIP
As chamadas entre os clientes dun mismo proveedor IP son normalmente gratuitas, o Asterisk será capaz de encamiñar as chamadas dun proveedor IP a outro co que as chamadas entre varios proveedores IP serán posibles e gratuitas. Para instalar este servicio se terá que abrir contas en varios proveedores IP xa sexan gratuitas ou de pago.

Servicios Suxeridos

Salas de reunións
Para realizar charlas entre varias persoas, restrinxido a un grupos de extensións por departamentos. ¿Reunión de Departamento telefónica?, ¿Clases vía telefónica? ¿Clases con voz sintetizada programadas vía telefónica?.
Encamiñamento de teléfonos móbiles
Dispoñendo de tarxetas GSM sería posible facer chamadas fixo<->móbil<->VoIP o precio da chamada máis barata posible entre dous números do proveedor de telefonía móbil elexido. Incluso e posible que existan ofertas de chamadas gratuitas móbil->móbil que poderías aproveitarse para facer chamadas gratuitas móbil<->fixo e móbil<->VoIP.
Consultas de calificacións vía telefónica
De notas ou outro tipo de información persoal. A resposta pode ser vía voz ou vía sms.
Consultas da Wikipedia ou apuntes
Permitirá realizar consultas que se responderán via voz, por exemplo termos dun diccionario ou da wikipedia. A dificultade maior e atopar un sistema de recoñecimento de voz libre e de calidade.
Integración de Asterisk nunha plataforma de e-learning
Permitirá utilizar os servicios de asterisk integrados nunha plataforma e-learning como Dokeos ou Moodle.
Solicitude de documentación vía telefónica
Será posible solicitar documentación vía telefónica que será enviada a unha conta de correo electrónico (por exemplo apuntes ou pdf's coas notas).
Interface Web de Configuración
Creación dunha interface que permita os usuarios configurar os distintos servicios os que teñan acceso.

Instalación de Debian

A instalación será a habitual dunha Debian Lenny, para elo baixamos o CD de instalación por rede da páxina oficial de Debian e instalaremos so o sistema base.

O primeiro que temos que facer unha vez actualizado o sistema base é actualizar o sistema completo e instalar aplicacións adicionais, para facer esto iniciamos a sesión como root e modificamos o ficheiro /etc/apt/sources.list para incluir:

 deb http://www.debian-multimedia.org lenny main

Posteriormente actualizamos o sistema:

 apt-get update
 apt-get dist-upgrade

O sistema base lle engadiremos os seguintes paquetes:

ssh
Para acceder e configurar remotamente o equipo Asterisk.
iptraf
Ferramenta de supervisión de rede.
nmap
Aplicación de revisión de portos.
rcconf
Ferramenta de configuración de servicios.
vim
Editor de texto de consola
wireless-tools
Ferramentas de configuración de tarxetas wireless.
gnome
Entorno gráfico de usuario, por si queremos utilizar ferramentas gráficas (consultar a web, descargar co navegador ...). En principio non estará activo.
apache
Para as ferramentas de configuración web de asterisk.
bridge-utils
Ferramentas de configuración de rede, particularmente para facer pontes de rede.
ebtables
Ferramenta de firewall e rutado para pontes de rede.

Executamos:

 apt-get install ssh iptraf rcconf vim gnome apache2 wireless-tools gnome bridge-utils ebtables

Configuración Inicial do Sistema Operativo

En primeiro lugar, desactivaremos o inicio automático do xestor gráfico de entrada de usuario (gdm) mediante a ferramente rcconf, e posteriormente facemos uns pequenos axustes ó editor vim editando /etc/vim/vimrc:

  • Descomentamos syntax on (Os comentarios comezan con " )
  • Engadimos set noai

Agora poñemos un nome o host, editando /etc/hostname. Neste caso ASTERISK-RODEIRA

Instalación de Asterisk

Asterisk 1.4.21 está dispoñible para Debian lenny, polo que a súa instalación é tan sencilla como facer:

 apt-get install asterisk

Sen embargo imos instalar Asterisk 1.6 e configuralo para o noso hardware.

Descarga de Software

apt-get install ntp

 --- NO ---
 apt-get install ntpdate
 crontab -e 
 1 5 * * * /usr/sbin/ntpdate-debian
 ----------

En primeiro lugar descargaremos a última versión de Asterisk 1.6 e paquetes relacionados:

 wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.6.0.5.tar.gz
 wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.6.0.1.tar.gz
 wget http://downloads.digium.com/pub/telephony/dahdi-linux/dahdi-linux-2.1.0.4.tar.gz
 wget http://downloads.digium.com/pub/telephony/dahdi-tools/dahdi-tools-2.1.0.2.tar.gz
 wget http://downloads.digium.com/pub/libpri/libpri-1.4.9.tar.gz
 wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-alaw-current.tar.gz
 wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-g722-current.tar.gz
 wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-g729-current.tar.gz
 wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-gsm-current.tar.gz
 wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-sln16-current.tar.gz
 wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-ulaw-current.tar.gz
 wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-wav-current.tar.gz

De aquí se poden descargar os drivers mISDN versión 1 e 2:

 wget http://www.misdn.org/downloads/releases/mISDN-1_1_9.1.tar.gz
 wget http://www.misdn.org/downloads/releases/mISDNuser-1_1_9.1.tar.gz
 wget http://www.colognechip.com/download/mISDN/socket/mISDN.tar.gz
 wget http://www.colognechip.com/download/mISDN/socket/mISDNuser.tar.gz
 

A versións do kernel a partir do 2.6.27 xa inclúen os drivers mISDN v2, de modo que é a que utilizaremos. Este kernel non está dispoñible en Debian, de modo que baixamos o kernel vanilla máis actual (vanilla quere decir que é o kernel orixinal, sin parches de ningunha distribución) que xa os inclúe. O descargamos no directorio /usr/src.

 wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.5.tar.gz

Instalamos o software necesario para compilar o kernel, os módulos e Asterisk:

 apt-get install kernel-package libncurses5-dev zlib1g-dev linux-headers-2.6-686 automake

Descomprimimos e configuramos o kernel. Pode facerse dende un terminal en gnome ou dende a consola (texto). No primeiro caso faremos a configuración do kernel con make gconfig, no segundo caso con make menuconfig.

 cd /usr/src
 tar -xvzf linux-2.6.28.5.tar.gz
 cd linux-2.6.28.5
 make menuconfig

Poñemos as seguintes opcións:

 Enable The Block Layer -> I/O Schedulers -> Default I/O Scheduler: Deadline
 Processor Type And Features -> Preemption Model - Low Latency Desktop
 Processor Type And Features -> Timer Frecuency: 1000Hz
 Networking Support -> Phonet Protocols Family: M
 Device Drivers -> ISDN Support -> Modular ISDN Driver: *
 Device Drivers -> ISDN Support -> CAPI 2.0 subsystem -> (Todo seleccionado)
 Device Drivers -> Telephony Support: (Todo M)

Creamos o paquete co núcleo e o instalamos, reiniciando co novo núcleo:

 make-kpkg --initrd --rootcmd fakeroot kernel-image kernel-headers
 cd ..
 dpkg -i linux-image-2.6.28.3_2.6.28.3-10.00.Custom_i386.deb
 ln -s linux-2.6.28.3 linux
 shutdown -r now

Instalación dos módulos hardware de telefonía

Imos utilizar mISDNv2 para o módulo RDSI e dahdi 2.1 para o módulo RTB.

mISDNv2

probamos o módulo mISDN

 modprobe hfcpci
 modprobe mISDN_dsp

A saída en /var/log/kern.log debería ser algo similar a esto:

 hfcpci 0000:00:09.0: PCI INT A -> Link[LNKB] -> GSI 11 (level, low) -> IRQ 11
 mISDN_hfcpci: found adapter CCD/Billion/Asuscom 2BD0 at 0000:00:09.0
 mISDN: HFC-PCI driver 2.0
 HFC-PCI: defined at mem 0xe1b2c000 fifo 0xdf558000(0x1f558000) IRQ 11 HZ 1000
 HFC 1 cards installed
 DSP modul 2.0
 mISDN_dsp: DSP clocks every 64 samples. This equals 8 jiffies.
 mISDN_dsp_element_register: hwec registered

A continuación instalaremos o paquete mISDN_utils versión 2

 mkidr mISDNuser
 cd mISDNuser
 tar -xvzf mISDNuser.tar.gz
 make
 make install

Desgraciadamente Asterisk non soporta a versión 2 de mISDN incluída no kernel mediante chan_misdn (so mISDN v1), nin parece que teña plans de facelo. A solución é ou ben utilizar mISDN v1, sobreescribindo as versións que traerán os kernel, ou utilizar chan_lcr...

DAHDI

O driver dahdi e o sustituto de zaptel nas últimas versións de asterisk. O ficheiro equivalente a /etc/zaptel.conf vai ser /etc/dahdi/system.conf e o sustituto de /etc/asterisk/zapata.conf e /etc/asterisk/chan_dahdi.conf.

O compilamos para soportar a tarxeta cos módulos FXO e FXS.

 tar -xvzf dahdi-linux-2.1.0.4.tar.gz 
 cd dahdi-linux-2.1.0.4
 make
 make install

Agora necesitaremos compilar as utilidades de manexo do driver dahdi.

  tar -xvzf dahdi-tools-2.1.0.2.tar.gz
  cd dahdi-tools-2.1.0.2
  ./configure
  make menuconfig
  make
  make install

No momento de facer o ./configure, o sistema e posible que visualice a seguinte mensaxe:

 checking for GENERIC_HDLC_VERSION in linux/hdlc.h... no
 configure: GENERIC_HDLC_VERSION version 4 not found, disabling sethdlc.

Esto é debido a un bug no configure que podemos solucionar do seguinte xeito:

  • Editamos configure.ac e buscamos a liña que pon AST_C_DEFINE_CHECK([HDLC], [GENERIC_HDLC_VERSION], [linux/hdlc.h], [4]) e a cambiamos por AST_C_DEFINE_CHECK([HDLC], [GENERIC_HDLC_VERSION], [linux/hdlc/ioctl.h], [4])
  • Executamos autoconf
  • Editamos configure e buscamos a liña que pon #include <linux/hdlc/ioctl.h> e lle poñemos diante ##include <net/if.h>
  • Executamos: ./configure, make menuconfig e make install

Insertamos o novo módulo con modprobe dahdi e a saída no /var/log/kern.log debera ser similar a esta:

 dahdi: Telephony Interface Registered on major 196
 dahdi: Version: 2.1.0.4
 Freshmaker version: 71
 Freshmaker passed register test
 Module 0: Installed -- AUTO FXS/DPO
 Module 1: Installed -- AUTO FXO (FCC mode)
 Module 2: Not installed
 Module 3: Not installed
 Found a Wildcard TDM: Wildcard TDM400P REV E/F (2 modules)
 dahdi: Registered tone zone 6 (Spain)

Debemos editar /etc/dahdi/system.conf e cambiar loadzone e defaultzone a es ...

LCR

LCR (Linux Call Router) e un pequeno PBX que imos utilizar únicamente para que Asterisk poda acceder a tarxeta RDSI. En primeiro lugar o descargamos e o descomprimimos.

 wget http://www.linux-call-router.de/download/lcr-1.3/lcr_20090107.tar.gz
 tar -xvzf lcr_20090107.tar.gz
 cd lcr

E necesario parchear o arquivo /usr/include/mISDNuser/mbuffer.h, xa que os includes están mal postos, deben ser:

 #include <mISDNuser/mISDNif.h>
 #include <mISDNuser/mlayer3.h>

Compilamos e instalamos LCR

 ./configure --with-asterisk --with-ssl
 make
 make install
 ln -s /usr/local/lcr /etc/lcr

Comprobamos as chamadas:

  lcr fork
  lcradmin status

Facemos unha chamada o número da RDSI vía telefono PSTN, comprobando a recepción no terminal.

Editamos /etc/lcr/routing.conf e rediriximos TODO a Asterisk

 [main]
        : remote application=asterisk
Nota para Asterisk 1.6.1.0

A versión de LCR que estou a probar non compila correctamente contra Asterisk 1.6.1.0, dando os seguintes erros:

 make  all-am
 make[1]: Entrando no directorio `/root/lcr'
 gcc  -I/usr/include/mISDNuser -DCONFIG_DATA="\"/usr/local/lcr\"" -DSHARE_DATA="\"/usr/local/lcr\"" -DLOG_DIR="\"/usr/local/lcr\""   
 -DEXTENSION_DATA="\"/usr/local/lcr/extensions\""  -D_GNU_SOURCE -fPIC -c chan_lcr.c -o chan_lcr.po
 chan_lcr.c: In function \u2018lcr_write\u2019:
 chan_lcr.c:1998: error: incompatible type for argument 2 of \u2018bchannel_transmit\u2019
 chan_lcr.c: In function \u2018lcr_read\u2019:
 chan_lcr.c:2038: error: incompatible types in assignment
 chan_lcr.c: In function \u2018load_module\u2019:
 chan_lcr.c:2535: warning: passing argument 2 of \u2018ast_register_application2\u2019 from incompatible pointer type
 make[1]: *** [chan_lcr.po] Erro 1
 make[1]: Saíndo do directorio `/root/lcr'
 make: *** [all] Erro 2

O problema e o cambio no campo data da estructura ast_frame en /usr/include/asterisk/frame.h, que agora é:

 union { void *ptr; uint32_t uint32; char pad[8]; } data;

A solución consiste en poñer na liña 1998 de chan_lcr.c:

 bchannel_transmit(call->bchannel, f->data.ptr, f->samples);

E na liña 2038:

 call->read_fr.data.ptr = call->read_buff;

Asterisk

Descargamos libresample e nbs do árbol de proxectos de asterisk, e os compilamos e instalamos:

 svn co http://svn.digium.com/svn/thirdparty/libresample/trunk
 svn co http://svn.digium.com/svn/nbs/trunk/
 cd nbs
 make&&make install
 cd ../libresample
 make&&make install
 

Descomprimimos o tar.gz do asterisk:

 tar -xvzf asterisk-1.6.0.5.tar.gz
 cd asterisk-1.6.0.5

Descargamos e instalamos o codec ilbc (low bit rate codec) en codecs/ilbc dentro da carpeta de asterisk

 wget http://www.ietf.org/rfc/rfc3951.txt
 wget http://www.ilbcfreeware.org/documentation/extract-cfile.awk  
 awk -f extract-cfile.awk rfc3951.txt > codecs/ilbc

Tamén se pode facer co script situado en contrib/scripts/get_ilbc_source.sh dentro do directorio de instalación de Asterisk

Instalamos as dependencias de Asterisk e FreePBX:

 apt-get install libasound2-dev festival-dev speech-tools festvox-ellpc11k ffmpeg libavcodec-dev libspandsp-dev
 apt-get install libjack-dev libsamplerate0-dev libosptk3-dev libssl-dev libtonezone-dev unixodbc-dev libmysqlclient15-dev
 apt-get install libltdl3-dev libsqlite0-dev freetds-dev portaudio19-dev libiksemel-dev libopenh323-dev libusb-dev libspeex-dev libspeexdsp-dev
 apt-get install libogg-dev libvorbis-dev libcurl4-gnutls-dev libcurl4-openssl-dev libgtk2.0-dev liblua5.1-0-dev libgmime-2.0-2-dev
 apt-get install libfreeradius-dev libglade2.0-dev libgmime-2.0-2-dev libfreeradius-dev libsqlite3-dev
 apt-get install libmysqlclient15-dev libbluetooth-dev
 apt-get install cvs libssl-dev
 apt-get install doxygen doxygen-gui doxygen-doc
 wget http://forja.guadalinex.org/repositorio/frs/download.php/153/festvox-palpc16k_1.0-1_all.deb
 dpkg -i festvox-palpc16k_1.0-1_all.deb

Configuramos e compilamos Asterisk:

 ./configure
 make menuconfig
 make
 make install
 make samples
 make progdocs

Non configurar "module embedding" (enlazados estáticamente), xa que a compilación falla nesta versión de Asterisk, de todos os xeitos non se obtén ningunha ventaxa práctica sobre os módulos dinámicos.

Actualización de Asterisk 1.6.0.5 a Asterisk 1.6.0.6

Para compilar Asterisk 1.6.0.6 se sigue o mesmo procedimento descrito anteriormente, pero presentanse dous problemas:

 In file included from app_dahdiras.c:50:
 /usr/include/dahdi/user.h:736: error: expected specifier-qualifier-list before __s32
 /usr/include/dahdi/user.h:939: error: expected specifier-qualifier-list before __s32

Que se soluciona editando app_dahdiras.c e engadíndolle

 #include <asm/types.h> 

Outro erro posible e por non instalar ilbc e seleccionar a construcción do codec:

 codec_ilbc.c:40:30: error: ilbc/iLBC_encode.h: Non hai tal ficheiro ou directorio
 codec_ilbc.c:41:30: error: ilbc/iLBC_decode.h: Non hai tal ficheiro ou directorio

E se soluciona colocando o codec en codecs/ilbc do xeito indicado no apartado anterior.

Unha vez compilado Asterisk (ou antes si se quere) se fai unha copia de seguridade da configuración anterior (/etc/asterisk) e se desinstala dende o directorio da versión anterior (make uninstall). Logo podemos instalar a nova versión do modo habitual e recuperar a configuración.

E importante tamén recordar copiar chan_lcr.so e chan_lcr.po a /usr/lib/asterisk/modules.

Envío e recepción de Fax

NVFaxdetect

AsterFax

apt-get install iaxmodem hylafax-server hylafax-client

Conexión con Google Talk (Gtalk)

Google Talk utiliza o protocolo Jabber, e Jingle para transportar voz e vídeo. A partir da versión 1.4 Asterisk da soporte a estes dous protocolos, polo que é posible integrar telefonía de este servicio. A configuración realízase mediante os seguintes ficheiros:

  • gtalk.conf
 [general]
 context=GtalkLine               ;;Context to dump call into
 bindaddr=172.20.100.100         ;;Address to bind to
 allowguest=yes                  ;;Allow calls from people not in list of peers
 [guest]                         ;;special account for options on guest account
 disallow=all                            
 allow=ulaw
 allow=alaw
 context=GtalkLine
 connection=gtalk_asterisk
  • jabber.conf
 [general]
 debug=no                                ;;Turn on debugging by default.
 autoprune=no                            ;;Auto remove users from buddy list. 
 autoregister=no                         ;;Auto register users from buddy list.
 [gtalk_asterisk]                        ;;label
 type=client                             ;;Client or Component connection
 serverhost=talk.google.com              ;;Route to server for example, talk.google.com
 username=rodeiravoip@gmail.com/Talk     ;;Username with optional resource.
 secret=********                         ;;Password
 ;priority=1                             ;;Resource priority
 port=5222                               ;;Port to use defaults to 5222
 usetls=yes                              ;;Use tls or not
 usesasl=yes                             ;;Use sasl or not
 statusmessage="Asterisk IESRODEIRA VoIP Server" ;;Have custom status message for Asterisk.
 timeout=100                             ;;Timeout on the message stack.
  • extensions.conf
 ....
 [GtalkLine]
 exten => s,1,NoOp(Call from Gtalk)
 ....

Para chamar a un contacto de Gtalk dende, por exemplo, a extensión 300 empregaríamos:

 ....
 exten => 300,1,Dial(gtalk/gtalk_asterisk/contacto_a_chamar@gmail.com)
 ....

Festival

Configuramos festival para Asterisk:

  • En /usr/share/doc/examples/festival.scm, engadimos o final:
 (set! voice_default 'voice_JuntaDeAndalucia_es_pa_diphone)
 (define (tts_textasterisk string mode)
   "(tts_textasterisk STRING MODE)
   Apply tts to STRING. This function is specifically designed for
   use in server mode so a single function call may synthesize the string.
   This function name may be added to the server safe functions."
   (let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
   (utt.wave.resample wholeutt 8000)
   (utt.wave.rescale wholeutt 5)
   (utt.send.wave.client wholeutt)))
  • Copiamos /usr/share/doc/examples/festival.scm a /etc
  • Copiamos /usr/share/doc/examples/festival.init /etc/init.d/festival
  • chmod 744 /etc/init.d/festival
  • Creamos /etc/default/festival con RUN_FESTIVAL=yes
  • Habilitamos o inicio do servicio con rcconf

FreePBX [Sen Rematar]

wget http://puzzle.dl.sourceforge.net/sourceforge/amportal/freepbx-2.5.1.tar.gz


 adduser asterisk --home /dev/null --shell /bin/false --gecos "asterisk PBX" --disable-password
 adduser www-data asterisk

Poñemos

 export APACHE_RUN_USER=asterisk
 export APACHE_RUN_GROUP=asterisk

en /etc/apache2 envvars

Flash Operator Panel [ Sen Rematar ]

Asterisk-GUI [Sen Rematar]

Consideracións de Seguridade

Seguridade da Rede

  • Asterisk abre alguns portos para chamadas VoIP entrantes. Debemos verificar os portos e as direccións IP nos ficheiros de configuración do canal.
  • Si se habilita o interface manager en manager.conf debemos asegurarnos que so se pode acceder de modo seguro, a través dunha VPN ou dun túnel SSH.
  • Para todas as conexións TCP/IP de Asterisk se poden deseñar listas ACL (Access Control Lists) que permitan ou deneguen o acceso os servicios Asterisk. Debemos verificar as opcións de configuración "permit" e "deny" en manager.conf e nas configuracións dos canais VoIP, como iax.conf e sip.conf.
  • O protocolo IAX2 soporta autenticación RSA e encriptación AES para voz e sinalización. SIP non, para as versións actuais de Asterisk.

Seguridade do dialplan

Debemos utilizar contextos de extensión para aillar a saida ou os servicios de pago de calqueira conexión entrante
Deberíamos considerar que si calqueira canal, liña de entrada, etc. pode acceder a un contexto de extensión, terá a capacidade de acceder a calquera extensión dentro de ese contexto. Polo tanto, NON se debería permitir o acceso a servicios saíntes ou de pago en contextos que son accesibles (sobre todo si non é necesaria unha password) dende os canais de entrada, xa sexan IAX, FX ou outros trunks, ou incluso dende estacións da propia rede nas que non teñamos plena confianza. En particular nunca debemos poñer servicios de saída de pago no contexto default. E posible incluir o contexto por defecto en outros contextos mediante include => default na sección apropiada.
Non debemos olvidarnos de colocar o contexto de demostración (demo) fora do contexto por defecto (default).

Seguridade dos Logs

Os ficheiros de log de Asterisk poden ter información confidencial, como passwords, polo que os debemos protexer axeitadamente.

Configuración da Rede Local

Mapa Telefónico

Nesta sección se expoñerá cal é o esquema da rede onde se vai a implementar o servicio de VoIP, os problemas surxidos e as solucións aportadas. O mapa telefónico será o seguinte:

Mapa Telefónico

NAT

O protocolo SIP é especialmente problemático co NAT, e a configuración na que estamos a traballar é complicada, xa que temos un doble NAT: No router que da acceso a Internet (69.55.97.254) e no router Linux (gandalf) que da acceso as redes 172.20.0.0 e 172.16.0.0. O router que da acceso a a Internet (69.55.97.254) pola rede 69.55.97.0 ten todos os portos de entrada mapeados a gandalf (69.55.97.40).

gandalf(69.55.97.40) ten habilitado o forwarding e mapeados os portos RTP, SIP e IAX o servidor Asterisk mediante DNAT para posibilitar a recepción de chamadas.

Regras iptables

No servidor gandalf (69.55.97.40) e necesario configurar as seguines reglas iptables para que Asterisk teña acceso a internet e tamén para ser accesible:

  • SNAT para a saída a Internet do servidor Asterisk
 iptables -t nat -A POSTROUTING -o $INTERNET_ETHERNET -j SNAT --to-source 69.55.97.40
  • Servicio STUN
 iptables -A FORWARD -p tcp --dport 3478 -j ACCEPT
 iptables -A FORWARD -p udp -m udp --dport 3478 -j ACCEPT
  • Sinalización SIP. Alguns servidores utilizan tamén o porto TCP 5060
 iptables -A FORWARD -p udp -m udp --dport 5060 -j ACCEPT
 iptables -A FORWARD -p udp -m udp --dport 5060 -j ACCEPT
  • RTP
 iptables -A FORWARD -p udp -m udp --dport 10000:20000 -j ACCEPT
  • Sinalización IAX2
     iptables -A FORWARD -p udp -m udp --dport 4569 -j ACCEPT
  • Sinalización IAX
     iptables -A FORWARD -p udp -m udp --dport 5036 -j ACCEPT
  • MGCP: media gateway control protocol
     iptables -A FORWARD -p udp -m udp --dport 2727 -j ACCEPT

Alternativamente tamén podemos abrir completamente o acceso o servidor Asterisk (mellor así para o soporte de GTalk):

     iptables -A FORWARD -d 172.20.100.100 -j ACCEPT
     iptables -A FORWARD -s 172.20.100.100 -j ACCEPT
  • DNAT
     iptables -t nat -A PREROUTING -i $INTERNET_ETHERNET -p udp -m udp --dport 5060 -j DNAT --to-destination 172.20.100.100
     iptables -t nat -A PREROUTING -i $INTERNET_ETHERNET -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 172.20.100.100
     iptables -t nat -A PREROUTING -i $INTERNETETH -p udp -m udp --dport 4569 -j DNAT --to-destination 172.20.100.100
     iptables -t nat -A PREROUTING -i $INTERNETETH -p udp -m udp --dport 5036 -j DNAT --to-destination 172.20.100.100
     iptables -t nat -A PREROUTING -i $INTERNETETH -p udp -m udp --dport 2727 -j DNAT --to-destination 172.20.100.100

Configuración Inicial

En primeiro lugar imos crear os trunk principais (salvo o IAX2, que veremos máis adiante) e crear un dialplan básico. Comenzaremos polo trunk para a liña RDSI que manexará LCR mediante chan_lcr. Precisamos editar o ficheiro /usr/local/lcr/routing.conf e facer que o seu contido sexa: <c>

  1. Linux-Call-Router routing configuration "routing.conf"


  1. Ruleset: MAIN
  2. Calls with different origins will be processed in different rulesets.

[main]

       : remote application=asterisk

</c> Por último editamos /usr/local/lcr/interface.conf e facemos que teña: <c> [RDSILine] portnum 0 </c> Con esto conseguiremos un contexto RDSILine para utilizar no dialplan que se referirá as chamadas que cheguen por este trunk.

  • /etc/asterisk/modules.conf. Cargamos todos os módulos e seleccionamos o sistema de son alsa

<c>

Asterisk configuration file
Module Loader configuration file

[modules] autoload=yes

Any modules that need to be loaded before the Asterisk core has been
initialized (just after the logger has been initialized) can be loaded
using 'preload'. This will frequently be needed if you wish to map all
module configuration files into Realtime storage, since the Realtime
driver will need to be loaded before the modules using those configuration
files are initialized.
An example of loading ODBC support would be
preload => res_odbc.so
preload => res_config_odbc.so
res_phoneprov requires func_strings.so to be loaded

preload => func_strings.so

Uncomment the following if you wish to use the Speech Recognition API
preload => res_speech.so
If you want, load the GTK console right away.

noload => pbx_gtkconsole.so

load => pbx_gtkconsole.so

load => res_musiconhold.so

Load one of
chan_oss, alsa, or console (portaudio).
By default, load chan_oss only (automatically).
noload => chan_alsa.so

noload => chan_oss.so noload => chan_console.so </c>

  • /etc/asterisk/rtp.conf. Seleccionamos os portos RTP dende 10000 a 20000.

<c>

RTP Configuration

[general]

RTP start and RTP end configure start and end addresses
Defaults are rtpstart=5000 and rtpend=31000

rtpstart=10000 rtpend=20000 </c>

  • /etc/asterisk/sip.conf. Trunks sip para a conexión dos teléfonos IP e os softphones. Definimos o seguinte:
PhoneIP
Teléfono IP/Softphone de probas. Utilizará o contexto PhoneIP no dialplan.
PhoneA4
Teléfono IP/Softphone situado no Aula IF-3. Utilizará o contexto PhoneA4 no dialplan.
Departamento
Teléfono IP/Softphone situado no Departamento de Informática. Utilizará o contexto Departamento no dialplan.
rodeirapbx
Enlace SIP con ekiga.net. O contexto a utilizar no dialplan será EkigaLine, e a extensión ekiga.
xavi
Entrada para un softphone que poderá estar situado en calqueira lugar. O contexto para o dialplan a utiliza\u0155 será xavi.
Probas
Igual que a entrada anterior, pero co contexto do dialplan Probas.

<c> [general] context=default srvlookup=yes videosupport=no nat=yes localnet=172.16.0.0/255.255.0.0 externip=69.55.97.40 fromdomain=iesrodeira.com qualify=yes realm=asterix.iesrodeira.com

disallow=all allow=alaw allow=ulaw allow=speex allow=ilbc allow=gsm allow=h261

register => rodeirapbx:**********@ekiga.net/ekiga

[xavi] type=friend defaultuser=xavi context=xavi secret=xxxxxxxxx

canreinvite=yes

canreinvite=nonat

canreinvite=no

host=dynamic dtmfmode=rfc2833 qualify=3000

[Probas] type=friend defaultuser=Probas context=Probas secret=xxxxxxxxx

canreinvite=yes

canreinvite=nonat

canreinvite=no

host=dynamic dtmfmode=rfc2833 qualify=3000

[PhoneIP] type=friend defaultuser=PhoneIp context=PhoneIP secret=xxxxxxxxx

canreinvite=yes

canreinvite=nonat

canreinvite=no

host=dynamic dtmfmode=rfc2833 qualify=3000

[PhoneA4] type=friend defaultuser=PhoneA4 context=PhoneA4 secret=xxxxxxxxx

canreinvite=yes

canreinvite=nonat

canreinvite=no

host=dynamic dtmfmode=rfc2833 qualify=3000

[Departamento] type=friend defaultuser=Departamento context=Departamento secret=xxxxxxxxx

canreinvite=yes

canreinvite=nonat

canreinvite=no

host=dynamic dtmfmode=rfc2833 qualify=3000

[rodeirapbx] type=peer context=EkigaLine defaultuser=rodeirapbx secret=xxxxxxxxxx host=ekiga.net canreinvite=no qualify=300 insecure=invite,port </c>

Tests a realizar

O plan de marcado para realizar os test será a base de un IVR coas seguintes extensións:

  • 500 - Servicio ECO de ekiga.net
  • 600 - Servicio ECO de Asterisk


Rexistramos Asterisk nun proveedor VoIP

Coa configuración anterior, Asterisk se rexistra correctamente en ekiga.net.

Rexistramos un cliente Teléfono IP no Asterisk dende a rede local
Rexistramos un cliente softphone no Asterisk dende a rede local

Se rexistran sin problemas os softphones ekiga utilizando a conta Probas. A configuración SIP non utiliza nin servidor STUN nin proxy SIP.

Rexistramos un cliente Teléfono IP no Asterisk dende Internet

Rexistramos un Teléfono IP na conta PhoneIP sen maiores problemas, utilizando o servidor STUN stun.ekiga.net, e activando Enable Strict Proxy, Auto Detect Server e Enable Via rport.

Rexistramos un cliente softphone IP no Asterisk dende Internet

Se rexistran sin problemas os softphones ekiga utilizando a conta Probas. A configuración SIP non utiliza como servidor STUN stun.ekiga.net.

Chamadas dende liña telefónica convencional (PSTN)
O servicio de ECO de Asterisk
A chamada se realiza correctamente coa configuración inicial.
O servicio de ECO de ekiga.net a través do Asterisk
A chamada se realiza correctamente coa configuración inicial.
A un softphone/Teléfono IP rexistrado en Asterisk situado en Internet
A chamada se realiza correctamente coa configuración inicial.
A un softphone/Teléfono IP rexistrado en Asterisk situado na rede local
A chamada se realiza correctamente coa configuración inicial.
A un softphone rexistrado en ekiga.net
A chamada se realiza correctamente coa configuración inicial.
Chamadas dende un softphone/Teléfono IP situado en Internet
Sin rexistrar o Asterisk (contexto default)
As chamadas funcionan correctamente (do mesmo xeito que os softphones rexistrados) e se dirixen o contexto default do dialplan.
O servicio de ECO de Asterisk
A chamada funciona correctamente coa configuración inicial.
O servicio de ECO de ekiga.net a través do Asterisk
E posible realizar a chamada mediante packet2packet bridge ou sin bridge (t no Dial) e os dous casos funcionan dun xeito similar. Se reciben interrupcións intermitentes debido a problemas de rede.
A un softphone/Teléfono IP rexistrado en Asterisk situado en Internet
En principio debería funcionar o modo native bridge, pero o test realizado e cos dous softphones na mesma rede externa a da Asterisk, o que imposibilita (polo menos en principio) o native bridge. Nos outros dous modos (packet2packet bridge e sen bridge) funciona correctamente cos problemas de saturación de rede xa comentados.
A un softphone/Teléfono IP rexistrado en Asterisk situado na rede local
A chamada se procesa en modo native bridge. Si a chamada é dende un softphone (ekiga) a chamada se interrumpe e se recupera continuamente, pero o colgar tamén o fai o softphone local. Si a chamada é dende un teléfono IP a chamada se establece correctamente, pero o colgar o teléfono IP, o softphone local non colga. Outros softphones probados (X-Lite e twinkle) tamén se comportan do mesmo modo que o teléfono IP, a chamada se realiza correctamente, pero o colgar o softphone a parte remota non colga. Si colgamos o softphone da rede local o lado remoto remata correctamente. Si o softphone local está dentro do firewall (mesma rede que o servidor Asterisk) é necesario utilizar packet2packet bridge.
A un softphone rexistrado en ekiga.net
A chamada funciona correctamente (bridge packet2packet), pero presenta os problemas descritos con anterioridade en este tipo de bridge. O softphone X-Lite funciona con menos interrupcións que ekiga ou o teléfono IP. Si utilizamos o modo a través do Asterisk sen bridge ('t' no Dial) funciona de maneira similar.
A un teléfono da liña telefónica convencional (PSTN)
A chamada funciona correctamente coa configuración inicial.
Chamadas dende un softphone/Teléfono IP situado na rede local
O servicio de ECO de Asterisk
Funciona correctamente coa configuración inicial.
O servicio de ECO de ekiga.net a través do Asterisk
Funciona correctamente co packet2packet bridge, pero cos problemas de rede descritos.
A un softphone/Teléfono IP rexistrado en Asterisk situado en Internet
A chamada se efectua correctamente en modo native bridge coa configuración inicial dende a rede 69.55.97.x e con packet2packet bridge dende 172.20.x.x e 172.16.x.x.
A un softphone/Teléfono IP rexistrado en Asterisk situado na rede local
A chamada se efectua correctamente en modo native bridge. Si forzamos o packet2packet bridge os problemas son os mesmos descritos con anterioridade.
A un softphone rexistrado en ekiga.net
Funciona correctamente co packet2packet bridge, pero cos problemas de rede descritos.
A un teléfono da liña telefónica convencional (PSTN)
Funciona correctamente coa configuración inicial.
Chamadas dende un softphone rexistrado no proveedor ekiga.net
O servicio de eco de Asterisk
A chamada funciona correctamente coa configuración inicial.
A un softphone/Teléfono IP rexistrado en Asterisk dende Internet
A chamada funciona correctamente coa configuración inicial mediante packet2packet bridge cos problemas xa indicados.
A un softphone/Teléfono IP rexistrado en Asterisk dende a rede local
A chamada funciona correctamente coa configuración inicial mediante packet2packet bridge cos problemas xa indicados.
A un teléfono da rede telefónica convencional (PSTN)
A chamada funciona correctamente coa configuración inicial

Conclusións e Problemas

O modo native bridge parece funcionar correctamente nos casos nos que se pode empregar, os modos packet2packet e sen bridge parecen producir problemas intermitentes de conectividade na rede, con tempos de ping a intervalos aleatorios que poden chegar a 6 ou 7 segundos. As posibilidades a explorar son as seguintes:

  • Problema de configuración do kernel do sistema Asterisk.
  • Problema de parámetros de rede no sistema Asterisk.
  • Trafico UDP en xeral na rede local.
  • Problemas cos switches e os segmentos de rede a Gigabit Ethernet e de 100Mbits.

NOTA 1: De momento inclínome a considerar a última posibilidade, xa que parece que o segmento de rede que se satura e o comprendido entre o firewall (172.20.2.1) e o equipo Asterisk (172.20.100.100), que consta dun segmento de rede a Gigabit Ethernet e outro a 100 Mbits e dous switches intermedios.

NOTA 2: Probando con dous softphones locais no mesmo segmento de rede (switch común) os problemas co packet2packet bridge continúan, o que me leva a pensar que o problema está no propio switch.

NOTA 3: Fago un test con un softphone en 172.20.3.100 e outro en 172.20.3.6 forzando packet2packet bridge. O servidor asterisk esta en 172.20.100.100 e todos conectados o mesmo switch. A porta de saída da rede é 172.20.2.1 (dirección "externa" 69.55.97.40) e se atopa dous switches por debaixo. Un tramo 100Mb (dos ordenadores o switch) e dous tramos 1Gb de switch a switch e de switch o servidor. O retraso (intermitentes entre 2 e 12 segundos) detéctase curiosamente nos ping entre 172.20.3.100 e 172.20.2.1 (onde teóricamente non temos circulación UDP, e con iptraf non se observa) mentras que os ping entre 172.20.3.100 e 172.20.3.6 son normais, e entre 172.20.3.100 e 172.20.100.100 (O servidor Asterisk) tamén. Curiosamente os pings dende 172.20.2.1 os outros equipos da rede tamén son normais.

NOTA 4: Os paróns no ping (2 a 8 segundos) danse entre 172.20.2.1 e as partes que interveñen na comunicación: 172.20.3.100, 172.20.3.6 e 172.20.100.100, coincidindo cos cortes de voz. O resto de pings é normal.

Integración do Asterisk Debian con Asterisk Trixbox

DUNDI

O servicio "DUNDI" permite a un servidor Asterisk facer públicas e accesibles certas extensións propias a outros servidores mediante varios protocolos. No noso caso empregaremos IAX para enlazar este servidor Asterisk con outro servidor (obelix.iesrodeira.com) con Trixbox. En primeiro lugar é necesario crear o Trunk IAX para enlazar os dous servidores, no servidor que estamos a instalar (asterix.iesrodeira.com) editamos /etc/asterisk/iax.conf", e no servidor Trixbox (obelix.iesrodeira.com) /etc/asterisk/iax_custom.conf:

 ;asterix.iesrodeira.com                    ;obelix.iesrodeira.com
 [general]                                  language=es
 language=es
 jitterbuffer=no                            [dundi]
 forcejitterbuffer=no                       type=user
 autokill=yes                               dbsecret=dundi/secret
                                            context=DUNDI-calls
 [dundi]                                    disallow=all
 type=user                                  allow=alaw
 dbsecret=dundi/secret                      allow=ulaw
 context=DUNDI-calls                        allow=speex
 disallow=all                               allow=ilbc
 allow=alaw                                 allow=gsm
 allow=ulaw                                 allow=h261
 allow=speex
 allow=ilbc
 allow=gsm
 allow=h261

Como se pode observar, o contexto do dialplan o que se vai a acceder a través deste trunk chámase DUNDI-calls. Agora modificamos o dialplan, en asterix editamos /etc/asterisk/extensions.conf e en obelix /etc/asterisk/extensions_custom.conf para engadir o contexto [DUNDI-calls] coas extensións que desexemos facer públicas. No noso caso, dividiremos as extensións a facer públicas en tres categorías:

  • [DUNDI-voip] - Incorpora as extensións dos teléfonos IP rexistrados permanentemente (Departamentos, Aulas ... etc)
  • [DUNDI-dinamico] - Incorpora as extensións dos teléfonos IP rexistrados de cando en vez dende sitios distintos (Profesores, alumnos ... etc)
  • [DUNDI-pstn] - Incorpora as extensións para facer chamadas a través da PSTN.

Deste xeito quedaría logo o contexto [DUNDI-calls]:

 [DUNDI-calls]
 include => DUNDI-voip
 include => DUNDI-dinamico
 include => DUNDI-PSTN

Tamén creamos un contexto [DUNDI-switch] que permite facer as consultas DUNDi o outro servidor. Para eso bastará cun include => DUNDI-switch nos contextos nos que queiramos ter acceso os números importados a través de DUNDi:

 [DUNDI-switch]
 switch => DUNDI/dundi-trunk

dundi-trunk fai referencia o mapeo de extensións que se realiza en /etc/asterisk/dundi.conf en ambos servidores:

asterix.iesrodeira.com

<c>

 [general]
 department=Departamento de Informática
 organization=IES de Rodeira
 locality=Cangas do Morrazo
 stateprov=GZ
 country=ES
 email=xavi@iesrodeira.com
 phone=986304750
 ttl=32
 autokill=yes
 ; Contextos exportados
 [mappings]
 dundi-trunk => DUNDI-voip,0,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nopartial
 dundi-trunk => DUNDI-dinamico,100,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nopartial
 dundi-trunk => DUNDI-PSTN,400,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nopartial
 ; Servidor o que podemos consultar (obelix.iesrodeira.com)
 ; O número de abaixo é a MAC do primeiro interface de rede, pero pode cambiarse en dundi.conf
 [00:80:5A:4A:88:3D]
 model = symmetric
 host = obelix.iesrodeira.com
 inkey = obelix.iesrodeira.com
 outkey = asterix.iesrodeira.com
 include = dundi-trunk
 permit = dundi-trunk
 qualify = yes

</c>

obelix.iesrodeira.com

<c> [general] department=Departamento de Electrónica organization=IES de Rodeira locality=Cangas do Morrazo stateprov=GZ country=ES email=voip@iesrodeira.com phone=986304750 ttl=32 autokill=yes

[mappings] dundi-trunk => DUNDI-voip,0,IAX2,dundi:${SECRET}@172.16.23.99/${NUMBER},nopartial dundi-trunk => DUNDI-dinamico,100,IAX2,dundi:${SECRET}@172.16.23.99/${NUMBER},nopartial dundi-trunk => DUNDI-PSTN,400,IAX2,dundi:${SECRET}@172.16.23.99/${NUMBER},nopartial

asterix.iesrodeira.com

[00:05:1c:00:b6:ae] model = symmetric host = asterix.iesrodeira.com inkey = asterix.iesrodeira.com outkey = obelix.iesrodeira.com include = dundi-trunk permit = dundi-trunk qualify = yes </c> Neste caso colocamos a IP nos mappings porque a variable ${IPADDR} ten a outra IP do servidor (a pública), que non me sirve para enlazar con asterix.

Por último so e necesario crear as chaves de encriptación e poñelas na outra máquina. Estas chaves se crean en ambos servidores en /var/lib/asterisk/keys executando astgenkey -n asterix.iesrodeira.com no servidor asterix e astgenkey -n obelix.iesrodeira.com' en obelix, a continuación é preciso copiar a chave obelix.iesrodeira.com.pub a carpeta /var/lib/asterisk/keys de asterix, e a chave asterix.iesrodeira.com.pub a carpeta /var/lib/asterisk/keys de obelix.

Podemos comprobar a información dende a consola Asterisk cos comandos dundi query e dundi lookup

Síntesis de voz: Festival

Unha vez configurado Festival como indica o apartado anterior, para utilizalo bastará con utilizar a función do dialplan Festival pasandolle como argumento a cadea de texto que se quere leer. Ollo, non se deben pasar acentos, xa que Festival non os procesa:

 exten => menu,n,Festival(Para chamar o departamento de informatica pulsa uno)

Recoñecimento de Voz

Sphinx,

Buzón de Voz

Para activar o buzón de voz e necesario utilizar o arquivo /etc/asterisk/voicemail.conf, e necesario ter cuidado en ter o parámetro delete=no si non queremos perder as mensaxes que se envíen por correo. Na configuración inicial deste Asterisk (configuración estática por medio de ficheiros) e necesario que o módulo app_voicemail esté compilado sen opción ODBC nin IMAP. Un erro no buzon de voz fai que se busque a voz y na carpeta de digits en lugar de letters, para solucionalo establecemos un enlace simbólico dende letters a digits.

 ln -s /var/lib/asterisk/sounds/es/letters/y.alaw /var/lib/asterisk/sounds/es/digits/y.alaw

E o mesmo cos codecs que se estime necesario.

Configuración Real Time

Plan de Marcado

DISA

Extensións a Configurar e Id's

Chamadas "Internas" (teléfonos rexistrados)
  • 1: Menú IVR do IES de Rodeira
  • 500: Test de ECO
  • 600: Buzon de Voz
  • 1000: Departamento Informática
  • 2000: Aula 3
  • 3000: Aula 4
  • 3100: Softphone/IP Phone de Xavi
  • 5xxx: Chamadas a usuarios Ekiga.net
  • 6xxx: Chamadas a usuarios de Gtalk
  • Extensións recollidas por DUNDI de obelix.iesrodeira.com
Chamadas "Restrinxidas" (so teléfonos rexistrados, e non todos)
  • inclúe as chamadas "Internas"
  • _0X.: Chamada a un número da PSTN
Chamadas "Públicas" (Chamadas dende calqueira teléfono VoIP non rexistrado, dende a PSTN, dende ekiga.net ou dende Gtalk
  • Menu IVR do IES de Rodeira, permitindo teclear un número de extensión das chamadas "Internas"
Chamadas "Especiais" (so algúns teléfonos rexistrados)
  • 6666: Gravador de voz, a voz queda gravada en /tmp/prompt%d.wav

Todos os teléfonos rexistrados (que poden recibir chamadas) terán buzón de voz.

Plan de Marcado

Batería de Probas

Chamada PSTN (RDSI-IF3)<->IF-3 (Softphone, Teléfono IP, Teléfono convencional)
Chamada VoIP<->IF-3 (Softphone, Teléfono IP, Teléfono convencional) vía Asterisk IF-3
Chamada VoIP<->VoIP (distinto proveedor) vía Asterisk IF-3
Chamada IF-3<->PSTN via servicio VoIP co Asterisk IF-3
Chamada PSTN (RDSI IF-3)<->Electrónica
Chamada PSTN (Liña Electrónica)<->IF-3 (Softphone, Teléfono IP, Teléfono convencional)
Chamada IF-3<->Teléfonos Electrónica
Chamada IF-3<->PSTN via servicio VoIP en Trixbox Electrónica
Chamada Servicio VoIP<->Servicio VoIP (distinto proveedor) pasando por Trixbox Electrónica

Consideracións Finais

Sofware a Desenvolver