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@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@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@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@ionosphere.net