Thanks again. So then my config should look something like:
# Caller NAT detection route route[NAT] { #!ifdef WITH_NAT force_rport(); if (nat_uac_test("19")) { if (method=="REGISTER") { fix_nated_register(); } else { fix_nated_contact(); } setflag(FLT_NATS); # If both clients are behind nat we can check to see if they are behind the same # external IP and optimize the media path to go directly between them else if ( $si==$dd || $si==rd) { xlog("L_INFO", "Detected Two Clients Behind the Same NAT - Disabling RTPproxy"); # Do not use rtpproxy as the clients seem to be behind the same NAT resetflag(FLT_NATS); resetflag(FLT_NATB); } } } #!endif return; } # RTPProxy control route[RTPPROXY] { #!ifdef WITH_NAT if (is_method("BYE")) { unforce_rtp_proxy(); } else if (is_method("INVITE")){ force_rtp_proxy(); } if (!has_totag()) add_rr_param(";nat=yes"); #!endif return; } Rgds Deon On Dec 20, 2010, at 3:37 PM, Daniel-Constantin Mierla wrote: > Hello, > > that's a hint for a very old version, where cfg file language didn't had > support for variables and avpops module was used for comparison (as you could > see, $dd is stored in an avp and them compared with src ip -- no longer need > for such workaround, just do if($si==$dd) ...). > > You have to plug the when you force usage of rtp proxy, so you skip it in > such cases. > > Cheers, > Daniel > > On 12/20/10 2:32 PM, Deon Vermeulen wrote: >> >> Hi Daniel >> >> Thank you so much for your feedback. >> >> I came upon the below post, but I'm unable to find the example Norman posted. >> http://www.mail-archive.com/users@openser.org/msg01932.html >> >> In short the end solution is: >> >> # If both clients are behind nat we can check to see if they are behind >> the same >> # external IP and optimize the media path to go directly between them >> else if ( isflagset(2) and isflagset(3) ) >> { >> log(1, "Both Clients are behind NAT"); >> >> # Store the destination domain into an AVP >> avp_printf("i:450", "$dd"); >> >> if ( avp_check("i:450", "eq/$src_ip/g") ) >> { >> xlog("L_INFO", "Detected Two Clients Behind the Same NAT - >> Disabling Mediaproxy"); >> >> # Do not use mediaproxy as the clients seem to be behind the >> same NAT >> resetflag(2); >> resetflag(3); >> } >> >> } >> >> >> >> I haven't tested yet, but would I be right in saying my config should look >> something like: >> >> >> ####### Routing Logic ######## >> >> >> # Main SIP request routing logic >> # - processing of any incoming SIP request starts with this route >> route { >> >> # per request initial checks >> route(REQINIT); >> >> # NAT detection >> route(NAT); >> >> >> >> >> # Caller NAT detection route >> route[NAT] { >> #!ifdef WITH_NAT >> force_rport(); >> if (nat_uac_test("19")) { >> if (method=="REGISTER") { >> fix_nated_register(); >> } else { >> fix_nated_contact(); >> } >> setflag(FLT_NATS); >> >> # If both clients are behind nat we can check to see if they >> are behind the same >> # external IP and optimize the media path to go directly >> between them >> else if ( isflagset(FLT_NATS) and isflagset(FLT_NATB) ) { >> log(1, "Both Clients are behind NAT"); >> >> # Store the destination domain into an AVP >> avp_printf("i:450", "$dd"); >> >> if ( avp_check("i:450", "eq/$src_ip/g") ) { >> xlog("L_INFO", >> "Detected Two Clients Behind the Same NAT - Disabling RTPproxy"); >> >> # Do not use rtpproxy as the clients seem to >> be behind the same NAT >> resetflag(FLT_NATS); >> resetflag(FLT_NATB); >> } >> } >> } >> #!endif >> return; >> } >> >> # RTPProxy control >> route[RTPPROXY] { >> #!ifdef WITH_NAT >> if (is_method("BYE")) { >> unforce_rtp_proxy(); >> } else if (is_method("INVITE")){ >> force_rtp_proxy(); >> } >> if (!has_totag()) add_rr_param(";nat=yes"); >> #!endif >> return; >> } >> >> >> Rgds >> Deon >> >> >> On Dec 20, 2010, at 2:41 PM, Daniel-Constantin Mierla wrote: >> >>> Hello, >>> >>> On 12/20/10 11:25 AM, Deon Vermeulen wrote: >>>> Hi List >>>> >>>> Can someone please help me? >>>> >>>> I need to implement PBX Services for a customer that has 10 IP Phones at >>>> his Main site and then 20 IP Phones located over 5 Branches. >>>> >>>> My goal is to have RTP go end to end and not proxied. >>>> >>>> I had a look at the below link and tried it, but with no luck. >>>> >>>> http://kamailio.org/dokuwiki/doku.php/examples:caller-callee-behind-same-nat >>>> >>>> Here is a partial output of my kamailio.cfg file if someone would be so >>>> kind to help me. >>>> >>>> >>>> #!ifdef WITH_NAT >>>> # ----- rtpproxy params ----- >>>> modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:7722") >>>> >>>> # ----- nathelper params ----- >>>> modparam("nathelper", "natping_interval", 30) >>>> modparam("nathelper", "ping_nated_only", 1) >>>> modparam("nathelper", "sipping_bflag", FLB_NATSIPPING) >>>> modparam("nathelper", "sipping_from", "sip:pin...@x.x.x.x") >>>> >>>> # params needed for NAT traversal in other modules >>>> modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)") >>>> modparam("usrloc", "nat_bflag", FLB_NATB) >>>> #!endif >>>> >>>> >>>> >>>> ####### Routing Logic ######## >>>> >>>> >>>> # Main SIP request routing logic >>>> # - processing of any incoming SIP request starts with this route >>>> route { >>>> >>>> # per request initial checks >>>> route(REQINIT); >>>> >>>> # NAT detection >>>> route(NAT); >>>> >>>> >>>> >>>> >>>> # Caller NAT detection route >>>> route[NAT] { >>>> #!ifdef WITH_NAT >>>> force_rport(); >>>> if (nat_uac_test("19")) { >>>> if (method=="REGISTER") { >>>> fix_nated_register(); >>>> } else { >>>> fix_nated_contact(); >>>> } >>>> setflag(FLT_NATS); >> >> >>>> } >>>> #!endif >>>> return; >>>> } >>>> >>>> # RTPProxy control >>>> route[RTPPROXY] { >>>> #!ifdef WITH_NAT >>>> if (is_method("BYE")) { >>>> unforce_rtp_proxy(); >>>> } else if (is_method("INVITE")){ >>>> force_rtp_proxy(); >>>> } >>>> if (!has_totag()) add_rr_param(";nat=yes"); >>>> #!endif >>>> return; >>>> } >>>> >>>> >>> what you have to do is to check if the source is natted and $si==$dd, then >>> callee and caller are behind same nat (if there is one level of nat), so >>> you don't force rtpproxy usage. >>> >>> Cheers, >>> Daniel >>> >>> -- >>> Daniel-Constantin Mierla >>> Kamailio (OpenSER) Advanced Training >>> Jan 24-26, 2011, Irvine, CA, USA >>> http://www.asipto.com >>> >> > > -- > Daniel-Constantin Mierla > Kamailio (OpenSER) Advanced Training > Jan 24-26, 2011, Irvine, CA, USA > http://www.asipto.com
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users