Not sure what exactly happens in your scenario, but some generic tips:
- Regardless if the client is behind NAT or not, IMO the TCP connection
should be openend by the client and kept open for the whole lifetime of
the client. Thus, the TCP connection should not be closed, not by the
client and not by the proxy. Thus, set your TCP connection lifetime to a
value which is bigger the maximum registration expiration.
I also would enable keep-alive in the client.
Is there any specific reason why you close the TCP connection?
When using TLS there is one more problem: The party that receives the
TLS connection needs to present a certificate. This means, if the proxy
setups a TLS connection to the SIP client, the SIP client would need a
TLS client certificate.
Conclusion:
- the client should create a TCP/TLS connection and it should be kept
open for the whole lifetime.
- the proxy should use async mode (why don't you use it?)
- the proxy should not event try to make a TLS connection to the client
as the client probably can not provide TLS certificate
regards
klaus
Am 21.12.2010 14:13, schrieb Dominguez Jover, Ricardo:
Klaus, it happens exactly what you said, duplicated
TCP connection. Now I tell you about what I've found and timing variables. First to
say there is no NAT in this scenario.
About the timing variables there is a re-register time in the client (by default 3600s)
and a "minimum time" (20s). Every time I restart Kamailio, after the minimum
time the client re-opens a session. The client is not sending any SIP keepalive (I've
switched it OFF), and in Kamailio "tcp_connection_lifetime=120", so after this
time the first TCP connection is closed.
But this happens only if I don't try to register again. If I do so, having the
duplicated connection, then the first TCP connection only closes after the re-register
timer finishes, and the second TCP connection closes every 120 seconds and then is
re-opened after the 20s period.
In my config TCP ASYNC is set to NO and set_forward_no_connect() doesn't seem to do
anything since there is no NAT.
I can reduce re-register time in the client side for a faster expiring time of the first
TCP connection. But, how could I close the "corrupted" TCP connection from the
server side? As I said since the second TCP connection is opened "
tcp_connection_lifetime" doesn't affect the first one.
Kind regards,
Ricardo Dominguez
-----Mensaje original-----
De: Klaus Darilion [mailto:klaus.mailinglists@pernau.at]
Enviado el: martes, 21 de diciembre de 2010 10:47
Para: Dominguez Jover, Ricardo
CC: sr-users(a)lists.sip-router.org
Asunto: Re: [SR-Users] kamailio restart and TLS ( relay_to_tls() )
Am 21.12.2010 08:30, schrieb Dominguez Jover, Ricardo:
Hi everybody,
Since I implemented Kamailio 3.1 with TLS I've found a strange behavior.
That is, with some clients (Bria and Blink) registered, if I restart
Kamailio, then when the clients re-register the strange behaivour
happens. This behavior consist on receiving calls, it took about 15
seconds to receive the first tone since the call was made.
This sounds like some timeout.
Just think about what may happen: you restart Kamailio - thus the TCP
connection is terminated and probably the client will create a new
registration using a new TCP connection.
As the old registration was not deREGISTERed, you will have 2 entries in
your location table: one for the new registration (if the client already
registered) and one for the old one (pointing to a non-existing TCP
connection).
No on incoming call, Kamailio will try to estblish a TCP connection to
the old contact - which for sure will fail of the client is behind NAT
or a firewall.
There are several TCP parameters to tweak, e.g:
make sure TCP is non-blocking:
http://www.kamailio.org/dokuwiki/doku.php/core-cookbook:3.1.x#tcp_async
do not try to open TCP connections to SIP clients when they are known to
be behind NAT/FW.
http://www.kamailio.org/dokuwiki/doku.php/core-cookbook:3.1.x#set_forward_n…
There are also some more TCP functions which can be used to change the
behavior, just look around set_forward_no_connect() function in core
cookbook.
regards
klaus
regards
Klaus
I made the following modification in the "route[Relay]" config. The
reason is I wanted my gateway and Kamailio to make signaling by TLS.
Without this modification the signaling was unencrypted (SIP):
route[RELAY] {
#!ifdef WITH_NAT
if (check_route_param("nat=yes")) {
setbflag(FLB_NATB);
}
if (isflagset(FLT_NATS) || isbflagset(FLB_NATB)) {
route(RTPPROXY);
}
#!endif
/* example how to enable some additional event routes */
if (is_method("INVITE")) {
#t_on_branch("BRANCH_ONE");
t_on_reply("REPLY_ONE");
t_on_failure("FAIL_ONE");
}
*# Se comunica con el GWa traves de TLS *
***if(!( ($od=~"mydomain.com")&& ( ($rU=~"[a-z]{3,20}$") ||
($rU=~"^xx[0-9][0-9]$") ) ) ) { ### If I'm calling a PBX extension do
the signaling by TLS with the gateway (Cisco 2811)*
**
* if (!t_relay_to_tls()) {*
* sl_reply_error();*
* }*
} else if {
if (!t_relay()) {
sl_reply_error();
}
}
exit;
}
The rest of functionalities are working really fine. Any idea about what
is happening?
Cheers!
*Ricardo Domínguez*
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users(a)lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users(a)lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users