[OpenSER-Users-ES] ayuda con Register
Ronmel Jiron
ronmeljiron at gmail.com
Wed Jan 30 16:42:42 CET 2008
ya revise mi scritp no encuentro el error. Ahora mi servidor Openser
esta con IP privada igual que mi cliente SIP y manda siempre el mismo
error:
U 192.168.1.121:5060 -> 192.168.1.120:5060
REGISTER sip:192.168.1.120 SIP/2.0.
Via: SIP/2.0/UDP 192.168.1.121;branch=z9hG4bKb2035494949d9a35.
From: "101" <sip:101 at 192.168.1.120;user=phone>;tag=3757aea6ad661399.
To: <sip:101 at 192.168.1.120;user=phone>.
Contact: <sip:101 at 192.168.1.121;user=phone>.
Supported: replaces.
Call-ID: a1379f16c9b2b889 at 192.168.1.121.
CSeq: 101 REGISTER.
Expires: 3600.
User-Agent: Grandstream BT120 1.0.8.23.
Max-Forwards: 70.
Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.
Content-Length: 0.
.
#
U 192.168.1.120:5060 -> 192.168.1.121:5060
SIP/2.0 403 Forbidden.
Via: SIP/2.0/UDP 192.168.1.121;branch=z9hG4bKb2035494949d9a35.
From: "101" <sip:101 at 192.168.1.120;user=phone>;tag=3757aea6ad661399.
To: <sip:101 at 192.168.1.120;user=phone>;tag=296e5534ec221f38aaeb93fb3aa63924.9c51.
Call-ID: a1379f16c9b2b889 at 192.168.1.121.
CSeq: 101 REGISTER.
Server: OpenSER (1.2.2-notls (i386/linux)).
Content-Length: 0.
Aqui esta mi scritp para que le hechen una ojeada y me sugieran algo:
debug=7
fork=no
log_stderror=yes
check_via=no
alias="openser.org"
listen=udp:192.168.1.120
port=5060
children=4
dns=no
rev_dns=no
log_facility = LOG_LOCAL7
log_stderror = no
mpath="/usr/local/lib/openser/modules/"
loadmodule "mysql.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "mi_fifo.so"
loadmodule "textops.so"
loadmodule "xlog.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "uri.so"
loadmodule "uri_db.so"
loadmodule "domain.so"
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
modparam("auth_db|uri_db|usrloc", "db_url",
"mysql://openser:openserrw@localhost/openser")
modparam("auth_db", "calculate_ha1", no)
modparam("auth_db", "password_column", "ha1")
modparam("auth_db", "password_column_2", "ha1b")
modparam("usrloc", "db_mode", 2)
modparam("rr", "enable_full_lr", 1)
## Tiempo para la llamada
modparam("tm", "fr_inv_timer", 45)
modparam("domain", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("domain", "db_mode", 1) ## Habilitamos la cache se la tabla domain
#-----------------------------------------------------
# Main routing logic
#----------------------------------------------------
route{
#----------------------------------------------
# LOG section
#----------------------------------------------
# LOG del mensaje recibido
xlog("L_INFO","\n\n$Cbg[ $mi -- $rm -- $ua ($si:$sp) -- FROM: $fu --
TO: $tU -- ]$Cxx\n");
#----------------------------------------------
# Sanity Check Section
#---------------------------------------------
# Comprobamos que el mensaje no sea demasiado largo ni halla superado
max_forwards
if (!mf_process_maxfwd_header("10"))
{
sl_send_reply("483","Too Many Hops");
xlog("L_ERROR","\n\n$CwrToo Many Hops$Cxx\n");
exit;
};
if(msg:len > max_len) {
sl_send_reply("513","Message Overflow");
xlog("L_ERROR","\n\n$CwrMessage Overflow$Cxx\n");
exit;
}
#----------------------------------------------------
# Record Route Section
#----------------------------------------------------
# Nos ponemos en medio, poniendo una cabecera RecordRoute,
# para que los mensajes pasen por nosotros.
# Pero si es REGISTER no se debe hacer.
if (method=="REGISTER") {
record_route();
};
#-----------------------------------------------
# Loose Route Section
#---------------------------------------------------
# Los mensajes pertenecientes a un mismo dialogo deben tomar el
camino indicado por RecordRoute
if (loose_route()) {
xlog("L_INFO","\n\n *** Estamos en loose_route() ***\n\n");
route(1);
exit;
};
#--------------------------------------------------------------
# Call Type Processing Section
#-------------------------------------------------------------
# Mensajes con destino distinto de nuestro servidor, hacemos relay,
pero Ruta de salientes
if (!is_uri_host_local()) {
if (is_from_local()) {
route(4);
}
else {
sl_send_reply("403", "Forbidden");
};
exit;
}
# Mensajes con destino nuestro servidor (por ejemplo llamadas a
usuarios registrados aqui
# Tenemos que tratar explicitamente el ACK
if (method=="ACK") {
xlog("L_INFO","$Cbx---Procesando un ACK *not within a dialog*$Cxx\n");
route(1);
exit;
}
## CANCEL messages can be safely processed with a simple call to t_relay()
##because SER will automatically match the CANCEL message to the original
##INVITE message (stateful).
## Para los CANCEL, con la ruta por defecto vale.
else if (method=="CANCEL") {
route(1);
exit;
}
## Los REGISTER los tratamos a parte (en la ruta 2)
else if (method=="REGISTER") {
route(2);
exit;
}
## Los INVITEs a la ruta 3 (autenticacion,...)
else if (method=="INVITE") {
route(3);
exit;
}
## Resto de casos (OPTIONS, REFER, BYE...)
else {
# Puede que venga a nosotros pero tengamos definido un alias a fuera.
# lookup("aliases") nos da la nueva URI que puede sea !=myself.
lookup("aliases");
if (!is_uri_host_local()) {
xlog("L_INFO","$CrxNot my URI after the alias lookup$Cxx\n");
## A las salientes
route(4);
exit;
};
## Miramos si existe el destino en nuestra tabla "location".
if (!lookup("location")) {
xlog("L_INFO","$Crx404 User Not Found$Cxx\n");
sl_send_reply("404", "Not Found");
exit;
};
## Si hemos llegado hasta aqu enrutamos el mensaje al destino por la
ruta por defecto.
route(1);
exit;
};
}
#------------------------------------------------------------
#Default message handler
#-----------------------------------------------------------
route[1]
{
## Indicamos que las respuestas que se originen aqui vayan a la ruta
onreply_route[1]
# asi sabemos lo que pasa
t_on_reply("1");
if(!t_relay()) {
sl_reply_error();
};
xlog("L_INFO","$CbxMessage is relayed; now exiting$Cxx\n");
exit;
}
#------------------------------------------------------------------
#REGISTER message handler
#------------------------------------------------------------------
route[2]
{
sl_send_reply("100", "Trying");
if (!www_authorize("","subscriber")) {
xlog("L_INFO","$CbxSe necesita autenticacion para el REGISTER$Cxx\n");
www_challenge("","0");
exit;
}
else if (!check_to()) {
## Validate the supplied To: header against the previously
##validated digest credentials. If they do not match then we must
##reject the REGISTER.
xlog("L_INFO","$Crx*** check_to() = NO!! ***$Cxx\n");
sl_send_reply("401", "Unauthorized");
exit;
};
xlog("L_INFO","$Cbx*** REGISTER correcto ***$Cxx\n");
## Eliminamos las cabeceras relativas a la autenticacion, porque ya no son
##necesarias y no vamos a ir mandandolas por ahi...
consume_credentials();
## Informo si es un UNREGISTER (RFC3261 10.2.2)
if ($hdr(contact)=~";expires=0") || ($hdr(expires)=="0") {
xlog("L_INFO","$Cbx*** UNREGISTER ***$Cxx\n");
}
## Guardamos la localizacio en la tabla "location".
if (!save("location")) {
sl_reply_error();
};
}
#-------------------------------------------------------------
# INVITE Message Handler
#------------------------------------------------------------
route[3] {
## Es necesario autenticarse para poder llamar
if (!proxy_authorize("","subscriber")) {
xlog("L_INFO","$CbxSe necesita autenticacion para el INVITE$Cxx\n");
proxy_challenge("","0");
exit;
}
if(uri=~"^sip:[29][0-9]{6}@.*") {
xlog("L_INFO","$Cbx--- LLAMADA A FIJO O MOVIL ---$Cxx\n");
route(5);
}
## Tienen que coincidir el nombre de usuario con el de la cabecera FROM
else if (!check_from()) {
xlog("L_INFO","$Crx*** check_from() = NO!! ***$Cxx\n");
sl_send_reply("403", "Use From=ID");
exit;
};
xlog("L_INFO","$Cbx*** INVITE correcto ***$Cxx\n");
consume_credentials();
# Puede que venga a nosotros pero tengamos definido un alias a fuera.
#lookup("aliases") nos da la nueva URI que puede sea !=myself.
lookup("aliases");
if (!is_uri_host_local()) {
## A las salientes
route(4);
exit;
};
if (!lookup("location")) {
xlog("L_INFO","$Crx404 User Not Found$Cxx\n");
sl_send_reply("404", "User Not Found");
exit;
};
## El usuario se ha autenticado y a quien llama existe en "location"
asi que lo rutamos.
route(1);
}
#--------------------------------------------------------------------
#Outgoing
#-------------------------------------------------------------------
route[4]
{
xlog("L_INFO","$Cbx*** Llamada saliente ***$Cxx\n");
route(1);
exit;
}
#------------------------------------------------------------------------------------
#onreply_route[1] Para ver las respuestas a los INVITE.
#----------------------------------------------------------------------------
# Si un usuario hace un INVITE las respuestas del llamado (Trying,
Ringing, OK...) pasan por aqui
onreply_route[1]
{
xlog("L_INFO","\n\n$Cbc[Respuesta][ $rs ($rr) desde $si:$sp --
Peticion: ($rm) ]
$Cxx\n");
}
El 25/01/08, Iñaki Baz Castillo <ibc at aliax.net> escribió:
> El Viernes, 25 de Enero de 2008, Ronmel Jiron escribió:
> > hola,, tengo la siguiente estructura: Dos cliente SIP en una red
> > privada los cuales se salen a trave de un Router IP, mi servidor
> > OpenSER tiene IP publica. Cuando quiero registrar uno de mis clientes
> > IP, sucede los siguiente:
> >
> > U 200.30.xxx.xxxx:60049 -> 200.30.xxx.xxxx:5060 ##### Mi Router a mi
> > Openser REGISTER sip:200.30.xxx.xxx SIP/2.0. ### Mi openser
> > Via: SIP/2.0/UDP 192.168.1.31;branch=z9hG4bK5bbd0e954febb14c. ### mi
> > cliente SIP
> > From: "102" <sip:102 at 200.30.xxx.xxx;user=phone>;tag=5e474aa6e3664e89.
> > #### mi openser
> > To: <sip:102 at 200.30.177.115;user=phone>. #### mi openser
> > Contact: <sip:102 at 192.168.1.31;user=phone>. ### cliente SIP
> > Supported: replaces.
> > Call-ID: 2ef635e380d63096 at 192.168.1.31.
> > CSeq: 100 REGISTER.
> > Expires: 3600.
> > User-Agent: Grandstream BT120 1.0.8.23.
> > Max-Forwards: 70.
> > Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.
> > Content-Length: 0.
> >
> >
> > U 200.30.177.115:5060 -> 200.30.177.124:5060 ### mi openser a mi Router
> > SIP/2.0 403 Forbidden.
> > Via: SIP/2.0/UDP
> > 192.168.1.31;branch=z9hG4bK5bbd0e954febb14c;received=200.30.xxx.xxx.
> > ### Router
> > From: "102" <sip:102 at 200.30.xxx.xxx;user=phone>;tag=5e474aa6e3664e89.
> > #### mi openser
> > To:
> > <sip:102 at 200.30.xxx.xxx;user=phone>;tag=c13c52eb7bdc65672ab688ebbd724ddf.4c
> >20. ### mi openser
> > Call-ID: 2ef635e380d63096 at 192.168.1.31. ### cliente SIP
> > CSeq: 100 REGISTER.
> > Server: OpenSER (1.2.2-notls (i386/linux)).
> > Content-Length: 0.
> >
> > Que hay de malo en todo esto...
> > ayuda por favor
>
>
> El proxy está respondiendo con un "403 Forbidden" lo cual es incorrecto, debe
> ser "401 Unauthorized" (sólo usar 401 en los REGISTER, en el resto como
> INVITE, MESSAGE, etc usar "407 Unauthorized").
>
> Así que tu proxy debería responder con "401" y mostrar la
> cabecera "WWW-Authenticate" en dicho "401".
>
> Revisa esa parte del scritp y compárala con cualquier script (el que viene por
> defecto en OpenSer te sirve para corregirlo).
>
>
>
> --
> Iñaki Baz Castillo
>
> _______________________________________________
> Users-es mailing list
> Users-es at lists.openser.org
> http://lists.openser.org/cgi-bin/mailman/listinfo/users-es
>
--
Ronmel Jiron Sandres
More information about the Users-es
mailing list