Your SlideShare is downloading. ×
V2 d2013   jose f irles - freeswitch
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

V2 d2013 jose f irles - freeswitch

101
views

Published on

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
101
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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
  • 23. ¿Preguntas? www.siptize.com