VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

1,103 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,103
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

VOIP2DAY 2013: Construyendo una centralita virtual con FreeSWITCH

  1. 1. Construyendo una centralita virtual con FreeSWITCH José Francisco Irles jfirles@siptize.com @josefu 7 de noviembre de 2013
  2. 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. 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. 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. 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. 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. 7. con FreeSWITCH se liga más, y lo sabes...
  8. 8. Construyendo una centralita virtual con FreeSWITCH José Francisco Irles @josefu Arquitectura Hosted PBX www.siptize.com
  9. 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. 10. Construyendo una centralita virtual con FreeSWITCH José Francisco Irles @josefu Ejemplo mod_xml_curl: REGISTER www.siptize.com
  11. 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. 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. 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. 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. 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. 16. Construyendo una centralita virtual con FreeSWITCH José Francisco Irles @josefu Alta Disponibilidad: cómo dormir más tranquilo www.siptize.com
  17. 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. 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. 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. 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. 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. 22. Construyendo una centralita virtual con FreeSWITCH José Francisco Irles @josefu Visión global de plataforma de centralita virtual www.siptize.com
  23. 23. ¿Preguntas? www.siptize.com

×