voip2day 2013: construyendo una centralita virtual con freeswitch

23

Click here to load reader

Upload: jfirles

Post on 21-Jun-2015

547 views

Category:

Technology


2 download

DESCRIPTION

Presentación de la conferencia del VOIP2DAY de 2013 Construyendo una centralita virtual con FreeSWITCH, por José Francisco Irles Durá de Siptize

TRANSCRIPT

Page 1: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

Construyendo una centralita virtualcon FreeSWITCH

7 de noviembre de 2013

José Francisco [email protected]

@josefu

Page 2: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Sobre Siptize

● Operador VoIP● Satmak: Soft-Switch 4/5● Plataforma Hosted PBX● Consultoría VoIP

Page 3: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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

Page 4: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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)

Page 5: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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

Page 6: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

¿Por qué elegir FreeSWITCH? (y II)

● Modelo de datos no prefijado● Tecnologías estándar para “realtime”:

– HTTP– XML– JSON

● Lenguaje de programación:– El que tú decidas

● Facilidad para clusterizar el backend: HTTP

Page 7: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

con FreeSWITCH se liga más,y lo sabes...

Page 8: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Arquitectura Hosted PBX

Page 9: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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

Page 10: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Ejemplo mod_xml_curl: REGISTER

Page 11: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Request/Response de FreeSWITCH al servidor web

<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>

[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

Request Response

Page 12: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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)

Page 13: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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

Page 14: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

CDR

● mod_cdr_xm l (recomendado)● mod_cdr_csv● mod_cdr_mongodb● mod_cdr_pg_csv● mod_cdr_sqlite● mod_json_cdr● mod_radius_cdr

Page 15: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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>

….

Page 16: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Alta Disponibilidad: cómo dormir más tranquilo

Page 17: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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

Page 18: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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”/>

Page 19: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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:– FreeSWITCH apagado– FreeSWITCH en marcha

● net.ipv4.ip_nonlocal_b ind=1

Page 20: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @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

Page 21: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

sofia recover: nodo pasivo pasa a activo

● Se recuperan las llamadas activas● Pequeño lapsus (~2 segundos) sin audio

entre las extensiones

Page 22: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Visión global de plataforma de centralita virtual

Page 23: VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

www.siptize.com

¿Preguntas?