[Users] SER as loadbalancer and NAT

Klaus Darilion klaus.mailinglists at pernau.at
Wed Jan 11 12:15:42 CET 2006


Hi Andreas!

Andreas Granig wrote:
> Hi,
> 
> A question to the NAT experts:
> 
> I wonder if there are known side effects if I use fix_nated_contact() in 
> combination with nat_flag in the registrar module instead of 
> fix_nated_register() to save NATed contacts?

I think the only limitation is, that the SIP client sees a modified URI 
in incoming INVITE requests and in the 200 Ok responses for the REGISTER 
messages. I guess most clients do not care, but AFAI remember there was 
a posting that a client did not accept the 200 Ok reponse with the 
modified contact.


> What I want to do is checking for NAT on a stateless SER acting as load 
> balancer, then forwarding it to a proxy in the LAN, like:
> 
>   # remove P-Nated-HF here if present...
>   if(method == REGISTER &&
>     !search("^Contact:[ ]*\*") &&
>     client_nat_test("7"))
>   {
>       fix_nated_contact();
>       append_hf("P-Nated: 1\r\n");
>       force_rport();
>   }
>   # forwarding to proxy using dispatcher module
> 
> And in the proxy:
> 
>   modparam("registrar", "nat_flag", 1)
>   # ...
>   if(method == REGISTER)
>   {
>     if(is_present_hf("P-Nated")) setflag(1);
>     save("location");
>   }
>   # ...
>   if(method == INVITE)
>   {
>     # a request for a local user...
>     lookup("location");
>     setdsturi("sip:<address of loadbalancer>");
>     t_relay();
>   }
> 

I you do not care about the "strict" clients, what about using 
fix_nated_contact in the load balancer and fix_nated_register in the 
proxy? Then, the requests should be automatically be routed to load 
balancer.

> Of course a mechanism has to be provided to let the loadbalancer or an 
> external application NAT-ping the address provided in the rewritten 
> contact.
> 
> As far as I have seen, the difference is that this approach would save 
> the NAT-adress of the contact in usrloc with an empty received-param, 
> while fix_nated_register() saves the private adress of the contact with 
> the NAT-adress in the received-param.
> 
> I would assume (not verified yet), that in the case of using 
> fix_nated_contact(), the NAT-address is set as r-uri after a lookup, 
> with an empty dst-uri, which will have to be set to the load balancer's 
> address to traverse the client-side NAT.
> 
> In case of using fix_nated_register(), I assume the r-uri is set to the 
> client's private address, and the received-address as dst-uri. 
> Traversing the client's NAT wouldn't be that easy in this case because 
> you would have to save the received-address somewhere in the message and 
> forward the request to the load-balancer, which in turn has to forward 
> it to the client's NAT address.

AFAIK this is correct.

regards
klaus


> So would this approach using fix_nated_contact() for REGISTERs make 
> sense for using a SER-based load balancer? Or are there any limitations 
> I haven't considered?
> 
> Thanks,
> Andy
> 
> _______________________________________________
> Users mailing list
> Users at openser.org
> http://openser.org/cgi-bin/mailman/listinfo/users
> 
> 





More information about the Users mailing list