Ir al contenido principal

Balanceador activo de llamadas con Kamailio y Asterisk

En el siguiente laboratorio haremos un balanceador activo de llamadas, donde tenemos un servicio de telefonía PBX con Asterisk que desemamos se mantenga activo en caso de una falla. La infraestructura es la siguiente: 



El balanceador es Kamailio, donde los teléfonos sip se registran con la IP 192.168.0.1 mientras que los PBX  asterisk pbx 1 y 2 tienen la ip 192.168.0.10 y 192.168.0.20 respectivamente. El pbx1 es el server activo al que llegan las llamadas y si existe una falla de servicio las llamadas pasarán al pbx2  

En server balanceador, la configuración de kamailio.cfg es la siguiente: 

listen=192.168.0.1:5060
auto_aliases=no
log_stderror=yes

loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "pv.so"
loadmodule "sl.so"
loadmodule "maxfwd.so"
loadmodule "nathelper.so"
loadmodule "textops.so"
loadmodule "siputils.so"
loadmodule "xlog.so"
loadmodule "sanity.so"
loadmodule "path.so"
loadmodule "dispatcher.so"
loadmodule "ctl.so"

modparam("nathelper|registrar", "received_avp", "$avp(s:rcv)")
modparam("dispatcher", "list_file", "/etc/kamailio/dispatcher.list")

modparam("dispatcher", "flags",2)
modparam("dispatcher", "use_default", 1) // default server siempre será el último de la lista con prioridad  en dispatcher.list 

modparam("dispatcher", "ds_ping_interval", 1)
modparam("tm", "fr_timer", 1500) // default 30s
modparam("dispatcher", "ds_probing_threshold", 1)
modparam("dispatcher", "ds_inactive_threshold", 1)

route {

        # CANCEL processing
        if (is_method("CANCEL")) {
                if (t_check_trans()) {
                        t_relay();
                }
                exit;
        }


        if (is_method("INVITE")) {
                #ds_select_dst("1","4");
                sl_send_reply("100","Trying");
                #forward();#uri:host, uri:port);
                #exit();
                #record_route();
        }
        route(DISPATCH);

        route(RELAY);


}

route[RELAY]
{
        if (!t_relay()) {
                sl_reply_error();
        }
        xlog("saliendo de route relay");
        exit;
}

# Dispatch requests
route[DISPATCH] {
        # round robin dispatching on gateways group '1'
        #if(!ds_select_dst("1", "4","2")){
        # con menor peso  
        if(!ds_select_dst("1", "11")){
                send_reply("404", "No destination");
                exit;
        }
        xlog("L_DBG", "--- SCRIPT: going to <$ru> via <$du>\n");
        t_on_failure("RTF_DISPATCH");
        t_relay();
        exit;
}

# Failure re-route
failure_route[RTF_DISPATCH] {
        if (t_is_canceled()) {
                exit;
        }
        # next DST - only for 500 or local timeout
        xlog("failure entra\n");
        if (t_check_status("500") or (t_branch_timeout() and !t_branch_replied())){
                if(ds_next_dst()){
                        xlog("failure fallo a sguiente to <$ru> via <$du>\n");
                        t_on_failure("RTF_DISPATCH");
                        t_relay();
                        exit;
                }
        }
}

En dispatcher.list  agregamos lo siguiente:

1 sip:192.168.0.20:5060 0 12 rweight=50;weight=50;cc=1;
1 sip:192.168.0.10:5060 0 12 rweight=50;weight=50;cc=1;

El último de la priodiad 1, es el que se establece como primario. Por último, reiniciar el servicio balanceador.

# systemctl restart kamailio

Cuando el servidor 192.168.0.10 no esté en red, o el servicio Asterisk no este funcionando, entonces Kamailio redireccionará las peticiones al 192.168.0.20.

Cześć.

Comentarios

Entradas populares de este blog

Asterisk con WebRTC, TLS, libsrtp

  Cześć !! En esta ocasión vamos a explicar cómo configurar Asterisk para que desde un teléfono web podamos sacar y recibir llamadas. Se usará los siguientes componentes de Asterisk: libsrtp tls Asterisk module http Antes que nada debemos tener un teléfono web(obviamente), en el laboratorio vamos a usar Sipml5 en el siguiente link : https://www.doubango.org/sipml5/call.htm El siguiente paso es instalar libsrtp del enlace: https://github.com/cisco/libsrtp . #git clone https://github.com/cisco/libsrtp.git #cd libsrtp #./configure #make && make install Luego verificamos tener los siguientes módulos activos para compilar en menuconfig de Asterisk: res_crypto res_http_websocket res_srtp Comunmente si res_crypto no está selecionable, le falta la dependencia openssl-devel o su equivalente dependiendo del sistema que tengan. Cuando estemos seguros que están cargados en Asterisk continuamos con la instalación de los certificados locales(Si usa Lets'encrypt omitir la generación de c

GNUDIALER en Asterisk

Hola Como están? GNUDIALER es un software de marcacion predictiva que nos ofrece varios modos, prediccion, modo automatico, modo preview, ademas de incluir un CRM y es muy dinamico. A pesar de que en el mercado existen muchos software de este tipo sean GNU o pagos, GNUDIALER es muy efectivo y lo mejor es GNU. Eso quiere decir que puedes modificarlo con un poco de conocimiento en lenguaje C y asterisk, bueno uno poco no, mucho conocimiento. He usado VICIDIAL en otras ocasiones y es también verdaderamente interesante, sin embargo como todo en este planeta hay ventajas y desventajas. Una de las ventajas que tiene sobre VICIDIAL(hasta el momento he podido observar en VICIDIAL) es que es mucho mas sencillo de administrar via web, puedo tener un numero ilimitado de campos en mi campaña,  puedo editar mis scripts ami antojo via web html(teniendo un conocimiento html). Desventajas es q aveces se puede comportar algo inestable si no tengo en cuenta el ratio vs cantidad de lineas vs agentes di

Instalar Queuemetrics desde 0.

Cześć. Queuemetrics a pesar de estar casi personalizada su  instalación a Centos, también puede instalarse en otros sistemas operativos, de hecho en cualquier Linux podría hacerse. A continuación describo los pasos para hacerlo. En este demo se usó Suse. Descargar los siguientes paquetes: - Queuemetrics(obviamente XD)      link http://queuemetrics.loway.it/download.jsp      formato tar.gz - Mysql connector      link https://dev.mysql.com/downloads/connector/j/      formato  "platform independent" tar.gz      debe registrarse previamente. - Tomcat      link http://tomcat.apache.org/      formato tar.gz      en este manual se instaló la version 8.5.37 - JDK      link https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html      formato tar.gz      version linux x64 Instalar: - JDK Descomprimir #tar -zxvf jdk-8u201-linux-x64.tar.gz Mover jdk a /usr/local/ #mv jdk1.8.0_201 /usr/local/ - Tomcat Descomprimir #tar -zxvf a