[OpenSER-Users-ES] ayuda con Register

Jesus Rodriguez jesusr at voztele.com
Wed Jan 30 17:53:19 CET 2008


Hola,


> 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:


Diría que el problema es que te falta añadir la ip de tu openser  
(192.168.1.120) en la tabla domains.

Saludos
JesusR.







>
> 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 
> @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 
>>> @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
>
> _______________________________________________
> Users-es mailing list
> Users-es at lists.openser.org
> http://lists.openser.org/cgi-bin/mailman/listinfo/users-es
>
>





Saludos
JesusR.

------------------------------------
Jesus Rodriguez
VozTelecom Sistemas, S.L.
jesusr at voztele.com
http://www.voztele.com
Tel. 902360305
-------------------------------------








More information about the Users-es mailing list