voip2day 2013: construyendo una centralita virtual con freeswitch

Post on 21-Jun-2015

547 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Construyendo una centralita virtualcon FreeSWITCH

7 de noviembre de 2013

José Francisco Irlesjfirles@siptize.com

@josefu

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

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

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)

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

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

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

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Arquitectura Hosted PBX

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

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Ejemplo mod_xml_curl: REGISTER

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

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)

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

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

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>

….

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Alta Disponibilidad: cómo dormir más tranquilo

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

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

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

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

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

José Francisco Irles

www.siptize.com

Construyendo una centralita virtual con FreeSWITCH @josefu

Visión global de plataforma de centralita virtual

www.siptize.com

¿Preguntas?

top related