SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
Construyendo una centralita virtual
con FreeSWITCH
José Francisco Irles
jfirles@siptize.com
@josefu

7 de noviembre de 2013
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
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
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
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
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
con FreeSWITCH se liga más,
y lo sabes...
Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles
@josefu

Arquitectura Hosted PBX

www.siptize.com
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
Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles
@josefu

Ejemplo mod_xml_curl: REGISTER

www.siptize.com
Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles
@josefu

Request/Response de FreeSWITCH al servidor web
Request
[hostname] => testmachine
[section] => directory
[tag_name] => domain
[key_name] => name
[key_value] => domain1.awesomevoipdomain.faketld
[Event-Name] => REQUEST_PARAMS
[Core-UUID] => c5c8cbf4-60c3-45a2-b110-933da620cfd2
[FreeSWITCH-Hostname] => 25515_1_36308_177178
[FreeSWITCH-IPv4] => 192.168.1.10
[FreeSWITCH-IPv6] => ::1
[Event-Date-Local] => 2009-10-27 00:47:10
[Event-Date-GMT] => Tue, 27 Oct 2009 07:47:10 GMT
[Event-Date-Timestamp] => 1256629630733916
[Event-Calling-File] => sofia_reg.c
[Event-Calling-Function] => sofia_reg_parse_auth
[Event-Calling-Line-Number] => 1671
[action] => sip_auth
[sip_profile] => internal
[sip_user_agent] => PolycomSoundPointIP-SPIP_320-UA/3.1.0.0084
[sip_auth_username] => 1004
[sip_auth_realm] => domain1.awesomevoipdomain.faketld
[sip_auth_nonce] => 533c5264-12cb-4f8b-bcdb-5ecabe5e540f
[sip_auth_uri] => sip:domain1.awesomevoipdomain.faketld:5060
[sip_contact_user] => 1004
[sip_contact_host] => 192.168.1.100
[sip_to_user] => 1004
[sip_to_host] => domain1.awesomevoipdomain.faketld
[sip_from_user] => 1004
[sip_from_host] => domain1.awesomevoipdomain.faketld
[sip_request_host] => domain1.awesomevoipdomain.faketld
[sip_request_port] => 5060
[sip_auth_qop] => auth
[sip_auth_cnonce] => hSVnPb32nA/OtkY
[sip_auth_nc] => 00000001
[sip_auth_response] => 6e4e611d7593d52e02451b70900071d8
[sip_auth_method] => REGISTER
[key] => id
[user] => 1004
[domain] => domain1.awesomevoipdomain.faketld
[ip] => 192.168.1.100

Response
<document type="freeswitch/xml">
<section name="directory">
<domain name="domain1.awesomevoipdomain.faketld">
<params>
<param name="dial-string" value="{presence_id=${dialed_user}@$
{dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
</params>
<groups>
<group name="default">
<users>
<user id="1004">
<params>
<param name="password" value="some_password"/>
</params>
</user>
</users>
</group>
</groups>
</domain>
</section>
</document>

www.siptize.com
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
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
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
Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles
@josefu

Ejemplo de CDR en XML
<?xml version="1.0"?>
<cdr core-uuid="5d80b2bf-7ae1-4fed-803e-7edf94468be0">
<channel_data>
<state>CS_REPORTING</state>
<direction>inbound</direction>
<state_number>11</state_number>
<flags>0=1;3=1;19=1;36=1;37=1;39=1;52=1;73=1</flags>
<caps>1=1;2=1;3=1;4=1;5=1;6=1</caps>
</channel_data>
<variables>
<direction>inbound</direction>
<uuid>897211c5-2f67-4c77-9928-c8c0b9e49972</uuid>
<session_id>56</session_id>
<sip_from_user>100</sip_from_user>
<sip_from_uri>100%40testsip.com</sip_from_uri>
<sip_from_host>testsip.com</sip_from_host>
<channel_name>sofia/internal/100%40testsip.com</channel_name>
<sip_received_port>5060</sip_received_port>
<sip_via_protocol>udp</sip_via_protocol>
<sip_authorized>true</sip_authorized>
<accountcode>100%40testsip.com</accountcode>
<user_context>default</user_context>
….
<app_log>
<application app_name="export" app_data="domain_name=testsip.com"
app_stamp="1378365023484959"></application>
<application app_name="export" app_data="domain=testsip.com" app_stamp="1378365023485712"></application>
<application app_name="export" app_data="pbx_id=4028818b40e7e3830140e7e38512002f"
app_stamp="1378365023486343"></application>
….
</app_log>
<callflow dialplan="XML" unique-id="0ff824e3-80c0-495e-9292-4f09c787e942" profile_index="1">
<extension name="default_extension" number="*60600" current_app="transfer">
<application app_name="export" app_data="domain_name=testsip.com"></application>
<application app_name="export" app_data="domain=testsip.com"></application>
…..
</callflow>
….

www.siptize.com
Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles
@josefu

Alta Disponibilidad: cómo dormir más tranquilo

www.siptize.com
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
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
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
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
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
Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles
@josefu

Visión global de plataforma de centralita virtual

www.siptize.com
¿Preguntas?

www.siptize.com

Más contenido relacionado

Similar a V2 d2013 jose f irles - freeswitch

Lorenzo Martínez - Welcome to your secure /home, $user [Rooted CON 2012]
Lorenzo Martínez - Welcome to your secure /home, $user [Rooted CON 2012]Lorenzo Martínez - Welcome to your secure /home, $user [Rooted CON 2012]
Lorenzo Martínez - Welcome to your secure /home, $user [Rooted CON 2012]
RootedCON
 
Policyd: Instalacion y configuracion
Policyd: Instalacion y configuracionPolicyd: Instalacion y configuracion
Policyd: Instalacion y configuracion
criscega
 
Guia de configuracion cisco 881 w logicalis
Guia de configuracion cisco 881 w   logicalisGuia de configuracion cisco 881 w   logicalis
Guia de configuracion cisco 881 w logicalis
asesinoevil
 
El servidor perfecto
El servidor perfectoEl servidor perfecto
El servidor perfecto
betabeers
 
Protocolo syslog
Protocolo   syslogProtocolo   syslog
Protocolo syslog
UTP
 

Similar a V2 d2013 jose f irles - freeswitch (20)

Despliegue de Imágenes en aulas de informática
Despliegue de Imágenes en aulas de informáticaDespliegue de Imágenes en aulas de informática
Despliegue de Imágenes en aulas de informática
 
Lorenzo Martínez - Welcome to your secure /home, $user [Rooted CON 2012]
Lorenzo Martínez - Welcome to your secure /home, $user [Rooted CON 2012]Lorenzo Martínez - Welcome to your secure /home, $user [Rooted CON 2012]
Lorenzo Martínez - Welcome to your secure /home, $user [Rooted CON 2012]
 
Policyd: Instalacion y configuracion
Policyd: Instalacion y configuracionPolicyd: Instalacion y configuracion
Policyd: Instalacion y configuracion
 
Guia de configuracion cisco 881 w logicalis
Guia de configuracion cisco 881 w   logicalisGuia de configuracion cisco 881 w   logicalis
Guia de configuracion cisco 881 w logicalis
 
Semana 7 Despliegue a producción ORACLE OCI
Semana 7   Despliegue a producción ORACLE OCISemana 7   Despliegue a producción ORACLE OCI
Semana 7 Despliegue a producción ORACLE OCI
 
Analizando la performance del subsistema de IO
Analizando la performance del subsistema de IOAnalizando la performance del subsistema de IO
Analizando la performance del subsistema de IO
 
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboards
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboardsTaller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboards
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboards
 
SecondNug Febrero 2012 - Automatización de despliegues
SecondNug Febrero 2012 - Automatización de desplieguesSecondNug Febrero 2012 - Automatización de despliegues
SecondNug Febrero 2012 - Automatización de despliegues
 
Ipco ppre
Ipco ppreIpco ppre
Ipco ppre
 
Como implementar un Controlador de Dominio en Linux usando Samba
Como implementar un Controlador de Dominio en Linux usando SambaComo implementar un Controlador de Dominio en Linux usando Samba
Como implementar un Controlador de Dominio en Linux usando Samba
 
Detectando DDoS e intrusiones con RouterOS
Detectando DDoS e intrusiones con RouterOSDetectando DDoS e intrusiones con RouterOS
Detectando DDoS e intrusiones con RouterOS
 
Tips en la instalación de Dynamics 365 Finance and Operations On Premise - LBD
Tips en la instalación de Dynamics 365 Finance and Operations On Premise - LBDTips en la instalación de Dynamics 365 Finance and Operations On Premise - LBD
Tips en la instalación de Dynamics 365 Finance and Operations On Premise - LBD
 
Seguridad de las Redes
Seguridad de las RedesSeguridad de las Redes
Seguridad de las Redes
 
El servidor perfecto
El servidor perfectoEl servidor perfecto
El servidor perfecto
 
Mongodb administración
Mongodb administraciónMongodb administración
Mongodb administración
 
Servidor de mapas en HA con Jboss, Geoserver y PostGIS.
Servidor de mapas en HA con Jboss, Geoserver y PostGIS.Servidor de mapas en HA con Jboss, Geoserver y PostGIS.
Servidor de mapas en HA con Jboss, Geoserver y PostGIS.
 
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebdotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
 
Buildout: Crear y desplegar entornos reproducibles en Python
Buildout: Crear y desplegar entornos reproducibles en PythonBuildout: Crear y desplegar entornos reproducibles en Python
Buildout: Crear y desplegar entornos reproducibles en Python
 
Protocolo syslog
Protocolo   syslogProtocolo   syslog
Protocolo syslog
 
Serverless: La evolucion de la arquitectura a la nube
Serverless: La evolucion de la arquitectura a la nubeServerless: La evolucion de la arquitectura a la nube
Serverless: La evolucion de la arquitectura a la nube
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (15)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 

V2 d2013 jose f irles - freeswitch

  • 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
  • 7. con FreeSWITCH se liga más, y lo sabes...
  • 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
  • 11. Construyendo una centralita virtual con FreeSWITCH José Francisco Irles @josefu Request/Response de FreeSWITCH al servidor web Request [hostname] => testmachine [section] => directory [tag_name] => domain [key_name] => name [key_value] => domain1.awesomevoipdomain.faketld [Event-Name] => REQUEST_PARAMS [Core-UUID] => c5c8cbf4-60c3-45a2-b110-933da620cfd2 [FreeSWITCH-Hostname] => 25515_1_36308_177178 [FreeSWITCH-IPv4] => 192.168.1.10 [FreeSWITCH-IPv6] => ::1 [Event-Date-Local] => 2009-10-27 00:47:10 [Event-Date-GMT] => Tue, 27 Oct 2009 07:47:10 GMT [Event-Date-Timestamp] => 1256629630733916 [Event-Calling-File] => sofia_reg.c [Event-Calling-Function] => sofia_reg_parse_auth [Event-Calling-Line-Number] => 1671 [action] => sip_auth [sip_profile] => internal [sip_user_agent] => PolycomSoundPointIP-SPIP_320-UA/3.1.0.0084 [sip_auth_username] => 1004 [sip_auth_realm] => domain1.awesomevoipdomain.faketld [sip_auth_nonce] => 533c5264-12cb-4f8b-bcdb-5ecabe5e540f [sip_auth_uri] => sip:domain1.awesomevoipdomain.faketld:5060 [sip_contact_user] => 1004 [sip_contact_host] => 192.168.1.100 [sip_to_user] => 1004 [sip_to_host] => domain1.awesomevoipdomain.faketld [sip_from_user] => 1004 [sip_from_host] => domain1.awesomevoipdomain.faketld [sip_request_host] => domain1.awesomevoipdomain.faketld [sip_request_port] => 5060 [sip_auth_qop] => auth [sip_auth_cnonce] => hSVnPb32nA/OtkY [sip_auth_nc] => 00000001 [sip_auth_response] => 6e4e611d7593d52e02451b70900071d8 [sip_auth_method] => REGISTER [key] => id [user] => 1004 [domain] => domain1.awesomevoipdomain.faketld [ip] => 192.168.1.100 Response <document type="freeswitch/xml"> <section name="directory"> <domain name="domain1.awesomevoipdomain.faketld"> <params> <param name="dial-string" value="{presence_id=${dialed_user}@$ {dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/> </params> <groups> <group name="default"> <users> <user id="1004"> <params> <param name="password" value="some_password"/> </params> </user> </users> </group> </groups> </domain> </section> </document> 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
  • 15. Construyendo una centralita virtual con FreeSWITCH José Francisco Irles @josefu Ejemplo de CDR en XML <?xml version="1.0"?> <cdr core-uuid="5d80b2bf-7ae1-4fed-803e-7edf94468be0"> <channel_data> <state>CS_REPORTING</state> <direction>inbound</direction> <state_number>11</state_number> <flags>0=1;3=1;19=1;36=1;37=1;39=1;52=1;73=1</flags> <caps>1=1;2=1;3=1;4=1;5=1;6=1</caps> </channel_data> <variables> <direction>inbound</direction> <uuid>897211c5-2f67-4c77-9928-c8c0b9e49972</uuid> <session_id>56</session_id> <sip_from_user>100</sip_from_user> <sip_from_uri>100%40testsip.com</sip_from_uri> <sip_from_host>testsip.com</sip_from_host> <channel_name>sofia/internal/100%40testsip.com</channel_name> <sip_received_port>5060</sip_received_port> <sip_via_protocol>udp</sip_via_protocol> <sip_authorized>true</sip_authorized> <accountcode>100%40testsip.com</accountcode> <user_context>default</user_context> …. <app_log> <application app_name="export" app_data="domain_name=testsip.com" app_stamp="1378365023484959"></application> <application app_name="export" app_data="domain=testsip.com" app_stamp="1378365023485712"></application> <application app_name="export" app_data="pbx_id=4028818b40e7e3830140e7e38512002f" app_stamp="1378365023486343"></application> …. </app_log> <callflow dialplan="XML" unique-id="0ff824e3-80c0-495e-9292-4f09c787e942" profile_index="1"> <extension name="default_extension" number="*60600" current_app="transfer"> <application app_name="export" app_data="domain_name=testsip.com"></application> <application app_name="export" app_data="domain=testsip.com"></application> ….. </callflow> …. 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