Hello,
I'm testing some basic flags with nat_uac_test. I have the following (rudimentary) script:
route[NATDETECT] { #!ifdef WITH_NAT if (has_body("application/sdp")) { if (nat_uac_test("18")) { xlog("SCRIPT: SDP NAT Detected\n"); setflag(6); } } else { if (nat_uac_test("2")) { xlog("SCRIPT: Other NAT Detected\n"); setflag(6); } }
if (isflagset(6)) { xlog("SCRIPT: NAT detected\n"); force_rport(); if (is_method("REGISTER")) { fix_nated_register(); } else { if(is_first_hop()) set_contact_alias(); } setflag(FLT_NATS); } #!endif return; }
When presented with this REGISTER message (ngrep output, so first line is IP source address and port):
U 192.168.113.17:6060 -> 192.168.113.11:5060 REGISTER sip:192.168.113.11;transport=udp SIP/2.0. Via: SIP/2.0/UDP 192.168.113.17:6060;branch=z9hG4bKOzvuzaIa;rport. From: sip:user_1@192.168.113.11;tag=3F785909-559E7E9F0009321B-B5BFFB40. To: sip:user_1@192.168.113.11. CSeq: 10 REGISTER. Call-ID: 1C193C6B-559E7E9F00093255-B5BFFB40. Max-Forwards: 70. User-Agent: FreeSWITCH. Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY. Supported: timer, path, replaces. Contact: sip:gw+sip0@10.40.47.190:5080;transport=udp;gw=sip0;expires=3600. Content-Length: 0. .
U 192.168.113.11:5060 -> 192.168.113.17:6060 SIP/2.0 200 OK. Via: SIP/2.0/UDP 192.168.113.17:6060;branch=z9hG4bKOzvuzaIa;rport=6060;received=192.168.113.17. From: sip:user_1@192.168.113.11;tag=3F785909-559E7E9F0009321B-B5BFFB40. To: sip:user_1@192.168.113.11;tag=b27e1a1d33761e85846fc98f5f3a7e58.1045. CSeq: 10 REGISTER. Call-ID: 1C193C6B-559E7E9F00093255-B5BFFB40. Contact: sip:gw+sip0@10.40.47.190:5080;transport=udp;gw=sip0;expires=3600;received="sip:192.168.113.17:6060". Server: Kamailio. Content-Length: 0. .
Log output:
Jul 9 10:00:41 kamailio /usr/sbin/kamailio[3886]: ERROR: <script>: SCRIPT: Other NAT Detected Jul 9 10:00:41 kamailio /usr/sbin/kamailio[3886]: ERROR: <script>: SCRIPT: NAT detected
Log output, the presence of the added "received" parameter in the returned Contact, etc show that NAT was detected. However, the IP source and port match the one presented in the Via header.
What am I missing here?
Thanks!
Hello,
what is the version are you using?
Just as side note, the received parameter is also required by the presence of rport parameter in incoming request -- I know you referred to the one in Contact, just wanted to underline the difference.
Cheers, Daniel
On 09/07/15 16:22, Kristian Kielhofner wrote:
Hello,
I'm testing some basic flags with nat_uac_test. I have the following (rudimentary) script:
route[NATDETECT] { #!ifdef WITH_NAT if (has_body("application/sdp")) { if (nat_uac_test("18")) { xlog("SCRIPT: SDP NAT Detected\n"); setflag(6); } } else { if (nat_uac_test("2")) { xlog("SCRIPT: Other NAT Detected\n"); setflag(6); } }
if (isflagset(6)) { xlog("SCRIPT: NAT detected\n"); force_rport(); if (is_method("REGISTER")) { fix_nated_register(); } else { if(is_first_hop()) set_contact_alias(); } setflag(FLT_NATS); }
#!endif return; }
When presented with this REGISTER message (ngrep output, so first line is IP source address and port):
U 192.168.113.17:6060 -> 192.168.113.11:5060 REGISTER sip:192.168.113.11;transport=udp SIP/2.0. Via: SIP/2.0/UDP 192.168.113.17:6060;branch=z9hG4bKOzvuzaIa;rport. From: sip:user_1@192.168.113.11;tag=3F785909-559E7E9F0009321B-B5BFFB40. To: sip:user_1@192.168.113.11. CSeq: 10 REGISTER. Call-ID: 1C193C6B-559E7E9F00093255-B5BFFB40. Max-Forwards: 70. User-Agent: FreeSWITCH. Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY. Supported: timer, path, replaces. Contact: sip:gw+sip0@10.40.47.190:5080;transport=udp;gw=sip0;expires=3600. Content-Length: 0. .
U 192.168.113.11:5060 -> 192.168.113.17:6060 SIP/2.0 200 OK. Via: SIP/2.0/UDP 192.168.113.17:6060;branch=z9hG4bKOzvuzaIa;rport=6060;received=192.168.113.17. From: sip:user_1@192.168.113.11;tag=3F785909-559E7E9F0009321B-B5BFFB40. To: sip:user_1@192.168.113.11;tag=b27e1a1d33761e85846fc98f5f3a7e58.1045. CSeq: 10 REGISTER. Call-ID: 1C193C6B-559E7E9F00093255-B5BFFB40. Contact: sip:gw+sip0@10.40.47.190:5080;transport=udp;gw=sip0;expires=3600;received="sip:192.168.113.17:6060". Server: Kamailio. Content-Length: 0. .
Log output:
Jul 9 10:00:41 kamailio /usr/sbin/kamailio[3886]: ERROR: <script>: SCRIPT: Other NAT Detected Jul 9 10:00:41 kamailio /usr/sbin/kamailio[3886]: ERROR: <script>: SCRIPT: NAT detected
Log output, the presence of the added "received" parameter in the returned Contact, etc show that NAT was detected. However, the IP source and port match the one presented in the Via header.
What am I missing here?
Thanks!