Cluster para Novatos Parte I : Keepalived + Asterisk / Kamailio

16 Jul

En los siguientes artículos  voy a abordar diferentes aspectos para clusterizar o mejorar el comportamiento en alta disponibilidad con Asterisk y Kamailio.

Tradicionalmente para disponer de una ip de servicio que balancea automáticamente entre dos máquinas, una activa y otra pasiva , o activo-activo, se ha usado pacemaker y corosync, incluso en algunos casos ucarp. Estos proyectos cierto es que han sido empleados mucho en el pasado pero hoy en día , keepalived es un proyecto que está creciendo bastante y merece la pena  empezar a usarlo en estas arquitecturas. Usa el protocolo VRRP empleado en alta disponibilidad en red como routers, mikrotik y similares.

En debian simplemente tenemos que instalar los paquetes con apt-get

apt-get install keepalived

También nos hará falta instalar sipsak que luego veremos para que nos servirá.

apt-get install sipsak

Para el buen funcionamiento deberemos cambiar algunos parámetros de sysctl , algunos relacionados con ARP para que cuando haya un salto se encaminen las peticiones lo antes posible a la máquina activa y otros para permitir bindear Asterisk a ips que no tiene (la activa).

Editaremos /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind = 1

net.ipv4.conf.all.arp_ignore = 3
net.ipv4.conf.all.arp_announce = 2

y aplicaremos los cambios con:

sysctl -p

Una vez hecho esto ya configuraremos el keepalived /etc/keepalived/keepalived.conf de cada uno de los nodos:

vrrp_instance cluster{

state MASTER

interface eth0

virtual_router_id 01

priority 100

nopreempt

advert_int 1

virtual_ipaddress { IP.SER.VI.CIO/24 dev eth0   label eth0:1 }

track_script { comprobar_sip }

notify_master “/etc/keepalived/estado.sh MAESTRO “

notify_backup “/etc/keepalived/estado.sh BACKUP “

}

Para provocar el salto cuando Asterisk o Kamailio no responda usaremos un script comprobar_sip, que empleará el sipsak como antes comentábamos.

vrrp_script comprobar_sip {

script “/etc/keepalived/comprobar_sip.sh”

interval 10 # se comprueba cada 10 segundos

fall 3 # Si falla 3 veces consideramos caído

rise 5 #Exigimos 5 veces para OK

}

El script en cuestión comprobará si responde Asterisk. En el caso de Kamailio hay que tener cuidado y que responda a los OPTIONS y en Asterisk que el contexto entrante por defecto tenga la extensión en cuestión (s)

[entrantes]

exten => s,1,Noop

Para que no tengamos problemas.

Crearemos el script comprobar_sip.sh como sigue:

#!/bin/bash

sipsak -s sip:s@IP_SERVICIO:5060

if [$? -ne 0 ] ; then

exit

else

exit 0

fi

Y crearemos el script estado.sh

#!/bin/bash

STATE=$1

case $STATE in

“MAESTRO”)

service kamailio start || service kamailio restart

exit 0

;;

“BACKUP”)

service kamailio stop

exit 0

;;

esac

En el otro nodo haremos lo mismo pero intercambiando las IPS en el script comprobar_sip.sh y

….

state BACKUP

virtual_router_id 01

priority 99

….

en la configuración de keepalived.conf

Este año soy ponente en la Astricon : La feria por excelencia de Asterisk

1 Jul

Captura de pantalla 2015-07-05 a las 12.05.41

 

Mi ponencia sobre Home Automation with Asterisk ha sido aceptada para la Astricon 2015 que este año se celebra del 13 al 15 de Octubre en Orlando.

Mi charla será el día 14 de Octubre de 11:00 a 11:35 AM hora local.

Podéis consultar la agenda completa aquí

Estoy buscando patrocinadores que me ayuden a sufragar parte de los gastos de traslado al evento , así que si estáis interesados por favor poneros en contacto conmigo en el apartado de contacto o bien por twitter @albersag.

Gracias por vuestra colaboración

Cómo configurar un Mikrotik para usar la vlan3 de voip de Movistar FFTH

26 Feb

Para los que la vozip es una pasión, lo de usar la voz mediante el puerto FXS de la ONT se nos queda pobre, mucha gente para integrar líneas de FFTH en centralitas suele usar un adaptador FXO conectado al FXS , y de esta forma integrarlo en la centralita IP.

Pero esto aunque funciona no es lo óptimo, porque gastarse más dinero en gateway cuando podemos atacar directamente a la plataforma de Movistar a nivel SIP.

Para ello podemos hacer dos cosas, conseguir migrar de alguna forma a sbc.ngn.rima-tde.net nuestra cuenta de fijo, por ejemplo una de las vías es apuntarse a la beta de Mi Fijo 2.0 que conté hace unos días y solicitar el poderla usar fuera de la conexión de fibra. Nos proporcionarán un usuario y en un post posterior mostraré como configurarlo con una centralita comom Asterisk.

La segunda sería sustituir el router de Movistar y atacar directamente con un Mikrotik. Para ello debemos crear dos vlanes (6 Datos y 3 Voz) , si dispusiéramos de Movistar TV haría falta configurar la vlan2 también, pero eso es otro asunto.

Os muestro la configuración necesaria a continuación.

Creamos las dos vlanes:

add interface=ether1-ont-casa l2mtu=1594 mtu=1594 name=vlan3 vlan-id=3

add arp=proxy-arp interface=ether1-ont-casa l2mtu=1594 mtu=1594 name=vlan6 \
vlan-id=6

Habilitar cliente DHCP por la vlan3

add add-default-route=no dhcp-options=hostname,clientid disabled=no \

interface=vlan3 use-peer-dns=no use-peer-ntp=no

Permitir tráfico vlan3 por el firewall y realizar NATeado

/ip firewall filter

add chain=input in-interface=vlan3

add chain=output out-interface=vlan3

add action=masquerade chain=srcnat out-interface=vlan3

Habilitar los SIP ports

/ip firewall service-port

set sip ports=5060,5061,5070

Y añadir las reglas de rutado por la vlan3

/ip route

add distance=1 dst-address=10.31.255.128/27 gateway=10.22.0.1%vlan3 \
routing-mark=to_vlan3

/routing rip interface

add interface=vlan3 passive=yes receive=v2

/ip firewall mangle

add action=mark-connection chain=prerouting dst-address=10.31.255.128/27 \

in-interface=bridge-local new-connection-mark=voip_vlan3 src-address=\

10.0.1.8 (Aquí la 10.0.1.8 es una centralita IP o teléfono IP)

add action=mark-routing chain=prerouting connection-mark=voip_vlan3 \

in-interface=bridge-local new-routing-mark=to_vlan3

add action=mark-routing chain=output connection-mark=voip_vlan3 \

new-routing-mark=to_vlan3

y luego las rutas corresponidentes

/ip route

add distance=1 dst-address=10.31.255.128/27 gateway=10.22.0.1%vlan3 \

routing-mark=to_vlan3

Con esto cuando vayamos a registrar un teléfono IP o centralita, usaremos los datos

IP de registro: telefonica.net:5060

Proxy: 10.31.255.134:5070

Usuario: 9XXXXXXXX

Password : 9XXXXXXXX ( El mismo número)

Codecs Soportados: G722, G711 , G729 ,H264,H263 y H263p

Cualquier duda, dejarla en comentarios

Crear una red IPV6 para pruebas con VoIP

27 Oct

Muchos de vosotros (yo incluido) no tendréis ipv6 de forma nativa en vuestra conexión a internet, aunque en algunos países si que es así, sobre todo del norte de Europa, o al otro lado del charco.

Sin embargo a nivel de CDN y en servidores dedicados es ya una realidad, de hecho hace poco DigitalOcean anunció soporte para #ipv6.

Considerando que tenemos ese primer paso , teniendo un servidor dedicado o virtual con conexión ipv6, usaremos OpenVPN para “traernos” la ipv6 al otro extremo y rutar dicho tráfico ipv6 través de nuestro servidor dedicado.

¿Por qué no usar un tunnel broker como HE o Sixxs.net?

Lo usé en el pasado y aparte de no tener mucho ancho de banda de salida, siempre te cabe la duda de por donde pasa lo que envías. Generalmente son tunnels ofrecidos por operadores pero no siempre es así. Me quedo más tranquilo enviando mi tráfico ipv6 por un sitio que conozco .

Nada me asegura que en el otro extremo alguien lo esté inspeccionado, pero al menos no pasa por tantos sitios. La desventaja es que quizá el POP (Punto de presencia) que será nuestro servidor dedicado puede no estar a una latencia mínima desde nuestra conexión. Pero siempre podemos incluso tener varios hasta que demos con el que mejor nos funcione.

En el caso de online.net os recomiendo esta guía para echar a andar ipv6 (mejor que dibbler).

40

Asterisk 13 oficialmente lanzado con motivo de la Astricon

23 Oct

Captura de pantalla 2014-10-23 a las 7.54.55

Coincidiendo con la Astricon, la feria Asterisk por antonomasia en USA, ha sido liberada la versión Asterisk 13 que incluye algunas de las novedades que comento a continuación:

 

– Se trata de una version LTS

– Se ha rediseñado el sistema de bridging y media core

– Numerosas mejoras al canal SIP PJSIP

– Mejorada la gestión remota.

Así que ya toca ponerle en algún equipo en producción 🙂 No seáis tímidos 😉

Más info aquí

Digium lanza su servicio de Sip Trunking

20 Oct

Captura de pantalla 2014-10-20 a las 11.03.51Interesante movimiento del mantenedor principal de Asterisk y fabricante de tarjetería  y teléfonos para Asterisk, ofreciendo para USA servicio de SIP Trunking con numeración entrante así como de red inteligente, y cobro por minuto o bien con tarifa plana mensual

Podéis ver más información de precios aquí

Para aquellos que busquéis un proveedor en este lado del charco, tenéis a voz.com 🙂

RadioVozIP – VOIP2DAY 2014

9 Oct

Hoy daba una conferencia en el #voip2day . Este año se me ocurrió hablar sobre Radio y Voz IP , y mostrar que no es tan complicado como puede parecer , integrarlo con sistemas Asterisk o audio IP.

Podéis ver la conferencia en ingles y castellano en los siguientes enlaces, así como algunas de las fotos que los asistentes a la conferencia fueron sacando 🙂

 

 

Fotos en Twitter aquí 

Las demos este año no fallaron y creo que la gente quedó bastante contenta 😉

Gracias  por asistir un año más

Un abrazo

Alberto

Respoke Web Communications

25 Sep

Digium lanza una plataforma basada en la nube para añadir comunicaciones seguras en web y móvil. Esta plataforma ofrece una API extensa que permite a los desarrolladores añadir voz, video, mensajería y datos a sus aplicaciones. La interfaz de desarrollo con Respoke usa una librería en Javascript intuitiva y APIs RESTful.

Los early adopters pueden empezar a dar feedback y construir el futuro del servicio. El lanzamiento público será en 2015. El acceso a desarrolladores es limitado así que no os quedéis atrás y entrar en  www.respoke.io.

La verdad es que tiene una pinta estupenda 🙂

Más información aquí

Gana un teléfono Digium contando tu proyecto con Asterisk

17 Mar

Digium propone un concurso para ganar un teléfono Digium .

La dinámica es sencilla, debes subir un vídeo a youtube  contando tu historia en la que Asterisk esté presente.

Hay unas pequeñas reglas que podéis ver en la entrada original en el blog de digium.

Seguro que muchos de vosotros tenéis instalaciones curiosa e interesantes.

Suerte!

Más info -> http://blogs.digium.com/2014/03/12/asterisk-story-free-digium-phone/

Instalar Asterisk sobre Debian en un container OPENVZ con Proxmox

25 Jan

Si alguno no ha probado Promox todavía, le animo a que lo haga . Proxmox hace la virtualización fácil y accesible a cualquier persona. Siempre puedes montar KVM o OPENVZ a mano , pero Proxmox hace esa tarea más sencilla.

Un container es como un servidor independiente que puede ser reiniciado, con sus direcciones IP independientes, memoria, procesos, ficheros, aplicaciones, y configuraciones. En otras palabras es como tener un servidor enjaulado dentro del servidor físico donde corre OPENVZ y en este caso Proxmox.

Es posible tener varios Asterisk corriendo en la misma máquina, en un contenedor cada uno con su configuración independiente, en un puerto independiente (para esto habrá que jugar luego un poco con iptables).

Una de las ventajas que más me gusta de Proxmox, es la facilidad para hacer backups y restaurar máquinas, con lo que la reposición ante fallos o desastres en esa máquina es super rápida. Una vez que te acostumbras a usarlo, no querrás volver a tener una máquina no virtual 😉

Empecé en casa instalándolo en el #hp #microserver que me trajeron los Reyes magos, y poco a poco fui jubilando el “cluster” de raspberrypi que tenía, y pasándolo todo a Proxmox.

Empecemos con lo que nos ocupa.

40

Configurar YATE con VOZ.COM

9 Jan

YATE (Yet Another Telephony Engine), es un software que usé hace bastante tiempo y hasta ahora no había vuelto a retomarlo. Lo usé como pasarela de H.323 a SIP, puesto que lo hace de forma nativa, pero hoy en día la funcionalidad es bastante mayor como podéis ver en su página http://yate.null.ro/pmwiki/

Incluso lo podéis usar de Cliente/Servidor IAX o servidor de conferencias.

Una de las opciones interesantes es que se puede usar como SBC (Session Border Controller) en SIP. Lo que permite añadir una capa de seguridad y tratamiento de NAT delante de vuestro sistema SIP, sin la “complejidad” que puede tener configurar Kamailio por ejemplo.

1.- Primeros Pasos: Instalación

Para instalar YATE tenéis dos opciones, una sería instalar un paquete precompilado para vuestros sistemas ya sean Centos o Debian por ejemplo, con la aplicación apt-get o yum dependiendo del que corresponda.

Otra opción sería compilarlo descargando los fuentes mediante subversion:

Ésta fue la opción que yo tomé.

svn checkout http://voip.null.ro/svn/yate/trunk yate

Otra opción es descargar los fuentes de:

Os recomiendo seguir esta guía que es bastante completa:

http://docs.yate.ro/wiki/Compiling_and_installing_Yate_from_SVN

2.- Arranque de YATE

Una vez que hemos comprobado que YATE está arrancado

root@voip:~# /etc/init.d/yate restart

Restarting yate: yate.

root@voip:~#ps -fax

2672 ?        Ss     0:00 /usr/bin/yate -p /var/run/yate.pid -d -rs -l /var/log

2673 ?        Sl     0:03  \_ /usr/bin/yate -p /var/run/yate.pid -d -rs -l /var

root@voip:~#

Procederemos a configurar nuestros primeros usuarios.

3.- Configuración de  extensiones SIP Locales

Para añadir usuarios debemos editar el fichero regfile.conf

[100]

password=contrasenyafuerte100

[101]

password=contrasenyafuerte101

Una vez hecho esto simplemente reiniciando yate con /etc/init.d/yate restart ya tendríamos la posibilidad de registrar mediante SIP nuestras extensiones en Yate.

Para comprobar si esto es así podemos ver el log de yate:

root@voip:/etc/yate# cat /var/log/yate

4.- Configurar rutado de llamadas

Para configurar el rutado de llamadas salientes debermos editar el regexroute.conf

Esto es quizá lo más tedioso pero os muestro un ejemplo:

${username}^$=-;error=noauth

${rtp_forward}possible=;rtp_forward=yes

${formats}^\([^,]*\)=;formats=\1

^usuariovozcom$=goto from_oficina

^6.=goto to_oficina

^9.=goto to_oficina

^8.=goto to_oficina

^0.=goto to_oficina

[from_oficina]

^usuariovozcom$=fork lateroute/101 lateroute/100

[to_oficina]

^9\(.*\)$=sip/\0;line=oficina;caller=usuariovozcom;callername=Alberto

^6\(.*\)$=sip/\0;line=oficina;caller=usuariovozcom;callername=Alberto 

^0\(.*\)$=sip/\0;line=oficina;caller=usuariovozcom;callername=Alberto

5.- Configurar la cuenta de VOZ.COM

Para configurar la cuenta de VOZ.COM deberemos editar el fichero: accfile.conf

[vozcom]

enabled=yes

protocol=sip

username=usuariovozcom

password=clavefacilitadavozcom

registrar=v1.voz.com

localaddress=auto

authname=usuariovozcom

interval=120

Una vez hecho esto podremos usar Yate como mini PBX para recibir y realizar llamadas 🙂

VozBox: Una distribución de Asterisk Todo en Uno

11 Oct

Interesante distribución me encuentro en sourceforge, además de ser conocidos desde hace tiempo, y que ponen a disposición de la comunidad, la distribución “todo en uno”, con interfaz web Freepbx y demás addons.

Podéis ver más información del proyecto aquí­

PLATAFORMAS Y VERSIONES TESTEADAS:
+ 686 Y amd64
+ Debian Wheezy
+ Asterisk: Certified-asterisk-11.2-current
+ Libpri 1.4.14
+ DAHDI LINUX COMPLETE 2.6.2.+2.6.2
+ FreePBX 2.11.0.1
+ Avantfax 3.3.3
+ FOP2 2.27
+ Webmin 1.630

Y si queréis descargar la ISO aquí­