Hola a todos ...
Para ponernos en situación, tengo 2 Openser 1.3.0 a los que los usuarios atacan por DSN round-robin ó registros SRV, hasta aquí todo ok.
Ahora ... tengo esto puesto en guión del openser para la autenticación:
######################################################################## # Request route 'base-route-register' # ######################################################################## route[11] { sl_send_reply("100", "Trying"); if(!www_authorize("", "subscriber")) {
xlog("L_INFO", "Register authentication failed - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); www_challenge("", "0"); exit; } if(!check_to()) {
xlog("L_INFO", "Spoofed To-URI detected - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); sl_send_reply("403", "Spoofed To-URI Detected"); exit; } consume_credentials(); if(!search("^Contact:[ ]**") && nat_uac_test("19")) { fix_nated_register(); setbflag(6); } if(!save("location")) {
xlog("L_ERR", "Saving contact failed - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); sl_reply_error(); exit; }
if(!src_ip==sbc02) { t_replicate("sip:sbc02","5060"); };
xlog("L_INFO", "Registration successful - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); exit; }
**********
¿Es correcto el formato de la llamada a t_replicate()?, lo pregunto porque según la documentación ese "sip:" sobra .. pero sino lo pongo el openser se queja en el log de que no puede parsear la uri.
Luego a parte está el tema de que si hago un openserctl ul show .. no veo que se hayan replicado los registers en ambos servidores.
Agradecería cualquier indicación al respecto del uso de t_replicate() puesto que la información disponible en la web de openser es harto inútil sobre esta función.
Saludos -- Raúl Alexis Betancor Santana Dimensión Virtual S.L.
Hola Raúl,
Para ponernos en situación, tengo 2 Openser 1.3.0 a los que los usuarios atacan por DSN round-robin ó registros SRV, hasta aquí todo ok.
Ahora ... tengo esto puesto en guión del openser para la autenticación:
######################################################################## # Request route 'base-route-register' # ######################################################################## route[11] { sl_send_reply("100", "Trying"); if(!www_authorize("", "subscriber")) {
xlog("L_INFO", "Register authentication failed - M=$rm
RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); www_challenge("", "0"); exit; } if(!check_to()) {
xlog("L_INFO", "Spoofed To-URI detected - M=$rm
RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); sl_send_reply("403", "Spoofed To-URI Detected"); exit; } consume_credentials(); if(!search("^Contact:[ ]**") && nat_uac_test("19")) { fix_nated_register(); setbflag(6); } if(!save("location")) {
xlog("L_ERR", "Saving contact failed - M=$rm RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n"); sl_reply_error(); exit; }
if(!src_ip==sbc02) { t_replicate("sip:sbc02","5060"); }; xlog("L_INFO", "Registration successful - M=$rm RURI=$ru F=$fu
T=$tu IP=$si ID=$ci\n"); exit; }
¿Es correcto el formato de la llamada a t_replicate()?, lo pregunto porque según la documentación ese "sip:" sobra .. pero sino lo pongo el openser se queja en el log de que no puede parsear la uri.
Los parámetros que le pasas a t_replicate() son incorrectos. El puerto va junto a la ip. El "5060" lo interpreta como flags. El formato correcto es:
t_replicate("sip:sbc02:5060")
http://www.openser.org/docs/modules/1.3.x/tm.html#TREPLICATE
Luego a parte está el tema de que si hago un openserctl ul show .. no veo que se hayan replicado los registers en ambos servidores.
Si haces un ngrep, ¿ves si los REGISTER van de un proxy a otro?.
Agradecería cualquier indicación al respecto del uso de t_replicate() puesto que la información disponible en la web de openser es harto inútil sobre esta función.
Funcionar, funciona, te lo aseguro :)
P.D. En el servidor replicado, si usa la misma base de datos que el replicante, cuidado con como usas el save() ...
Saludos JesusR.
------------------------------------ Jesus Rodriguez VozTelecom Sistemas, S.L. jesusr@voztele.com http://www.voztele.com Tel. 902360305 -------------------------------------
On Tue, Jan 15, 2008 at 09:48:09PM +0100, Jesus Rodriguez wrote:
Hola Raúl,
Los parámetros que le pasas a t_replicate() son incorrectos. El puerto va junto a la ip. El "5060" lo interpreta como flags. El formato correcto es:
t_replicate("sip:sbc02:5060")
http://www.openser.org/docs/modules/1.3.x/tm.html#TREPLICATE
Joder .. si es un perro me muerde, eso me pasa por fiarme de los ejemplos que va la gente dejando por ahí pululando .. X)
Luego a parte está el tema de que si hago un openserctl ul show .. no veo que se hayan replicado los registers en ambos servidores.
Si haces un ngrep, ¿ves si los REGISTER van de un proxy a otro?.
Si, ahora si los veo .. el problema está que el sbc01 devuelve un 401 a las peticiones que envía el sbc02 por user t_replicate ..., tendré que modifcar el script para que lo pille por trusted o directamente por la IP. No tiene sentido que un proxy le pida autorización de un REGISTER al otro.
P.D. En el servidor replicado, si usa la misma base de datos que el replicante, cuidado con como usas el save() ...
Lo uso tal cual lo has visto en la parte que pegé del guión. ¿Hay algún problema concreto?, es un if(!save("location")) de toda la vida.
Saludos -- Raúl Alexis Betancor Santana Dimensión Virtual S.L.
El Martes, 15 de Enero de 2008, Raúl Alexis Betancor Santana escribió:
P.D. En el servidor replicado, si usa la misma base de datos que el replicante, cuidado con como usas el save() ...
Lo uso tal cual lo has visto en la parte que pegé del guión. ¿Hay algún problema concreto?, es un if(!save("location")) de toda la vida.
Entonces el registro aparecerá duplicado en la BD, lo cual te dará problemas cuando OpenSer lea de la BD a memoria (obtendrá 2 localizaciones por cada registro).
Yo intuyo que Jesús hace mención a la función "save(domain,flags)": http://www.openser.org/docs/modules/1.3.x/registrar.html#AEN316
flags - the value may be a bitwise OR of the following flags: 0x01 - save the contacts only in memory cache without no DB operation; 0x02 - do not generate a SIP reply to the current REGISTER request.
El primer flag evitará el problema de la duplicidad de cada registro en BD. El segundo flag evitará una respuesta SIP duplicada (pues ya la habrá enviado el primer registrar).
On Tue, Jan 15, 2008 at 10:19:02PM +0100, Iñaki Baz Castillo wrote:
El Martes, 15 de Enero de 2008, Raúl Alexis Betancor Santana escribió: Entonces el registro aparecerá duplicado en la BD, lo cual te dará problemas cuando OpenSer lea de la BD a memoria (obtendrá 2 localizaciones por cada registro).
Yo intuyo que Jesús hace mención a la función "save(domain,flags)": http://www.openser.org/docs/modules/1.3.x/registrar.html#AEN316
flags - the value may be a bitwise OR of the following flags: 0x01 - save the contacts only in memory cache without no DB operation; 0x02 - do not generate a SIP reply to the current REGISTER request.
El primer flag evitará el problema de la duplicidad de cada registro en BD. El segundo flag evitará una respuesta SIP duplicada (pues ya la habrá enviado el primer registrar).
Lo cual transforma esa parte del script en algo así:
[skip] if(!src_ip=sbc02) { if(!save("location")) { xlog("L_ERR", "Saving contact failed - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); sl_reply_error(); exit; } t_replicate("sip:sbc02:5060"); } else { # comes from one of our SBC if(!save("location","0x01&0x02")) { xlog("L_ERR", "Saving contact failed - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); sl_reply_error(); exit(); } } xlog("L_INFO", "Registration successful - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); exit; [skip]
¿Se pueden especificar los flags de esa manera ... "0x01&0x02" ó ¿hay que "sumarlos" y sería "0x03" ? Porque lo que interesa aquí es ni lo grabe en BD, ni mande el reply.
Saludos -- Raúl Alexis Betancor Santana Dimensión Virtual S.L.
On Tue, Jan 15, 2008 at 09:45:41PM +0000, Raúl Alexis Betancor Santana wrote:
¿Se pueden especificar los flags de esa manera ... "0x01&0x02" ó ¿hay que "sumarlos" y sería "0x03" ? Porque lo que interesa aquí es ni lo grabe en BD, ni mande el reply.
Olvida esta última estupidez .. está claro que el manual dice bitwise ... ergo es 0x03
Saludos -- Raúl Alexis Betancor Santana Dimensión Virtual S.L.
Hola Iñaki,
El Martes, 15 de Enero de 2008, Raúl Alexis Betancor Santana escribió:
P.D. En el servidor replicado, si usa la misma base de datos que el replicante, cuidado con como usas el save() ...
Lo uso tal cual lo has visto en la parte que pegé del guión. ¿Hay algún problema concreto?, es un if(!save("location")) de toda la vida.
Entonces el registro aparecerá duplicado en la BD, lo cual te dará problemas cuando OpenSer lea de la BD a memoria (obtendrá 2 localizaciones por cada registro).
Yo intuyo que Jesús hace mención a la función "save(domain,flags)": http://www.openser.org/docs/modules/1.3.x/registrar.html#AEN316
flags - the value may be a bitwise OR of the following flags: 0x01 - save the contacts only in memory cache without no DB operation; 0x02 - do not generate a SIP reply to the current REGISTER request.
El primer flag evitará el problema de la duplicidad de cada registro en BD. El segundo flag evitará una respuesta SIP duplicada (pues ya la habrá enviado el primer registrar).
Premio para el caballero! ;)
Saludos JesusR.
------------------------------------ Jesus Rodriguez VozTelecom Sistemas, S.L. jesusr@voztele.com http://www.voztele.com Tel. 902360305 -------------------------------------
Hola Raúl,
On Tue, Jan 15, 2008 at 09:48:09PM +0100, Jesus Rodriguez wrote:
Hola Raúl,
Los parámetros que le pasas a t_replicate() son incorrectos. El puerto va junto a la ip. El "5060" lo interpreta como flags. El formato correcto es:
t_replicate("sip:sbc02:5060")
http://www.openser.org/docs/modules/1.3.x/tm.html#TREPLICATE
Joder .. si es un perro me muerde, eso me pasa por fiarme de los ejemplos que va la gente dejando por ahí pululando .. X)
:-)
Luego a parte está el tema de que si hago un openserctl ul show .. no veo que se hayan replicado los registers en ambos servidores.
Si haces un ngrep, ¿ves si los REGISTER van de un proxy a otro?.
Si, ahora si los veo .. el problema está que el sbc01 devuelve un 401 a las peticiones que envía el sbc02 por user t_replicate ..., tendré que modifcar el script para que lo pille por trusted o directamente por la IP. No tiene sentido que un proxy le pida autorización de un REGISTER al otro.
Sí, acepta sin autentificar los REGISTER replicados.
P.D. En el servidor replicado, si usa la misma base de datos que el replicante, cuidado con como usas el save() ...
Lo uso tal cual lo has visto en la parte que pegé del guión. ¿Hay algún problema concreto?, es un if(!save("location")) de toda la vida.
Tendrás registros duplicados y cosas raras con la base de datos.
Saludos JesusR.
------------------------------------ Jesus Rodriguez VozTelecom Sistemas, S.L. jesusr@voztele.com http://www.voztele.com Tel. 902360305 -------------------------------------
sr-users-es@lists.kamailio.org