[SR-Users-ES] Consulta Envió de comando en forma remota

2 views
Skip to first unread message

damian

unread,
Jun 3, 2022, 3:38:56 PM6/3/22
to sr-us...@lists.kamailio.org
Hola, buenas tardes.
Tengo una duda, espero que puedan orientarme o ayudarme.
Tengo montado un Sistema de Redirect Server con Kamailio, funcionando OK.
Este server lee una tabla que sale de un MYSQL y con el modulo mtree la cargo en memoria.
Cuando hago modificaicones en la DB refresco los datos en memoria con el comando: kamcmd mtree.reload mytabla.

Ahora bien, hay alguna forma de que haga este reload en forma remota. es decir, no tener que conectarme al server por ssh y tirar el comando localmente.
Hay alguna posibilidad de que kamailio este escuchando y hacerle el request de reload?
Si lo hay, cuentan con algun ejemplo que puede utilizar de referencia?

Saludos.

David Villasmil

unread,
Jun 3, 2022, 6:15:31 PM6/3/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
Eso lo puedes hacer con un archivo de texto simple. Kamailio puede monitorizar el archivo y recargarlo automáticamente.
Si no, puedes hacer un un timer que dispare un trigger y recargarlo.

_______________________________________________
sr-users-es mailing list
sr-us...@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users-es
--
Regards,

David Villasmil

Joel Serrano

unread,
Jun 4, 2022, 9:13:39 AM6/4/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
También puedes usar el propio jsonrpcs_exec() y hacer el reload desde la config cuando te de la gana. 

Jose Fco. Irles Durá

unread,
Jun 4, 2022, 11:55:28 AM6/4/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
Otra opción es que hagas un GET a un path específico en el event_route[xhttp:request] y ahí ejecutes lo que quieras, como por ejemplo un script local para hacer lo que quieras.
Jose Fco. Irles Durá

damian

unread,
Jun 6, 2022, 8:41:57 AM6/6/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
Eh intentado lo del event_route[xhttp:request] pero no logro que Kamailio escuche el puerto que configuro (80, 8080 o cualquier puerto que defina)  para enviar el request via http.


Tengo configurado:
listen=tcp:eth0:8080
listen=udp:eth0:5060

Resultado.

Listening on
             udp: 172.x.x.x:5060
             udp: 127.0.0.1:5060
Aliases:
             udp: localhost:5060
             udp: LAB-SERVER:5060

Solo me escucha el 5060.

damian

unread,
Jun 6, 2022, 8:50:11 AM6/6/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
Disculpen, encontré el error porque el que no levantaba el puerto 8080,
Tenia en el archivo de configuración disable_tcp=yes.
Ire por el camino del Request y veré si me funciona.

Saludos.

damian

unread,
Jun 6, 2022, 11:13:46 AM6/6/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
Gente, 
ya se encuentra funcionando, muchas gracias por toda la colaboración.

La conf. quedó de la siguiente manera, por si alguno le interesa.

disable_tcp=no
tcp_accept_no_cl=yes


listen=tcp:eth0:8080
listen=udp:eth0:5060
listen=udp:127.0.0.1:5060

#####Modulos para Request Reload mtree#####
loadmodule "xhttp.so"
loadmodule "jsonrpcs.so"
#sudo apt-get install kamailio-json-modules#
loadmodule "json.so"
#######

event_route[xhttp:request] {
  if!(dst_port==8080) {
    xlog("L_NOTICE", "[XHTTP:REQUEST] $si FORBIDDEN! ***\n");
    exit;
  }
  if(src_ip!=192.168.224.184) {
        xhttp_reply("403", "Forbidden", "text/html",
            "<html><body>Not allowed from $si</body></html>");
        xlog("L_NOTICE", "[XHTTP:REQUEST] NOT ALLOWED FROM $si! ***\n");
        exit;
}
    if ($hu =~ "^/mtree") {
    $var(dbmtree) =$(rb{json.parse,db});
        xlog("L_NOTICE", "[XHTTP:REQUEST] $si:$sp  - db: $var(dbmtree) ACCEPTED ***\n");
        $var(json_rpc)='{"jsonrpc": "2.0", "method": "mtree.reload", "id": "$var(dbmtree)"}';
        jsonrpc_exec($var(json_rpc));
        xlog("L_NOTICE","jsonrpc response code: $jsonrpl(code) - the body is: $jsonrpl(body)\n");
        xhttp_reply("200", "Forbidden", "text/html",
            "<html><body>OK - [$si:$sp  - db: $var(dbmtree)]</body></html>");
       
} else {
        xhttp_reply("200", "OK", "text/html",
            "<html><body>Wrong URL $hu</body></html>");
        xlog("L_NOTICE", "[XHTTP:REQUEST] WRONG URL $hu! ***\n");
    }
    return;
}


Saludos.

David Villasmil

unread,
Jun 6, 2022, 2:08:29 PM6/6/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
quizás un "exit;" es mejor aquí:

  if(src_ip!=192.168.224.184) {

Y también es recomendable que pongas una regla en iptables al menos.

Regards,

David Villasmil

Joel Serrano

unread,
Jun 6, 2022, 3:20:35 PM6/6/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
+1 a lo que comenta David:

Es mucho más fácil (hablando de rapidez y recursos) para el sistema descartar un paquete a nivel de kernel que para la aplicación a nivel de usuario.

Saludos!!


damian

unread,
Jun 7, 2022, 2:29:41 PM6/7/22
to Kamailio (SER) - Lista De Usuarios (Discusiones En Español - Spanish Discussions)
Hola, buenas tardes.
Agradezco mucho su guía. 
No termino de entender que recomiendan que haga en ese if...que no devuelva una respuesta y que lo saque automáticamente del sistema?
 if(src_ip!=192.168.224.184) {
        exit;
}
Me doy cuenta que también podría haber aplicado las condiciones en un solo if.
 if(src_ip!=192.168.224.184 && st_port!=8080) {
        exit;
}

La regla de iptables la voy a tener en en cuenta para un ambiente productivo.
Reply all
Reply to author
Forward
0 new messages