La telefonía IP aterriza en la XEiLL

per Victor Carceler darrera modificació 2020-03-31T13:35:52+02:00

Una pequeña introducción:

Las redes telefónicas tradicionales emplean tecnología analógica para transmitir la voz, se utiliza una centralita para permitir que un usuario pueda llamar a otro. Cada usuario tiene un teléfono conectado con la centralita mediante un par de hilos de cobre. De este modo, dos usuarios de la red telefónica pueden establecer una comunicación sin que existan cables de cobre que los conectan de manera directa. La centralita (o conmutador) evita que sea necesaria una red completamente cableada (cada usuario deberia tener un cable que lo conecte con cada uno de los otros usuarios). La red de telefonía pública se llama Red Telefónica Conmutada (RTC), o en inglés PSTN.

Sin duda todo el mundo ha utilizado, y utiliza, la RTC con relativa frecuencia y probablemente hasta haya memorizado los identificadores (números telefónicos) de los usuarios a los que llama habitualmente.

La voz sobre ip (VoIP, Voice over IP) utiliza las modernas redes de datos para transportar la voz (y el vídeo asociado) de las llamadas. Con VoIP cada usuario sigue utilizando un terminal (que puede ser físico o símplemente un programa), una red de comunicaciones (Internet, una LAN o una WLAN) y una centralita (o PBX Private Branch Exchange). Sólo que en este caso al utilizarse técnicas digitales de extremo a extremo la flexibilidad es mucho mayor.

Asterisk una PBX libre

Logo Asterisk

Asterisk es una implementación GPL de una completa centralita de voz IP.

Asterisk es un software que se puede instalar en un PC (corre sobre GNU/Linux, MacOSX y otros sistemas operativos) y configurar para dar soporte a los usuarios de una oficina, institución o red.

Asterisk soporta muchas funciones como son:

  1. Buzón de voz
  2. Colas de llamada
  3. Música en las esperas
  4. Multiconferencias
  5. Grupos de respuesta
  6. Parking de llamadas
  7. Aplicaciones IVR
  8. etc...

Y cualquier cosa que se le pueda pedir a una centralita telefónica. Por ejemplo, con Asterisk resulta muy sencillo definir extensiones (números telefónicos) que se asignarán a nuestros usuarios. Se puede permitir que algunos de ellos cuenten con un buzón de voz, y un servicio que le envíe un mensaje de correo electrónico cada vez que se realiza una entrada en dicho buzón. El correo electrónico puede incluir como fichero adjunto el fichero de audio con el mensaje que se ha recibido en el buzón de voz.

Si dejamos que nuestro servidor Asterisk sea visible desde internet, automáticamente conseguimos que nuestros usuarios mantengan su extensión independientemente del lugar en el que se encuentren (Barcelona, Madrid, París o cualquier otro lugar). Con la ventaja añadida de que el tráfico transmitido por Internet no tiene ningún coste (más allá de la conexión a la red).

Protocolos VoIP

Lo mejor de los protocolos de comunicación es que hay muchos entre los que elegir. En lo relativo a VoIP, además de protocolos cerrados e incompatibles con todo lo demás como Skype, nos podemos encontrar con:

H.323
Recomendación de la ITU para transmitir voz y vídeo en redes de paquetes. Algunas aplicaciones que implementan este protocolo son: GnomeMeeting y NetMeeting. Es el protocolo más veterano en cuanto a VoIP.
SIP
El competidor oficial para H.323. SIP fué desarollado por la IETF y está estandarizado. Una de las ventajas de SIP (Session Initiation Protocol) es que se pueden encontrar mucho hardware compatible (teléfonos VoIP y adaptadores para teléfonos analógicos). El problema es que SIP sólo se encarga de la señalización, el transporte del audio se realiza con RDP y este protocolo no se lleva nada bien con NAT. De manera que tener una PBX con un router que hace NAT y los clientes en el otro lado no es buena idea.
IAX2
IAX2 (Inter Asterisk eXchange v2) es un protocolo propuesto por Asterisk para conectar servidores y/o clientes. Entre sus ventajas se cuentan:
  1. No tiene problemas con NAT
  2. Utiliza un único puerto UDP (el 4569) para atender a todas las conexiones
  3. Es ligero y fácil de implementar
  4. Supone la menor sobrecarga de red

Asterisk soporta estos tres protocolos, y otros, de manera que los clientes se pueden llamar entre sí aunque utilicen distintos protocolos. Asterisk se encarga de armonizarlo todo.

Se utilice el protocolo VoIP que se utilice, existen diferentes codecs para codificar el audio y/o el video transmitido. La mayoría de los terminales (hardware o software) soportan codecs (de audio) como GSM, µLau o aLaw. Si los terminales de los interlocutores no tuviesen ningún codec en común, Asterisk realizaría la recodificación necesaria para que la comunicación fuese posible.

Instalando y configurando Asterisk

Asterisk puede que esté empaquetado para nuestra distribución favorita (en Mandriva 2005 está incluido), puede que queramos utilizar un LiveCD que lo contenga (en distrowatch se pueden encontrar) o puede que lo queramos instalar a partir del código fuente. Si se opta por la última opción es conveniente una vez compilado lanzar el objetivo make que nos crea los ficheros de configuración de ejemplo. Si se instala desde el código fuente puede ser interesante bajarse del CVS los ficheros MP3 que se escucharán mientras la llamada está en espera.

Los ficheros de configuración de Asterisk se encuentran en /etc/asterisk y los tres que probablemente más nos van a interesar son:

/etc/asterisk/extensions.conf
En este fichero se definel el dialplan. Es decir, qué se hace cuando se recibe determinada llamada, o cuando el usuario realiza pulsaciones en su teclado.
/etc/asterisk/iax.conf
Define los clientes IAX2
/etc/asterisk/sip.conf
Define los clientes SIP

Una instalación básica de Asterisk puede partir de los ficheros de configuración de ejemplo para:

  1. Definir en iax.conf o sip.conf a nuestros clientes
  2. Definir un Dialplan que permita llamarlos en extensions.conf

Se pueden añadir definiciones como esta al fichero iax.conf

[2015]                  ; Número de la extensión
callerid="Usuario 15" ; ID del usuario
type=friend ; friend => Puede hacer y recibir llamadas
host=dynamic ; tiene IP dinámica
secret=supersecreto ; contraseña
context=prueba ; Contexto en el dialplan

[2016]
callerid="Usuario 16"
type=friend
host=dynamic
secret=megasecreto
context=prueba

Después hay que definir en el dialplan alguna entrada que conecte con las extensiones 2015 y 2016 que corresponden a nuestros usuarios. En el dialplan pueden existir diferentes contextos. Por ejemplo, añadiendo las siguientes líneas a /etc/asterisk/extensions.conf definimos el contexto 'prueba' (en el que se encuentran nuestros usuarios) y permitimos que se llamen entre sí.

[prueba]

exten => 2015,1,Dial(IAX2/2015,20,)
exten => 2015,2,Hangup
exten => 2015,102,Hangup

exten => 2016,1,Dial(IAX2/2016,20,)
exten => 2016,2,Hangup
exten => 2016,102,Hangup

El dialplan debe interpretarse así:

  1. Prioridad 1: Si un usuario del contexto 'prueba' marca la extensión 2015, entonces utilizamos un canal IAX2 (podria ser SIP, o H.323) para hacer una llamada al usuario 2015. (Si el usuario hubiese marcado 2016 llamariamos al 2016). Esperaremos 20 segundos antes de suponer que nadie acepta la llamada.
  2. Si el usuario 2015 acepta la llamada (antes de los 20 segundos de ring, ring...) entonces hablamos.
  3. Prioridad 2: Cuando la llamada termina colgamos.
  4. Prioridad 102: Si el usuario al que llamamos está ocupado, se suma automáticamente 101 a la prioridad. De manera que saltamos a la prioridad 102 en la que se finaliza la llamada. Para Asterisk un teléfono que no está registrado es un teléfono ocupado.

En el dialplan se pueden utilizar variables y patrones para no tener que escribir tantas líneas para cada extensión. Por ejemplo, el siguiente dialplan tiene el mismo significado que el anterior. Pero extendido a cualquier extensión de cuatro cifras que comience por un número del 2 al 9.

exten => _NXXX,1,Dial(IAX2/${EXTEN},20,)
exten => _NXXX,2,Hangup
exten => _NXXX,102,Hangup
_NXXX
Patrón de coincidencia (comienza por '_') para extensiones de 4 dígitos en los que el primero tiene un valor entre 2 y 9 y los restantes entre 0 y 9.
${EXTEN}
Variable que tiene por valor el correspondiente a la extension marcada por el usuario.

Asociando clientes con el servidor:

Una ventaja de VoIP es que un cliente (softphone o hardphone) mantendrá el mismo número independientemente de dónde se encuentra. Un comercial puede viajar de Barcelona a Londres, al llegar a la oficina de Londres conecta su teléfono a la red de la oficina y automáticamente suena en cuanto alguien marca su número (sin saber dónde se encuentra).

La magia de este proceso es simple. El teléfono (softphone o hardphone) del comercial, debe registrarse con el servidor Asterisk (la centralita) para que este sepa que está disponible para aceptar llamadas.

Para completar con éxito el proceso de registro, el teléfono del usuario debe estar configurado con los siguientes parámetros:

  • Dirección de la PBX. En nuestro caso voip.iespuigcastellar.xeill.net
  • Identificador de usuario (el número de teléfono que utiliza)
  • La contraseña

Al completar el proceso de registro la centralita toma nota de la dirección IP en la que se encuentra el cliente, y así será posible enviarle llamadas. Asterisk considera que un teléfono que no está registrado es un teléfono ocupado.

Durante el proceso de registro se puede enviar la contraseña en texto plano, o bien utilizar el algoritmo MD5 o utilizar clave pública/clave privada para autentificar al usuario.

Softphones y harphones

Un softphone es un programa que se comporta como un teléfono. Puede registrarse con Asterisk y permite realizar y recibir llamadas utilizando un micrófono y unos altavoces o auriculares conectados al PC.

Algunos Softphones que soportan el protocolo IAX2 son iaxComm (multiplataforma GNU/Linux, MacOSX y Windows) y Kiax (GNU/Linux).

La ventaja de los softphones es que se pueden utilizar en cualquier máquina y no necesitan ningún hardware extra (salvo obviamente la targeta de sonido, el micrófono y los altavoces). El inconveniente es que tener que colocar un PC donde sólo hace falta un teléfono es un engorro. Además de que un teléfono de verdad es mucho mas ergonómico que un PC.

Por eso existen hardphones que son teléfonos de verdad que se registran en nuestra PBX igual que cualquier softphone.

En el mercado se encuentran teléfonos hardware que implementan H.323, o SIP o IAX2 o varios de ellos. Puede que se trate de modelos 'fijos' con un conector RJ-45 que conectariamos a nuestra LAN o de modelos móviles con un adaptador WiFi y que funcionan en cualquier WLAN.

Otra posibilidad es utilizar un ATA (Analog Telephony Adapter). Un ATA es una pequeña caja que cuenta con un conector RJ-45 para conectarlo a nuestra LAN y un conector RJ-11 para conectar cualquier equipo analógico (teléfono o fax). El propio ATA tiene una dirección IP y está configurado con los parámetros necesarios para registrarse en la PBX de VoIP. Existen modelos con soporte para SIP y para IAX2. Si se desea conectar un FAX utilizando un ATA, se deberá utilizar un CODEC con buena calidad como µLaw o aLaw, GSM introduce demasiada pérdida.

Referencias: