Hello,

I am running Kamailio version 1.5 and rtpproxy version 1.2. I have enabled NAT support in Kamailio.cfg. I have a UA behind NAT (UA IP:192.168.2.101), and the UA registers with an Asterisk server (Public IP) through an outbound proxy running Kamailio and rtpproxy with Public IP.

Registration succeeds, however when making an outbound call from the UA to a cellphone, there is only one sided voice. This is happening because Asterisk is addressing rtp streams to the UA's local IP address instead of its PublicIP:port.

Why is the IP address not being rewritten in the SDP ? Is there an alternate way of invoking rtpproxy (with flags) such that the IP address in the SDP is rewritten ?

Thanks and Regards,
Vikram.

PS : Below is the main routing section of my kamailio.cfg

route{
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        }
        # NAT detection
        route(4);
        if (has_totag()) {
                # sequential request withing a dialog should
                # take the path determined by record-routing
                if (loose_route()) {
                        if (is_method("BYE")) {
                                setflag(1); # do accounting ...
                                setflag(3); # ... even if the transaction fails
                        }
                        route(1);
                } else {
                        if (is_method("SUBSCRIBE") && uri == myself) {
                                # in-dialog subscribe requests
                                route(2);
                                exit;
                        }
                        if ( is_method("ACK") ) {
                                if ( t_check_trans() ) {
                                        # non loose-route, but stateful ACK; 
must be an ACK after a 487 or
e.g. 404 from upstream server
                                        t_relay();
                                        exit;
                                } else {
                                        # ACK without matching transaction ... 
ignore and discard.\n");
                                        exit;
                                }
                        }
                        sl_send_reply("404","Not here");
                }
                exit;
        }
        # CANCEL processing
        if (is_method("CANCEL"))
        {
                if (t_check_trans())
                        t_relay();
                exit;
        }
        t_check_trans();
        # record routing
        if (!is_method("REGISTER|MESSAGE"))
                record_route();
        # account only INVITEs
        if (is_method("INVITE")) {
                setflag(1); # do accounting
        }
        if (!uri==myself)
        {
                append_hf("P-hint: outbound\r\n");
                route(1);
        }
        # requests for my domain
        if( is_method("PUBLISH|SUBSCRIBE"))
                route(2);
        if (is_method("REGISTER"))
        {
                if (isflagset(5)) {
                        setbflag(6);
#                       setbflag(7);
                }
                if (!save("location"))
                        sl_reply_error();
                exit;
       }
        if ($rU==NULL) {
                # request with no Username in RURI
                sl_send_reply("484","Address Incomplete");
                exit;
        }
        # apply DB based aliases (uncomment to enable)
        ##alias_db_lookup("dbaliases");
        if (!lookup("location")) {
                switch ($retcode) {
                        case -1:
                        case -3:
                                t_newtran();
                                t_reply("404", "Not Found");
                                exit;
                        case -2:
                                sl_send_reply("405", "Method Not Allowed");
                                exit;
                }
        }
        # when routing via usrloc, log the missed calls also
        setflag(2);
        route(1);
}
route[1] {
        if (check_route_param("nat=yes")) {
                setbflag(6);
        }
        if (isflagset(5) || isbflagset(6)) {
                route(5);
        }
        /* example how to enable some additional event routes */
        if (is_method("INVITE")) {
                #t_on_branch("1");
                t_on_reply("1");
                t_on_failure("1");
        }
        if (!t_relay()) {
                sl_reply_error();
        }
        exit;
}
# Presence route
/* uncomment the whole following route for enabling presence server */
route[2]
{

        # if presence enabled, this part will not be executed
        if (is_method("PUBLISH") || $rU==null)
        {
                sl_send_reply("404", "Not here");
                exit;
        }
        return;
}
# Caller NAT detection route
/* uncomment the whole following route for enabling Caller NAT Detection */
route[4]{
        force_rport();
        if (nat_uac_test("19")) {
                if (method=="REGISTER") {
                        fix_nated_register();
                } else {
                        fix_nated_contact();
                        setflag(6);#VR
                }
                setflag(5);
        }
        return;
}
# RTPProxy control
/* uncomment the whole following route for enabling RTPProxy Control */
route[5] {
        if (is_method("BYE")) {
                unforce_rtp_proxy();
        } else if (is_method("INVITE")){
                force_rtp_proxy();
        }
        if (!has_totag()) add_rr_param(";nat=yes");
        return;
}
branch_route[1] {
        xdbg("new branch at $ru\n");
}
onreply_route[1] {
        xdbg("incoming reply\n");

        if ((isflagset(5) || isbflagset(6)) && status=~"(183)|(2[0-9][0-9])") {
                force_rtp_proxy();
        }
        if (isbflagset(6)) {
                fix_nated_contact();
        }
}
failure_route[1] {
        if (is_method("INVITE")
                        && (isbflagset(6) || isflagset(5))) {
                unforce_rtp_proxy();
        }

        if (t_was_cancelled()) {
                exit;
        }
}

_______________________________________________
Kamailio (OpenSER) - Users mailing list
Users@lists.kamailio.org
http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
http://lists.openser-project.org/cgi-bin/mailman/listinfo/users

Reply via email to