Kamailio – Autenticación de troncales por IP (Llamadas entrantes vía atenticacion LCR)

Para autenticar en el route[FROMPSTN] en lugar a través del archivo de configuración, tal y como hemos realizado en el anterior post, lo que vamos a realizarlo es através de mysql, aprovechando el módulo de LCR el cual utiliza soporte de mysql. Esto nos permitirá poder añadir más troncales para llamadas entrantes sin necesidad de editar el archivo de kamailio.cfg y no tener que reiniciar el servicio.

El módulo LCR, en principio, está diseñado para poder tratar a través de mysql las rutas salientes, y añadir diferentes provider para llamadas salientes si necesidad de tener que tocar configuración en kamalio.cfg.

En nuestro caso, lo que vamos a hacer es definir los troncales de entrada, con alguna regla para normalizar los DDIs entrantes (hacer strip de “+34”, “0034”, o “34”) e identificar que son llamadas entrantes. En futuros posts utilizaremos este módulo para lo que está diseñado, para emitir llamadas.

Paso 1: Cargar módulo LCR y configuración básica

Definimos que utilizaremos con LCR en los modulos:

#!define WITH_LCR

E indicamos lo siguiente para que lo cargue cuando se inicie el servicio.

#!ifdef WITH_LCR
loadmodule "lcr.so"
#!endif

Seguidamente, procederemos a definir los parámetros para este módulo:

#!ifdef WITH_LCR
# ----- lcr params -----
modparam("lcr", "db_url", "mysql://kamailio:p4sSw0rds!!@localhost/kamailio")
modparam("lcr", "gw_uri_avp", "$avp(i:709)")
modparam("lcr", "ruri_user_avp", "$avp(i:500)")
modparam("lcr", "tag_avp", "$avp(lcr_tag)")
modparam("lcr", "flags_avp", "$avp(i:712)")
modparam("lcr", "lcr_id_avp", "$avp(s:lcr_id_avp)")
modparam("lcr", "defunct_gw_avp", "$avp(s:defunct_gw_avp)")
#!endif

Paso 2: Añadimos direcciones de providers entrantes en tablas de mysql para este módulo

Procederemos a modificar las siguientes tablas, dado que son las que van a ocuparse de los LCRs y donde definiremos las reglas que se deben de emplear para poder tratar las llamadas entrantes que lleguen de estos troncales:

Tabla lcr_gw: Nos indica los gateways y endpoints donde podemos enviar (en nuestro caso recibir) las llamadas.

Tabla lcr_rule: Nos define las reglas que vamos a aceptar. Es decir, el dialplan para este provider.

Tabla lcr_rule_target: Nos dice qué hacer cuando esta regla coincida, es decir, relaciona los lcr_gw y las lcr_rule.

Vamos por faena, a añadir nuestro provider:

mysql> insert into lcr_gw (lcr_id,gw_name,ip_addr,uri_scheme,transport,strip,flags) VALUES ('1','INBOUND-PROVIDER-001','92.127.224.233','1','1','0','0');

mysql> insert into lcr_rule (lcr_id,prefix,stopper,enabled) VALUES ('1','34','1','1');
mysql> insert into lcr_rule (lcr_id,prefix,stopper,enabled) VALUES ('1','0034','1','1');
mysql> insert into lcr_rule (lcr_id,prefix,stopper,enabled) VALUES ('1','+34','1','1');
mysql> insert into lcr_rule (lcr_id,prefix,from_uri,request_uri,stopper,enabled) VALUES ('1','1','1');


mysql> insert into lcr_rule_target (lcr_id,rule_id,gw_id,priority,weight) VALUES (1,1,1,1,1);

Es interesante mirar los links adjuntos en el apartado de referencias, dado que encontraréis más información al respecto.

Paso 3: Añadimos esta lógica de llamadas en nuestro kamailio.cfg

Nuestro objetivo es cerciorarnos que las llamadas entranes llegan desde un troncal definido como entrante, si es así, ejecutaremos el route[FROMPSTN] el cual está pensado para poder procesar las llamadas

 # Llamadas entrantes
 if (from_gw("1")){
    xlog("*****DEBUGTONI-1: Llamada entrante autenticada por IP desde $src_ip reconocido por nuestro LCR entrante\n");
    route(FROMPSTN);
 }
 # Llamadas salientes
 else{
    xlog("*****DEBUGTONI: Llamada entrante desde usuario\n");
    # user location service
    route(LOCATION);

    # dispatch destinations to PSTN
    route(PSTN);
 }

CUIDADO! Dentro del código fuente de kamailio me encontré esto:

if ((lcr_id < 1) || (lcr_id > lcr_count)) {
 LM_ERR("invalid lcr_id parameter value %d\n", lcr_id);
 return -1;
}

Lo cual significa que los ID de LCRs deben de comenzar por el 1, y ser secuenciales (1,2,3,4…). La verdad es que no me parece normal esto, dado que yo lo que deseaba es crear los 2X para entrantes, y los 3X para salientes, y esto no se puede realizar. Lo apunto como nota para que no perdais vuestro precioso tiempo en esta tonteria.

¡Espero que os sea de ayuda!

Referencias:

http://dopensource.com/least-cost-routing-with-kamailio-v4-1/

http://www.kamailio.org/dokuwiki/doku.php/modules-new-design:lcr-module-design

http://www.kamailio.org/docs/modules/devel/modules/lcr.html#idp2039248

http://kamailio.org/docs/db-tables/kamailio-db-4.2.x.html#gen-db-dr-groups

http://www.open-voip.org/index.php?title=Kamailio_LCR

http://kamailio.org/docs/modules/4.0.x/modules/lcr.html#idp1807136

http://www.kamailio.org/docs/modules/4.2.x/modules/lcr.html

http://git.kamailio.org/gitlist/index.php/sip-router/commit/b1a941a21c7404c6a21df45b988b40695efcb347

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s