Instalación de Servidor de VoIP en Debian

De Manuais Informática - IES San Clemente.
Revisión del 19:58 10 may 2012 de Veiga (discusión | contribs.) (→‎SIP e IAX)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Introducción a la VoIP

Voz sobre Protocolo de Internet, también llamado Voz sobre IP, Voz IP, VozIP, VoIP (por sus siglas en inglés, Voice over IP), es un grupo de recursos que hacen posible que la señal de voz viaje a través de Internet empleando un protocolo IP (Protocolo de Internet). Esto significa que se envía la señal de voz en forma digital, en paquetes de datos, en lugar de enviarla en forma analógica a través de circuitos utilizables sólo por telefonía convencional como las redes PSTN (sigla de Public Switched Telephone Network, Red Telefónica Pública Conmutada).

Los Protocolos que se usan para enviar las señales de voz sobre la red IP se conocen como protocolos de Voz sobre IP o protocolos IP. Estos pueden verse como aplicaciones comerciales de la "Red experimental de Protocolo de Voz" (1973), inventada por ARPANET.

El tráfico de Voz sobre IP puede circular por cualquier red IP, incluyendo aquellas conectadas a Internet, como por ejemplo las redes de área local (LAN).

Es muy importante diferenciar entre Voz sobre IP (VoIP) y Telefonía sobre IP.

  • VoIP es el conjunto de normas, dispositivos, protocolos, en definitiva la tecnología que permite comunicar voz sobre el protocolo IP.
  • Telefonía sobre IP es el servicio telefónico disponible al público, por tanto con numeración E.164, realizado con tecnología de VoIP.

Hay varios sistemas disponibles (propietarios, libres..) para montar centralitas de VoIP (PBX. Podemos citar algunos como: Asterisk, AsteriskNow, FreePBX ...

Asterisk-logo.jpg
AsteriskNow.jpg


FreePBX.jpg

Extraído de Wikipedia

El sistema Asterisk

Asterisk es una aplicación para controlar y gestionar comunicaciones de cualquier tipo, ya sean analógicas, digitales o VoIP mediante todos los protocolos VoIP que implementa.

Asterisk-logo.jpg

Asterisk es una aplicación OpenSource basada en licencia GPL y por lo tanto con las ventajas que ello representa, lo que lo hace libre para desarrollar sistemas de comunicaciones profesionales de gran calidad, seguridad y versatilidad.

Mark-Spencer.jpg

Asterisk fue creada en 1999 por Mark Spencer de la empresa Digium y donada a la comunidad con licencia libre tras lo cual se han recibido muchas colaboraciones y mejoras por parte de muchos desarrolladores libres y empresas sin solicitar nada a cambio.

Poco a poco, esta aplicación se ha convertido en la evolución de las tradicionales centralitas analógicas y digitales permitiendo también integración con la tecnología más actual: VoIP. Asterisk se convierte así en el mejor, más completo, avanzado y económico sistema de comunicaciones existente en la actualidad.

Otro aliciente es su capacidad de ser programada, permitiendo realizar labores que hasta el día de hoy lo llevaban realizando sistemas extremadamente costosos y complicados y, gracias a Asterisk, esta misma labor se realiza de una forma más económica lo que fomenta el uso de sistemas libres como Linux y estándares abiertos como SIP, H323 o IAX.

Una de las ventajas más interesantes es su posibilidad como sistema híbrido, ya que permite gestionar comunicaciones telefónicas tradicionales (analógicas, digitales, móviles, ...) como comunicaciones IP mediante el uso de los protocolos estandar de VoIP.

Para más información visita la página Oficial de Asterisk en: http://www.asterisk.org/

Asterisk-Homepage.jpg

https://wiki.asterisk.org/wiki/display/AST/Asterisk+Packages

Instalación y configuración de Asterisk en Debian

Asterisk se distribuye de diversas formas. Podemos obtar por descargar las fuentes y compilarlo, descargar una imagen de Linux con Asterisk pre-instalado (AsteriskNow PBX) o bien descargar algún paquete definido para las distintas distribuciones de Linux existentes.


Descarga e instalación de Asterisk

Para instalar Asterisk en nuestra versión de Debian podremos hacerlo de forma sencilla con la instrucción:

apt-get install asterisk

# El principal inconveniente es que en los repositorios de Debian no está la última versión
# actualizada de Asterisk la versión 1.8.1(con soporte de teléfonos Digium) o la 10.4.0(standard)

# En este caso la versión instalada es la 1.6.2.9, pero es perfectamente válida para nuestro propósito.

Si queremos instalar la versión 10.4.0 de Asterisk desde el código fuente podemos hacer estos pasos:

# Actualizamos el sistema.
aptitude update
aptitude -y upgrade
shutdown -r now
 
# Instalamos librerías adicionales que faltan.
aptitude -y install build-essential libsqlite3-dev libxml2-dev libncurses5-dev
 
# Nos descargamos el tar desde Asterisk: http://www.asterisk.org/downloads
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-10.4.0.tar.gz
 
# Descomprimimos el paquete y accedemos a la carpeta descomprimida:
tar zxf asterisk-10.4.0.tar.gz
cd asterisk-10.4.0
 
# Ejecutamos las siguientes instrucciones de configuración y make...:
./configure
make
make install
make samples
make config
 
# Arrancamos el Asterisk:
asterisk -V

Para instalar otras versiones de Asterisk visitar:

https://wiki.asterisk.org/wiki/display/AST/Asterisk+Packages

Configuración de Asterisk

Una vez instalado Asterisk, lo que tenemos que hacer es configurarlo. Para ello hay que editar una serie de ficheros en los que se definen las características de funcionamiento de la aplicación, las extensiones que tendrán los teléfonos, voicemail, etc...

Asterisk y NAT

Si nuestro sistema está en un red con NAT y queremos dar servicio a equipos que se conecten desde Internet a nuestro sistema, tendremos que configurar lo siguiente:


1. En el fichero /etc/asterisk/sip.conf :

[general]
nat=yes
externip = X.X.X.X
localnet = 192.168.X.0/255.255.255.0
qualify=yes 

# En externip podemos poner la ip externa o el FQDN 
# (Fully Qualified Domain Name -- nombre del dominio).

2. En nuestro router tendremos que abrir los siguientes puertos hacia la IP del servidor Asterisk:

   UDP: 5060
   UDP: 10000-20000

Más información en: http://www.voip-info.org/wiki-Asterisk+SIP+NAT+solutions

SIP e IAX

SIP es el protocolo de comunicación que utilizan los terminales de VoIP para conectarse a la centralita Asterisk. Las siglas provienen de Session Initiation Protocol, y fue diseñado por IETF para la transimisión de telefonía, video y mensajes iinstantáneos.

Es en esta sección dónde se configurarán los terminales (o extensiones) que se van a conectar a nuestra centralita utilizando dicho protocolo.

El fichero SIP se encuentra en /etc/asterisk/sip.conf

Un ejemplo de fichero sip.conf puede ser el siguiente:

;
; SIP Arquivo de Configuración 
;
; SIP dial strings
 
[general]
; Configurar a IP externa do router.
externip=213.96.94.123
 
; Describir todas as redes locales as que conecta o Asterisk.
localnet=10.0.0.0/255.0.0.0
localnet=192.168.30.0/255.255.255.0
 
; IP e porto no que escoita o Asterisk
tcpbindaddr=0.0.0.0
port=5060
nat=yes
qualify=yes
realm=voip.iessanclemente.net
fromdomain=voip.iessanclemente.net
canreinvite=no

 
allowoverlap=no
context=default                 ; Default context for incoming calls
 
disallow=all
allow=ulaw
allow=alaw
allow=gsm
 
; Sección de Profesorado
 
[5000] ; SIP Veiga.
type=friend
secret=abc123
callerid="IeSC Veiga" <5000>
mailbox=5000@default
context=personal
host = dynamic
canreinvite = no
dtmfmode = rfc2833
 
[5001]
type=friend
secret=abc123
callerid="IeSC Vieites" <5001>
mailbox=5001@default
context=personal
host = dynamic
canreinvite = no
dtmfmode = rfc2833
 
[7000] ; Telefono SIP Informatica.
type=friend
secret=abc123
callerid="IeSC Informatica" <7000>
mailbox=7000@default
context=personal
host = dynamic
canreinvite = no
dtmfmode = rfc2833

El parámetro dtmfmode es importante, ya que dependiendo de lo que pongamos (inband, rfc2833, info, auto) podremos enviar tonos desde nuestro teléfono al Asterisk o no.

dtmfmode=inband se utiliza con codecs alaw, ulaw

dtmfmode=rfc2833 se utiliza con codecs gsm

Si por el contrario los terminales que utilizamos soportan IAX2 (Inter Asterisk eXchange) , el fichero que tendremos que configurar se encuentra en: /etc/asterisk/iax.conf

IAX2 es robusto, lleno de novedades y muy simple en comparación con otros protocolos. Permite manejar una gran cantidad de códecs y un gran número de streams, lo que significa que puede ser utilizado para transportar virtualmente cualquier tipo de dato. Esta capacidad lo hace muy útil para realizar videoconferencias o realizar presentaciones remotas.

IAX2 utiliza un único puerto UDP, generalmente el 4569, para comunicaciones entre puntos finales (terminales VoIP) para señalización y datos. El tráfico de voz es transmitido in-band, lo que hace a IAX2 un protocolo casi transparente a los cortafuegos y realmente eficaz para trabajar dentro de redes internas. En esto se diferencia de SIP, que utiliza una cadena RTP out-of-band para entregar la información.

IAX2 soporta Trunking (red), donde un simple enlace permite enviar datos y señalización por múltiples canales. Cuando se realiza Trunking, los datos de múltiples llamadas son manejados en un único conjunto de paquetes, lo que significa que un datagrama IP puede entregar información para más llamadas sin crear latencia adicional. Esto es una gran ventaja para los usuarios de VoIP, donde las cabeceras IP son un gran porcentaje del ancho de banda utilizado. El modo Trunking es el que se emplea para conectar con otras centralitas Asterisk.

extensions.conf

El fichero extensions.conf se encuentra en /etc/asterisk/extensions.conf

En este fichero es dónde se configura el dialplan o plan de marcado. Es decir cuando marcamos un número de extensión, ¿qué es lo que tiene que hacer Asterisk?. Pues es en este fichero dónde se configura todo eso.

Además aquí se definen los contextos, es decir cuando un terminal SIP se registra, vimos en el fichero anterior un parámetro llamado context. Es en ese parámetro dónde se indica el contexto al que tendrá acceso ese terminal y qué cosas podrá hacer. Las opciones disponibles y los límites de acciones para ese terminal se definen en extensions.conf

Un ejemplo de fichero extensions.conf, puede ser:

; extensions.conf - the Asterisk dial plan
;
; Static extension configuration file, used by
; the pbx_config module. This is where you configure all your 
; inbound and outbound calls in Asterisk. 
; 
; This configuration file is reloaded 
; - With the "dialplan reload" command in the CLI
; - With the "reload" command (that reloads everything) in the CLI
 
;
; The "General" category is for certain variables.  
;
[general]
static=yes
writeprotect=no
clearglobalvars=no
 
[buzonvoz]
; Acceso a buzon de voz con extension + password
exten => 8000,1,VoicemailMain
 
; Acceso directo a buzon de voz solicitando solamente password.
exten => 8001,1,VoicemailMain(${CALLERID(num)}@default)
 
 
[latencia]
; Extension para evaluar latencias.
exten => 8100,1,Playback(demo-echotest) ; Let them know what's going on
exten => 8100,n,Echo                    ; Do the echo test
exten => 8100,n,Playback(demo-echodone) ; Let them know it's over
exten => 8100,n,Goto(s,6)               ; Start over
 
[conferencias]
exten => 8500,1,MeetMe(100,iM)
exten => 8500,1,Playback(conf-thereare)
exten => 8500,n,MeetMeCount(100)
exten => 8500,n,Playback(conf-peopleinconf)
 
 
[macro-extension]
;esta macro recibira dous parámetros
;o primero indica o dispositivo ó que hai que chamar
;o segundo e o número do buzón de voz ó que desviar a chamada
exten => s,1,NoOp(chamada para ${ARG1})
exten => s,n,Dial(${ARG1},20)
exten => s,n,Goto(s-${DIALSTATUS},1)
 
; si esta ocupado, reprodúcese a mensaxe correspondente
exten => s-BUSY,1,VoiceMail(${ARG2},b)
exten => s-BUSY,n,Hangup
 
; si non contesta, reprodúcese a mensaxe de "non dispoñible"
exten => s-NOANSWER,1,VoiceMail(${ARG2},u)
exten => s-NOANSWER,n,Hangup
 
; en calqueira outro caso, facemos o mesmo que si non contesta.
exten => s-.,1,Goto(s-NOANSWER,1)
 
;-------------------------------------------
; Ramiro
; Grabar sonidos para IVR
;------------------------------------------
[grabacion]
exten => 205,1,Wait(2) 
exten => 205,2,Record(/tmp/asterisk-recording:gsm) 
exten => 205,3,Wait(2)
exten => 205,4,Playback(/tmp/asterisk-recording)
exten => 205,5,wait(2)
exten => 205,6,Hangup
 
[deeper]
exten => s,1,Background(dipa)
exten => s,2,Goto(secretaria,s,1)
 
[secretaria]
exten => s,1,Background(secretaria)
exten => 1,1,Goto(deeper,s,1)
exten => 2,1,Goto(informatica,s,1)
 
[informatica]
exten => s,1,Background(informatica)
exten => s,2,Dial(SIP/7000)
exten => s,3,Hangup()
exten => 0,1,Goto(ivr,100)
exten => 1,1,Goto(Menu,s,1)
 
[Menu]
exten => s,1,Set(CHANNEL(musicclass)=default); 
exten => s,2,Wait(3) ;espera 3 segundos
exten => s,3,Set(TIMEOUT(digit)=5) ; 5 segundos es el tiempo que espera entre el primer digito y los sucesivos 
exten => s,4,Set(TIMEOUT(response)=10) ; 10 segundos es el tiempo que espera para que el llamante presione una tecla 
 
exten => s,5,BackGround(introducion-menu-ies) ; presenta el menu vocal y al mismo tiempo escucha si el llamante presiona alguna tecla 
exten => s,6,WaitExten() ; espera que el llamante presione alguna tecla 
 
exten => 1,1,Goto(informatica,s,1)
exten => 2,1,Goto(secretaria,s,1)
exten => i,1,Playback(invalid)
exten => i,2,Playback(goodbye)
exten => i,3,Hangup
 
exten => t,1,Goto(Menu,s,2) ;si dentro de 10 segundo el llamante no presiona ninguna tecla vuelve a presentar el menu vocal 
exten => h,1,Hangup ; si el llamante cuelga ejecuta la extension h
 
[ivr]
exten => 100,1,Answer
exten => 100,2,Goto(Menu,s,1)
 
;------------------------------------------
 
 
[provinciales]
 
[internacionales]
 
[moviles]
 
[exteriores]
 
[personal]
include => buzonvoz
include => latencia
include => conferencias
include => colas
 
include => grabacion
include => ivr
 
exten => 5000,1,Macro(extension,SIP/5000,5000)
exten => 5001,1,Macro(extension,SIP/5001,5001)
exten => 5002,1,Macro(extension,SIP/5002,5002)
exten => 5003,1,Macro(extension,SIP/5003,5003)
exten => 5004,1,Macro(extension,SIP/5004,5004)
exten => 5005,1,Macro(extension,SIP/5005,5005)
exten => 5006,1,Macro(extension,SIP/5006,5006)
exten => 5007,1,Macro(extension,SIP/5007,5007)
 
 
exten => 6000,1,Macro(extension,IAX2/6000,5000)
exten => 6001,1,Macro(extension,IAX2/6001,5001)
exten => 6002,1,Macro(extension,IAX2/6002,5002)
exten => 6003,1,Macro(extension,IAX2/6003,5003)
exten => 6004,1,Macro(extension,IAX2/6004,5004)
exten => 6005,1,Macro(extension,IAX2/6005,5005)
exten => 6006,1,Macro(extension,IAX2/6006,5006)
exten => 6007,1,Macro(extension,IAX2/6007,5007)
 
exten => 7000,1,Macro(extension,SIP/7000,7000)
exten => 0000,1,Macro(extension,SIP/0000,0000)
 
 
exten => 3333,1,Background(agent-pass)
 
[colas]
exten=> 8600,1,Answer
exten=> 8600,2,Set(CHANNEL(musicclass)=blues)
exten=> 8600,3,DigitTimeout,5
exten=> 8600,4,ResponseTimeout,10
exten=> 8600,5,Backgroun(welcome)
exten=> 8600,6,Queue(administradores,tT)
exten=> 8600,7,Hangup
 
 
exten=> 8601,1,Answer
exten=> 8601,2,Set(CHANNEL(musicclass)=blues)
exten=> 8601,3,MusicOnHold

voicemail.conf

En /etc/asterisk/voicemail.conf se configuran los datos de acceso al buzon de voz de cada usuario, así como el correo electrónico al que se le mandarán avisos con notificaciones, etc...

Un ejemplo de voicemail.conf puede ser:

;!
;! Automatically generated configuration file
;! Filename: voicemail.conf (/etc/asterisk/voicemail.conf)
;! Generator: AppVoicemail
;! Creation Date: Wed May 13 01:47:49 2009
;!
;
; Voicemail Configuration
;
[general]
; Formats for writing Voicemail.  Note that when using IMAP storage for
; voicemail, only the first format specified will be used.
;format=g723sf|wav49|wav
format = wav49|gsm|wav
; Who the e-mail notification should appear to come from
serveremail = asterisk
; Should the email contain the voicemail as an attachment
attach = yes
; How many milliseconds to skip forward/back when rew/ff in message playback
skipms = 3000
; How many seconds of silence before we end the recording
maxsilence = 10
; Silence threshold (what we consider silence: the lower, the more sensitive)
silencethreshold = 128
; Max number of failed login attempts
maxlogins = 3
 
[zonemessages]
eastern = America/New_York|'vm-received' Q 'digits/at' IMp
central = America/Chicago|'vm-received' Q 'digits/at' IMp
central24 = America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military = Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
european = Europe/Copenhagen|'vm-received' a d b 'digits/at' HM
 
[default]
5000 => 1234,Rafa Veiga,correo@edu.xunta.es
5001 => 1234,Manuel Vieites,otrocorreo@edu.xunta.es
7000 => 1234,informatica,buzon@terra.es

Consola de Asterisk

Acceso a la consola de Asterisk

Podremos acceder a la consola de Asterisk mediante el siguiente comando, siempre y cuando Asterisk se esté ejecutando, claro está:

asterisk -rvvvv

Cuantas más 'v' pongamos, más nivel de detalle de notificaciones tendremos en Asterisk.

Recarga de Asterisk

Para recargar Asterisk desde la línea de comandos pondremos:

asterisk -r -x reload

Asterisk funcionando como un servicio

Si cuando arrancamos el servidor, ya tenemos Asterisk funcionando como un servicio, entonces podremos gestionarlo con los siguientes comandos:

service asterisk start stop status restart

Guía rápida de comandos de Asterisk en PDF

Aquí podéis encontrar un guía rápida de comandos de Asterisk en PDF

Clientes VoIP para Asterisk

Clientes software

Para Windows podríamos citar:

Para otros sistemas operativos consultar:

Clientes hardware

Para conectarnos a nuestra centralita de Asterisk necesitaremos un terminal VoIP hardware o cliente de VoIP que soporte SIP.conf o bien IAX. Hay multitud de clientes SIP para los diferentes sistemas operativos.

También podemos decidirnos por teléfonos IP. Fabricantes como Linksys, CISCO, adaptadores de teléfonos analógicos a Voip, etc..

Telefono-SPA492.jpg


Un vistazo por Ebay os puede mostrar múltiples dispositivos disponibles para comenzar en este mundillo de la telefonía IP: centralitas hardware, adaptadores, telefonos wifi, telefonos ethernet, etc.. Telefonos VoIP en Ebay

Logo-Ebay.jpg



--Veiga 13:50 10 may 2012 (CEST)