[SR-Users] nat_keepalive() and fix_contact() are incompatible

Daniel-Constantin Mierla miconda at gmail.com
Thu May 23 10:04:11 CEST 2013


Hello,

if you have registrar behind a proxy, then you have to use path module.

Cheers,
Daniel

On 5/22/13 3:17 PM, David wrote:
> 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
>>>
>
>
> _______________________________________________
> 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

-- 
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio Advanced Training, San Francisco, USA - June 24-27, 2013
   * http://asipto.com/u/katu *




More information about the sr-users mailing list