Hey All,
I think I may have found the solution. It looks like there might be a
feature available in the CVS head version of SER that will solve the
problem that we are experiencing.
However, Problem is, this is CVS head! Is this feature available in any of
the stable releases of SER. If not, is it back portable?
--------
1.5.4. fix_nated_register()
The function creates a URI consisting of the source IP, port,
and protocol and stores the URI in an Attribute-Value-Pair.
The URI will be appended as "received" parameter to Contact in
200 OK and registrar will store it in the user location
database.
Example 1-8. fix_nated_register usage
...
fix_nated_register();
...
-------
Thanks for the help!
Darren Nay
On 8/25/05 4:01 PM, "Darren Nay" <dnay(a)ionosphere.net> wrote:
Hey All,
Got a question for you all. I've had a nathelper implementation in place for
months thinking that it was working, but recent events have made me question
my configuration.
It doesn't seem to be rewriting the contact header when the src_port and
contact_port are different. Even though I am using fix_nated_contact() for
REGISTER requests. Please see my details below.
I am using SER v8.12
Here is an example ngrep capture for a REGISTER. Notice that the source port
is 53492, and the contact port is 53616.
--------------
U 66.110.232.221:53492 -> 208.253.183.40:5060 at 01:52:55 08/26/2005
REGISTER
sip:proxy.ionosphere.net SIP/2.0
Via: SIP/2.0/UDP 66.110.232.221:53492;branch=z9hG4bK-7c0d1eaa
From: spectrum wireless
<sip:+13367908202@proxy.ionosphere.net>;tag=f8c505c5a8fc2e3o0
To: spectrum wireless <sip:+13367908202@proxy.ionosphere.net>
Call-ID: e0bd4b00-2770688f(a)192.168.1.29
CSeq: 10 REGISTER
Max-Forwards: 70
Contact: spectrum wireless <sip:+13367908202@66.110.232.221:53616>;expires=600
User-Agent: IONOSPHERE I-PHONE v1.0
Content-Length: 0
Allow: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, REFER
Supported: x-sipura
-------
U 208.253.183.40:5060 -> 66.110.232.221:53492 at 01:52:55 08/26/2005
SIP/2.0 200 OK
Via: SIP/2.0/UDP 66.110.232.221:53492;branch=z9hG4bK-7c0d1eaa
From: spectrum wireless
<sip:+13367908202@proxy.ionosphere.net>;tag=f8c505c5a8fc2e3o0
To: spectrum wireless
<sip:+13367908202@proxy.ionosphere.net>;tag=309667ea73a5d01d816917cdbd4fb3ac.6
723
Call-ID: e0bd4b00-2770688f(a)192.168.1.29
CSeq: 10 REGISTER
Contact: <sip:+13367908202@66.110.232.221:53616>;q=0.00;expires=600
Server: Sip EXpress router (0.8.12-tcp_nonb (i386/linux))
Content-Length: 0
Warning: 392 208.253.183.40:5060 "Noisy feedback tells: pid=31855
req_src_ip=66.110.232.221 req_src_port=53492
in_uri=sip:proxy.ionosphere.net
out_uri=sip:proxy.ionosphere.net via_cnt==1"
-------------
Here is a snipet for REGISTER requests from my ser.cfg
--------
# Nathelper
if (nat_uac_test("3")) {
if (method == "REGISTER" || !search("^Record-Route:")) {
log("LOG:Someone trying to use private IP, rewriting\n");
fix_nated_contact(); # Rewrite contact with source IP
force_rport();
setflag(6);
};
};
# Turn on SIP accounting
setflag(3);
if (!method=="REGISTER") record_route();
# loose-route processing
if (loose_route()) {
route(1);
break;
};
lookup("aliases");
if (!uri==myself) {
# mark routing logic in request
append_hf("P-hint: outbound\r\n");
route(1);
break;
};
if (uri==myself) {
if (method=="REGISTER") {
if (!www_authorize("proxy.ionosphere.net",
"subscriber")) {
www_challenge("proxy.ionosphere.net", "0");
break;
};
save("location")
break;
};
## etc..................
};
--------
Then the registration is always recorded as the contact port. Here is a
serctl ul output:
<sip:+13367908202@66.110.232.221:53616>;q=0.00;expires=529
Does anyone have idea why this is happening? Is my SER.CFG incorrect?
Thanks so much!
Darren Nay
VoIP Network Development
Ionosphere, Inc.
dnay(a)ionosphere.net