[OpenSIPS-Users] NAT: Why replacing "Contact" with the received public IP:port instead of adding a parameter with it?
Klaus Darilion
klaus.mailinglists at pernau.at
Fri Nov 7 14:04:14 CET 2008
Hi Inaki!
Funny - I am thinking of this since long time and had exactly the same
idea yesterday, except that:
- I would name the function add_received_to_contact()
- I thought of searching for "received" not in t_relay but during
loose_route() (by design the received param can only be in loose-routed
messages and this allows overriding $du manuall)
- remove the receive param from RURI before forwarding (although it is
allowed by RFC 3261, maybe make this optional)
unfortunately I did not had time yet to implement it
regards
klaus
Iñaki Baz Castillo schrieb:
> Hi, a common solution for UA's behind NAT is using
> "fix_nated_contact()" to replace the private address with the received
> address, so in-dialog request would be properly routed.
> But this breaks the "Contact" the UA set in the REGISTER. This is:
>
> - The UA registers with "Contact: <sip:user at PRIVATE_ADDRESS>".
> - But later it receives in-dialog requests to RURI "sip:user at PUBLIC_ADDRESS".
>
> AFAIK, a UA could refuse that in-dialog request because it has a RURI
> different than the UA registered URI.
>
> So I wonder, wouldn't be more ellegant to add a "Contact" parameter
> "received" with the public address, and when the proxy receives an
> in-dialog request then set the destination uri with that parameter
> value? This is:
>
> --------------------------------------------------------------------------
> alice (NAT) Proxy bob
> <F1> INVITE --->
> <F2> INVITE --->
> <----- <F3> BYE
> <----- <F4> BYE
>
>
> <F1>
> INVITE sip:bob at domain.org SIP/2.0
> Contact: <sip:alice at PRIVATE_ADDRESS>
>
> <F2>
> INVITE sip:bob at BOB_IP SIP/2.0
> Contact: <sip:alice at PRIVATE_ADDRESS;received="sip:PUBLIC_ADDRESS">
>
> <F3>
> BYE sip:alice at PRIVATE_ADDRESS;received="sip:PUBLIC_ADDRESS" SIP/2.0
>
> --------
> Now the Proxy sets the destination URI $du with "sip:PUBLIC_ADDRESS"
> so the BYE is forwarded tu alice public address without changing the
> RURI.
> --------
>
> <F4>
> BYE sip:alice at PRIVATE_ADDRESS;received="sip:PUBLIC_ADDRESS" SIP/2.0
> --------------------------------------------------------------------------
>
>
>
> This could be done manually in the script or with a new function (that
> I suggest) in nathelper module, something as:
>
> if nat_uac_test("19") {
> if ! is_method("REGISTER") {
> add_contact_received();
> }
> }
>
> Opcionally, this parameter could be inspected automatically during
> t_relay to set the destination uri (not sure about it), or it could be
> done in the script by checking manually a parameter "received" in the
> Contact URI (note that this is not a parameter in the Contact heade,
> but in the Contact URI:
>
> Contact: <sip:user at IP;received=x.x.x.x> != Contact:
> <sip:user at IP>;received=x.x.x.x
>
> The parameter must appear in the Contact URI since it must appear in
> the RURI of the in-dialog request.
>
> Opinions?
>
>
>
>
More information about the Users
mailing list