Curso Asterisk (VIII): Plantilla mínima de configuración

En un comentario del capítulo anterior he recibido una petición que me ha parecido suficientemente interesante como para dedicarle una pequeña entrada independiente.

En el comentario, el autor pide si sería posible publicar el contenido de los archivos sip.conf y extensions.conf reducidos a su mínima expresión, sin extensiones de ejemplo ni ningún tipo de relleno, salvo los parámetros de seguridad mencionados en el correspondiente capítulo.

A continuación, os pongo el contenido de dichos archivos. Lo que incluyen es lo mínimo imprescindible, justo el esqueleto sobre el que empezar a definir vuestras extensiones y vuestro dialplan.

[general]
context=default
language=es
srvlookup=yes
useragent=Asterisk PBX
allowguest=no
alwaysauthreject=yes
udpbindaddr=0.0.0.0:42187

;NAT
externhost=sip.vuestrodominio.com
externrefresh=600
localnet=192.168.0.0/255.255.255.0
nat=force_rport,comedia
directmedia=no

Sigue leyendo

Curso Asterisk (VII): Seguridad

Desde el capítulo 5 estamos conectados a proveedores VoIP, lo que significa que un atacante malintencionado podría generarnos pérdidas económicas si no tuviéramos bien configurado nuestro Asterisk.

Configurarlo correctamente no parece complicado: das de alta tus extensiones y tus proveedores, y listo. Todo tiene clave, todo parece estar bien. ¿Seguro? Desgraciadamente, la implementación SIP de Asterisk es insegura en su configuración por defecto y necesitaremos saber lo que estamos haciendo para proteger nuestro sistema de usos no autorizados.

Pero que no cunda el pánico, porque si has seguido el curso al pie de la letra, ya has ido aplicando sin saberlo una gran parte de las medidas que detallaremos en el presente capítulo. Aun así presta atención, ya que es necesario conocer ciertos detalles para no meter la pata cuando crees por ti mismo tu configuración, y para poder llevar a cabo otras cosas que hasta ahora no hemos hecho.

Sigue leyendo

Curso Asterisk (VI): Lidiando con el NAT

El enemigo público número uno del protocolo SIP son las tablas NAT. El NAT es la principal causa de problemas a la hora de montar nuestro servidor Asterisk. Desafortunadamente para nosotros, debido a la falta de IPs públicas de IPv4, lo normal en nuestros hogares es que estemos detrás de un NAT. Por lo tanto, si queremos montar nuestro Asterisk dentro de casa, tendremos que pelearnos con él.

Si haciendo pruebas se obtienen alguno de estos resultados, casi seguro que estemos experimentando problemas derivados de estar dentro de una red privada con NAT:

  • Audio sólo en un sentido
  • Ausencia total de audio en ambos sentidos
  • No puedes recibir llamadas
  • Las llamadas se cortan transcurridos 10-30 segundos desde el establecimiento

 Los escenarios posibles son los siguientes:

  • El servidor está detrás de un NAT
  • Sólo un extremo está detrás de un NAT
  • Ambos extremos están detrás de un NAT
  • Ambos extremos y el servidor están detrás de un NAT

Sigue leyendo

Curso Asterisk (V): Interconexión con proveedores VoIP

Ha llegado el momento de que nuestra centralita Asterisk pueda comunicarse con el exterior. Mediante el uso de proveedores de telefonía VoIP podremos realizar llamadas a la Red de Telefonía Conmutada, y también que nos puedan llamar desde ella. Aquí empieza el verdadero potencial de Asterisk.

Podemos separar los proveedores VoIP en dos categorías diferenciadas en función del servicio que proporcionan:

  • Proveedores de minutos: Permiten realizar llamadas hacia la Red de Telefonía Conmutada, cobrándonos por tiempo u ofreciéndonos tarifas planas de llamadas. Las tarifas son variadas, pero podemos encontrar precios de 1 cent/minuto o incluso menos a destinos tanto nacionales como internacionales.
  • Proveedores de DID: Nos proporcionan un número de teléfono de la Red de Telefonía Conmutada donde cualquier persona nos pueda llamar, y nos entregan las llamadas  a nuestro Asterisk. Normalmente se alquilan por meses, y tienen un coste entre 2 y 10€/mes según el proveedor y el tipo de número. Por ejemplo, podemos tener un DID de numeración fija de Madrid del tipo «91 xxx xx xx», o de cualquier otra provincia española. También podemos alquilar números de países extranjeros para que nos llamen desde allí a precio de llamada local.

Y por supuesto, podemos encontrar proveedores que ofrezcan los dos servicios al mismo tiempo.

Sigue leyendo

Curso Asterisk (IV): El Dialplan

En la anterior entrada vimos cómo dar de alta algunas extensiones internas, y trabajamos muy por encima con el Dialplan para poder llamar de una extensión a otra.

El Dialplan es el verdadero corazón de Asterisk y de cualquier sistema VoIP. El Dialplan, o plan de marcado, es una colección ordenada de acciones que se ejecutan cuando alguien marca un número dentro de nuestro Asterisk. El ejemplo más trivial sería que cuando alguien marca la extensión de otra persona, por ejemplo «3001», suene el teléfono de ese usuario. Sin embargo, se pueden hacer cosas mucho más avanzadas, como por ejemplo gestionar las llamadas en función de un horario, crear una centralita automática de recepción de llamadas, grabar conversaciones, poner música en espera, etc.

Antes de entrar en lo que se puede hacer con el Dialplan, vamos a definir algunos conceptos básicos.

Sigue leyendo

Curso Asterisk (III): Extensiones Internas

Ya es hora de empezar a hacer algo con nuestro flamante y recién instalado Asterisk. Los objetivos para el capítulo de hoy son:

  • Ver algunos parámetros de configuración de SIP
  • Crear un par de extensiones SIP
  • Crear un dialplan que permita hacer llamadas entre extensiones
  • Hacer una llamada de prueba desde un softphone

A partir de ahora el término dialplan empezará a aparecer mucho. El dialplan es el corazón de Asterisk, y es donde reside buena parte de su potencial. Más adelante lo veremos en profundidad, pero de momento es suficiente con saber que es donde se define la lógica a seguir cuando entra una llamada en el sistema.

Crear extensiones SIP

Vamos a editar el archivo /etc/asterisk/sip.conf para que quede de esta manera:

[general]
udpbindaddr=0.0.0.0:5060
context=default
srvlookup=yes
allowguest=no
alwaysauthreject=yes

[3001]
type=friend
host=dynamic
username=3001
secret=password3001
callerid="Pepe" <3001>
context=extensiones-internas
canreinvite=no

[3002]
type=friend
host=dynamic
username=3002
secret=password3002
callerid="Juan" <3002>
context=extensiones-internas
canreinvite=no

Sigue leyendo

Curso Asterisk (II): Instalación

En el capítulo de hoy vamos a instalar Asterisk en una Debian 7 Wheezy. Para ello tenemos dos formas, en función de si queremos utilizar los repositorios de Debian o preferimos compilar la última versión de Asterisk a partir de su código fuente. Yo os recomiendo esta última.

Instalar Asterisk: The Easy Way

En los repositorios de Debian tenemos la versión Asterisk 1.8 disponible. Instalarla es tan fácil como hacer lo siguiente:

# apt-get install asterisk

La versión 1.8 es suficiente para empezar a cacharrear, pero es bastante antigua. Para un uso real recomiendo instalar la última versión disponible, normalmente con más funcionalidades y menos bugs, a partir del código fuente. También necesitaremos compilar si queremos hacerlo funcionar en plataforma ARM (RaspBerry Pi, PandaBoard, etc). La versión estable más reciente en este momento es Asterisk 11.5.

Sigue leyendo

Curso Asterisk (I): Introducción

Digium Asterisk

Varias personas, tanto en persona como en foros, me han preguntado cómo funciona esto de la telefonía VoIP y cómo se le puede sacar provecho. Esto me ha motivado para tratar de plasmar en el blog algo de información sobre el tema. En los próximos artículos hablaremos de telefonía VoIP, protocolo SIP, y Asterisk. Pero primero… la introducción.

¿Por qué montar una centralita PBX en tu casa?

Existen multitud de proveedores de telefonía VoIP en el mercado con tarifas de lo más variadas. Podríamos pensar en contratar una línea VoIP con un proveedor y no complicarnos más la vida, pero, ¿podríamos sacar mejor provecho de la VoIP?

Sigue leyendo

Soluciona los problemas de conectividad WiFi/3G en HTC Desire

A estas alturas pocas HTC Desire seguirán en uso, ya que es un modelo de segunda generación que lleva tiempo en el mercado, y que ha sido ampliamente superado por la avalancha de dispositivos Android que ha venido después.

Si como yo aun conservas una HTC Desire, es muy probable que hayas probado ROMs cocinadas para tratar de estirarla en el tiempo. Si has instalado alguna ROM basada en Ice Cream Sandwich o Jelly Bean, o te has decantado por una ROM estable y limpia como CyanogenMod 7, es posible que estés sufriendo problemas de conectividad 3G después de estar mucho tiempo conectado por WiFi.

Los foros están llenos de gente comentando el mismo problema. Estás en tu casa conectado por WiFi y todo va bien, pero cuando sales a la calle, a la Desire le cuesta varios minutos darse cuenta de que ya no tiene la WiFi a su alcance, y no conmuta a 3G. En el indicador de cobertura se indica que tienes señal, pero en pantalla no aparece el símbolo de conexión G, E o H, y al abrir un navegador se comprueba que efectivamente no hay conectividad.

En algunas ocasiones es suficiente con desactivar y reactivar los datos, o con entrar y salir  del modo avión. Pero la mayor parte de las veces es necesario reiniciar el teléfono.

Si has instalado Chromium, ICS for Desire, o simplemente la CyanogenMod 7.2.0.1, habrás notado este molesto problema. ¿Qué es lo que ocurre? Ocurre que el RIL es incorrecto.

El RIL es el Radio Interface Layer. Es decir, es un componente software que hace de intermediario entre Android y el hardware de radio del teléfono, encargado de controlar todas las comunicaciones de radio: GSM, WCDMA, WiFi, Bluetooth, GPS.

Si el RIL es incorrecto, la gestión del hardware de radio no funcionará bien y nos provocará problemas. ¿Cómo lo solucionamos? Instalando un RIL correcto en nuestra ROM.

Enlace: Listado de RILs para HTC Desire en XDA

En el enlace indicado tenemos el listado completo de RILs para nuestra Desire. La CyanogenMod 7.1 viene con el HTC-RIL 1.6.1062G (Apr 23 2010,17:35:06) y funciona bastante bien, aunque de vez en cuando sufre algún corte. La CyanogenMod 7.2.0.1 en cambio incluye el HTC-RIL 2.2.0028HM (Sep 20 2010,22:33:44) y sufre muchísimos problemas de conectividad.

¿Cómo puedo saber qué versión de RIL tengo en mi ROM? Lanza Terminal en el teléfono y ejecuta lo siguiente:

$ su
# getprop «gsm.version.ril-impl»

El RIL recomendado para no tener problemas con CyanogenMod 7.2.0.1 es el HTC-RIL 2.2.1003G (Nov 2 2010,17:17:45). Varios usuarios en diversos foros han declarado haber solucionado el problema al flashear el teléfono con este RIL.

El procedimiento para flashear el RIL es el siguiente:

  1. Copiar el RIL sin descomprimir (formato ZIP) en la raíz de la tarjeta SD
  2. Reiniciar en modo Recovery
  3. Si queremos poder volver atrás, este es el momento de hacer un Nandroid Backup
  4. Montar «/system»
  5. Elegir «Flash from SD» y elegir el archivo del RIL
  6. Esperar a que termine y reiniciar

(Se asume que se tiene el teléfono rooteado y con un custom recovery. Si no es así, aconsejamos leer otras guías para conocer el procedimiento. Aprender a rootear el teléfono queda fuera del alcance de esta guía.)

El RIL forma parte de la ROM, por lo que si flasheamos otra ROM deberemos repetir el proceso. El flasheo del RIL no es un procedimiento crítico como sí lo es flashear el firmware de la radio, que puede dañar el teléfono. Si ocurre algún problema con el flasheo del RIL, podemos volver a probar de nuevo con el mismo archivo, probar con otro RIL, o flashear directamente otra ROM.

Con este nuevo RIL, mi HTC Desire conecta en modo HDPA nada más encender, y conmuta entre WiFi y 3G al instante. No he vuelto a sufrir problemas de conectividad 3G desde que hice el cambio. Si lo probáis, espero que os funcione tan bien como a mí.

[HOWTO] Tethering automático por Bluetooth mediante Tasker

Hola a todos,

Aquí os presento un tutorial para tener tethering automático entre una tablet WiFi y nuestro móvil, de tal forma que cuando la tablet no tenga conectividad WiFi se conecte automáticamente al móvil, y cuando vuelva a tener WiFi se desconecte del móvil y deje de gastar 3G. Útil para tener conectividad en todo momento y sin hacer absolutamente nada.

¿Por qué por Bluetooth? Porque consume muchísima menos batería, porque no exponemos una WiFi a todo el mundo, y porque nuestro móvil no puede tener el tethering WiFi activado y a la vez ser cliente de otras WiFis.

¿Por qué con Tasker? Porque nos va a permitir que la tablet conmute a tethering automáticamente cuando no tengamos una WiFi a mano, sin que tengamos que hacer una sola acción ni en el teléfono ni en la tablet.

Ingredientes:

Tasker es una aplicación realmente potente que permite definir acciones a partir de todo tipo de condiciones. Por ejemplo podemos definir que ponga el móvil en modo vibración al llegar al trabajo, que pase a 2G cuando estemos conectados a una WiFi, que geoposicione cuando nos desconectemos del manos libres del coche, etc. En este caso lo vamos a usar junto con Bluetooth Auto Connect para conectar a un dispositivo bajo demanda, concretamente a nuestro móvil, cuando se cumplan ciertas condiciones sobre la WiFi.

La pantalla de Tasker es un poco árida por la cantidad de operaciones que se pueden hacer, pero el proceso es sencillo. Veamos la idea intuitiva.

Hay que hacer dos cosas:

  1. Crear un perfil «Autotethering On» que se conecte al móvil cuando no haya conexión WiFi
  2. Crear una condición de salida que desconecte del móvil cuando haya conexión WiFi

Aunque yo, para ahorrar batería, lo he definido así:

  1. Crear un perfil «Autotethering On» que active el Bluetooth y se conecte al móvil cuando no haya conexión WiFi
  2. Crear una condición de salida que desactive el Bluetooth cuando haya conexión WiFi

Veamos los pasos que debemos dar en Tasker, aunque antes de nada debemos emparejar la tablet con nuestro móvil por Bluetooth.

Autotethering

  1. Ejecutamos Tasker
  2. Pulsamos el botón «+» de la parte inferior
  3. Asignamos un nombre del tipo «Autotethering On»
  4. En «Contexto» elegimos «Estado»
  5. En «Categoría» elegimos «Red»
  6. En «Acciones de red» elegimos «Conectado a Wifi»
  7. En «Conectado a Wifi» seleccionamos «Invertir» y aceptamos
  8. En «Seleccionar tarea» elegimos «Nueva tarea»
  9. Le ponemos un nombre del tipo «Conectar al móvil»
  10. En «Editar tarea» pulsamos «+»
  11. En «Categoría de la acción» elegimos «Red»
  12. En «Acciones de Red» elegimos «Bluetooth»
  13. En «Bluetooth» elegimos «Establecer Encendido»
  14. Aceptamos hasta volver al paso de «Editar tarea»
  15. En «Editar tarea» pulsamos «+»
  16. En «Categoría de la acción» elegimos «Plugin»
  17. En «Acciones de Plugin» elegimos «Bluetooth Auto Connect»
  18. En «Bluetooth Auto Connect» pulsamos en «Editar»
  19. En la ventana de configuración que aparece elegimos nuestro móvil (¡debe estar previamente emparejado!)
  20. Aceptamos todo hasta volver a la pantalla principal de Tasker
  21. Hacemos pulsación larga sobre la tarea «Conectar al móvil» y elegimos «Añadir tarea de salida»
  22. En «Seleccionar tarea» elegimos «Nueva tarea»
  23. Le ponemos un nombre del tipo «Desconectar Bluetooth»
  24. En «Editar tarea» pulsamos «+»
  25. En «Categoría de la acción» elegimos «Red»
  26. En «Acciones de Red» elegimos «Bluetooth»
  27. En «Bluetooth» elegimos «Establecer Apagado»
  28. Aceptamos todo hasta volver a la pantalla principal de Tasker
  29. Pulsamos en el tick verde para activar el perfil (se cerrará Tasker)


Os tiene que quedar algo así:

Teléfono previamente emparejado:

Configuración de Tasker:

Cuando salgáis de casa y dejéis de tener WiFi, veréis lo siguiente en vuestro teléfono y estaréis compartiendo la conexión con la tablet sin tocar un botón:

¡Feliz navegación! 😉