[OpenSIPS-Users] NAT and Re-INVITE

Doug doug at wd.co.za
Tue Oct 12 17:46:51 CEST 2010


  Hi All,

I've got a problem I'm not 100% sure how to resolve.

Ok the scenario is, client A is on a public interface, Client B is on a 
private IP address and has cflag 6 set in the location table.

Client A calls Client B via Opensips.

Now during the initial INVITE, opensips locates Client B, loads the 
information, and naturally bflag is set to 6 (my NAT flag). This then 
triggers mediaproxy to get involved, and the call is established 
correctly, media passes from Client A ----> Mediaproxy ----> Client B.

Now the problem is, the Client A device (Audiocodes ATA) sends a 
Re-INVITE to switchover to T.38. The process works pretty much the same, 
but follows the loose_route path due the call already being in a dialog 
(i think thats the right terminology).

Client B receives the Re-INVITE, however, because loose_route doesn't 
know about the bflag (I've check with xlog and its not set during this 
phase), mediaproxy is not engaged (as the INVITE is coming form Client A 
who is not behind NAT). So when Client B responds, the SDP is a private 
IP address, and the call falls apart.

Now I suppose what I could do is call "use_media_proxy()" from the 
onreply_route if the SDP is RFC1918 (nat_uac_test("8")), however, this 
would engage mediaproxy for only one leg of the call and not the Client 
A leg.

The other option is I can force mediaproxy on all calls, which works, 
but now I have to have RTP flowing through my links for devices that 
could be speaking directly to each other.

Has anyone had experience with this, or an idea of how to check during 
the loose_route phase if the Client B sisde is behind nat, or set a flag 
that remains consistent throughout the entire call flow (INVITE, 200Ok, 
Re-INVITE, 200OK, BYE).

I look forward to your assistance.

Many thanks
Doug




More information about the Users mailing list