[SR-Users] nat_keepalive() and fix_contact() are incompatible
David
kamailio.org at spam.lublink.net
Wed May 22 15:17:22 CEST 2013
Hello,
fix_nated_register() doesn't seem to apply in this case because my NAT
proxy is seperate from my usrloc proxy. I guess I forgot that
information in my first email. Sorry.
I tried using add_contact_alias, but it does the same thing.
Is there an example somewhere of how to use the nat keep alive option on
a server that does NAT before t_relaying it to another server that has
usrloc on it?
Thanks,
David
On 13-05-22 04:06 AM, Klaus Darilion wrote:
>
>
> On 21.05.2013 18:37, David wrote:
>> Hello,
>>
>> So I want to setup a Kamailio SIP Proxy( version 4 ) that will do NAT
>> signalling handling. With the help of nat_traversal and path modules.
>>
>> Attached is my kamailio.cfg file.
>>
>> My problem is I want to do keep alive on users who are behind NAT, so I
>> called nat_keepalive();. The script will work fine, but as soon as I
>> enable either add_contact_alias() or fix_contact(), the keep alive
>> doesn't activate.
>>
>> I modified nat_traversal.c to identify the issue and found that it is
>> comparing the contact header from the request and the reply to find the
>> expiration. Trouble is, the request contact header was taken from before
>> I called fix_contact() and the reply header has the contact from after
>> the fix_contact() call. So my traces show that on the return trip the
>> callback is called, I bet the stack trace looks like this :
>>
>> 1. Some method in tm
>> 2. __tm_reply_in() defined at nat_traversal.c:1358
>> 3. get_register_expire called from nat_traversal.c:1377 and defined at
>> nat_traversal.c:878
>> 4. STR_MATCH_STR called from nat_traversal.c:937 and defined at
>> nat_traversal.c:77
>>
>> STR_MATCH_STR returns false because the headers are different.
>>
>> I added
>>
>> else
>> {
>> LM_ERR("failed to match because request
>> %s is not reply %s", contact->uri.s, r_contact->uri.s ) ;
>> }
>>
>> to the code and see :
>>
>> May 21 12:18:52 kamailio-dev-nat /usr/sbin/kamailio[30163]: ERROR:
>> nat_traversal [nat_traversal.c:946]: failed to match because request
>> sip:username at mytld#015#012#015#012 is not reply
>> sip:username at myip:59080>;expires=60;received="sip:64.18.189.196:5060"#015#012Server:
>>
>> CenseredUA 5.2-rc1#015#012Content-Length: 0#015#012#015
>>
>> So as you can see the original Contact header has the server's domain
>> name and the response has the IP address that set by fix_contact().
>
> Even if you do not call fix_contact I fail to see how the URIs should
> match, as the contact URI in the response has the "expires" parameter
> and therefore the string comparison should fail.
>
>> So I think that nat_keepalive() should not be comparing the Contact from
>> the original request but using the contact header from the modified
>> request.
>
> That would be a solution. Another solution would be to use
> fix_nated_register() for REGISTER and add_contact_alias() for other
> requests (from nathelper module)
>
> regards
> Klaus
>
>
>>
>> Any ideas what to do next ?
>>
>> Thanks,
>> David
>>
>>
>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>> sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
More information about the sr-users
mailing list