El documento describe cómo construir una centralita virtual utilizando FreeSWITCH. FreeSWITCH es una plataforma de código abierto para comunicaciones que puede usarse como PBX, softswitch u otras aplicaciones. El documento explica los módulos y características clave de FreeSWITCH como eventos, CDR y alta disponibilidad, así como cómo interactuar con él a través de XML y sockets.
1. Construyendo una centralita virtual
con FreeSWITCH
José Francisco Irles
jfirles@siptize.com
@josefu
7 de noviembre de 2013
2. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Sobre Siptize
●
Operador VoIP
●
Satmak: Soft-Switch 4/5
●
Plataforma Hosted PBX
●
Consultoría VoIP
www.siptize.com
3. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
¿Qué es FreeSWITCH? (I)
●
Plataforma Open Source de comunicaciones
●
Puede usarse como:
–
–
–
–
–
Biblioteca (libfreeswitch)
Softphone
PBX
Soft-switch
Etc
●
Licencia MPL 1.1
●
B2BUA
www.siptize.com
4. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
¿Qué es FreeSWITCH? (y II)
●
Configuración en XML (hay alternativas)
●
Soporte para diferentes protocolos
–
–
–
–
–
–
SIP (udp, tcp, websockets)
H323
XMPP-Jingle
SCCP
Skype
TDM (FreeTDM)
www.siptize.com
5. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
¿Por qué elegir FreeSWITCH? (I)
●
Máxima de FreeSWITCH: no reinventar la rueda
–
–
–
Sofia SIP
cURL
PostgreSQL y SQLite para el core
●
Multiplataforma
●
Escalabilidad
●
Flexibilidad
●
Multi dominio
●
Sofia Profiles
www.siptize.com
6. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
¿Por qué elegir FreeSWITCH? (y II)
●
Modelo de datos no prefijado
●
Tecnologías estándar para “realtime”:
–
–
–
●
Lenguaje de programación:
–
●
HTTP
XML
JSON
El que tú decidas
Facilidad para clusterizar el backend: HTTP
www.siptize.com
8. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Arquitectura Hosted PBX
www.siptize.com
9. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Configuración de FreeSWITCH
●
Módulo mod_xml_curl
–
–
–
Configuración mínima en local (fichero xml)
Resto de configuración cargada mediante servicio
web
RESTful
●
POST a url configurada
www.siptize.com
10. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Ejemplo mod_xml_curl: REGISTER
www.siptize.com
12. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Interactuar con FreeSWITCH
●
Módulo mod_event_socket
–
–
–
–
–
●
Modo inbound/outbound
Enviar comandos y recibir la respuestas
Escucha de eventos
Conexión “statefull”: Socket TCP
“Equivalente” en asterisk: manager + FastAGI
Módulo mod_xml_rpc: RESTful
–
–
Sólo para enviar comandos (y recibir su respuesta)
Conexión “stateless”: HTTP (request/response)
www.siptize.com
13. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Eventos en FreeSWITCH
●
mod_event_socket (visto antes)
●
mod_event_multicast
–
Permite replicar registros y presencia sin
compartir base de datos
●
mod_erlang_event
●
mod_event_zmq
–
–
–
Formato JSON
Escalable
Bindings para múltiples lenguajes
www.siptize.com
14. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
CDR
●
mod_cdr_xml (recomendado)
●
mod_cdr_csv
●
mod_cdr_mongodb
●
mod_cdr_pg_csv
●
mod_cdr_sqlite
●
mod_json_cdr
●
mod_radius_cdr
www.siptize.com
16. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Alta Disponibilidad: cómo dormir más tranquilo
www.siptize.com
17. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Estrategia alta disponibilidad
●
Base de datos en cluster HA
●
Replicar en “n” datacenters:
–
Base de datos (sólo elementos necesarios)
●
–
●
Datos “read-only”
Los CDR's se envían a la db principal
Usar los DNS
–
–
Repartir carga (granularidad: centralita)
Ante un fallo en datacenter:
●
●
Failover automático → SRV
Failover manual → Cambio en DNS
www.siptize.com
18. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
sofia recover
●
●
●
●
“Magia” en FreeSWITCH
Se mueve todo (media incluido) de un servidor
a otro
El usuario sólo detecta una pérdida momentánea
de audio
Requerimientos:
–
Base de datos del core compartida
●
●
–
<param name="odbc-dsn" value="odbc://dsn:username:password"/>
<param name="core-recovery-db-dsn" value="odbc://dsn:username:password"/>
Parámetro en configuración de sofia:
●
<param name=”track-calls” value=”true”/>
www.siptize.com
19. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
sofia recover: situación normal
●
Nodo activo:
–
–
●
“n” llamadas con media a través de él
“m” llamadas sin media a través de él
Nodo pasivo, dos alternativas:
–
–
FreeSW ITCH apagado
FreeSW ITCH en marcha
●
net.ipv4.ip_nonlocal_bind=1
www.siptize.com
20. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
sofia recover: fallo en nodo activo
●
Parar nodo activo
●
Nodo pasivo adquiere la IP flotante
●
●
Forzar update en tabla arp en el router
(arping)
Ejecutar “sofia recover” en nodo pasivo
www.siptize.com
21. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
sofia recover: nodo pasivo pasa a activo
●
●
Se recuperan las llamadas activas
Pequeño lapsus (~2 segundos) sin audio
entre las extensiones
www.siptize.com
22. Construyendo una centralita virtual con FreeSWITCH
José Francisco Irles
@josefu
Visión global de plataforma de centralita virtual
www.siptize.com