[SR-Users] Kamailio + RTPEngine SIP Proxy...

Jerry Kendall Jerry.Kendall at BishopHosting.com
Wed Sep 7 07:01:41 CEST 2022


Hi There....

Hope someone can point me in the right direction.


The config below allows the device to register and will send the 200 OK without issue

It also allows the SUBSCRIBES to get in and a 202 Accepted is returned properly.

It also allows the device to send OPTION keepalives and they get in/out OK


The issue I am having at the moment is the outbount NOTIFY ofr the SUBS and outbound OPTIONS for heartbeat.


Can someone please point me at what I need to change so the OUTBOUND messages get delivered.


The issue I see is NAT related as the devices are behind firewalls at location A.

The Kamailio system and the inner PBX are all on Public IP.



################

debug=3
memdbg=5
memlog=5

log_facility=LOG_LOCAL0

fork=yes
children=4

listen=udp:192.168.1.3:8081
port=8081

#!define FLAG_FROM_SWITCH 1
#!define FLAG_FROM_DEVICE 2

mpath="/usr/lib/x86_64-linux-gnu/kamailio/modules/"
loadmodule "tm.so"
loadmodule "sl.so"
loadmodule "pv.so"
loadmodule "rr.so"
loadmodule "textops.so"
loadmodule "textopsx.so"
loadmodule "usrloc.so"
loadmodule "xlog.so"
loadmodule "path.so"
loadmodule "nathelper.so"
loadmodule "siputils.so"

# ----- nathelper params -----
modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")


####### Routing Logic ########

request_route {

     route(CHECK_SOURCE_IP);

     # CANCEL processing
     if (is_method("CANCEL")) {
         if (t_check_trans()) {
             route(RELAY);
         }
         exit;
     }

     route(WITHINDLG);

     t_check_trans();

     if( is_method("OPTIONS") ) {
         t_relay();
     }

     if( is_method("REGISTER|SUBSCRIBE") ) {
         add_path();
     }

     if( is_method("INVITE|REFER") ) {
         record_route();
     }

     if( isflagset(FLAG_FROM_SWITCH) ) {
         t_on_reply("OUTBOUND_REPLY");
     } else {
         $du = "sip:192.168.3.3:5060";
     }

     route(RELAY);
}

# SIP dialogs
route[WITHINDLG] {

     if (has_totag()) {
         # sequential request withing a dialog should
         # take the path determined by record-routing
         if (loose_route()) {
             route(RELAY);
         } else {
             if (is_method("NOTIFY")) {
                 route(RELAY);
             }
             if (is_method("SUBSCRIBE") && uri == myself) {
                 # in-dialog subscribe requests
                 exit;
             }
             if (is_method("ACK")) {
                 if (t_check_trans()) {
                     # no 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
                     #xlog("ACK without matching transaction ... ignore and discard");
                     exit;
                 }
             }
             sl_send_reply("404","Not here");
         }
         exit;
     }
}

onreply_route[OUTBOUND_REPLY]
{
     route(NAT_TEST_AND_CORRECT);
}

route[NAT_TEST_AND_CORRECT]
{
     if (nat_uac_test("3")) {
         if (is_method("REGISTER|SUBSCRIBE")) {
             fix_nated_register();
         } else {
             fix_nated_contact();
         }
         force_rport();
         }

     if (has_body("application/sdp") && nat_uac_test("8")) {
         fix_nated_sdp("10");
     }
}

route[RELAY]
{
     if (!t_relay()) {
         sl_reply_error();
     }
     exit;
}

route[LOGIT] {

     xlog("L_INFO", "LOGIT: $var(spot) -  $rm");

if( $ft == $null )
     xlog("L_INFO", "LOGIT: $var(spot) - From:$fU @ $fd - $fu");
else
     xlog("L_INFO", "LOGIT: $var(spot) - From:$fU @ $fd - $fu:$ft");

if( $tt == $null )
     xlog("L_INFO", "LOGIT: $var(spot) -   To:$tU @ $td - $tu");
else
     xlog("L_INFO", "LOGIT: $var(spot) -   To:$tU @ $td - $tu:$tt");

     xlog("L_INFO", "LOGIT: $var(spot) -  REQ:$rm @ $ru");
     xlog("L_INFO", "LOGIT: $var(spot) -  ACT:$(rd{s.select,0,.})");
     xlog("L_INFO", "LOGIT: $var(spot) -  HST:$(rd{s.select,1,.})");
     xlog("L_INFO", "LOGIT: $var(spot) -  CNT:$ct");
     xlog("L_INFO", "LOGIT: $var(spot) -  UAC:$ua");

if( $du != $null )
     xlog("L_INFO", "LOGIT: $var(spot) - DURI:$du");
}

route[CHECK_SOURCE_IP]
{
     $var(spot) = 'CHECK_SOURCE_IP';
     route(LOGIT);

     switch($si) {
         case "192.168.3.2":
             setflag(FLAG_FROM_SWITCH);
             return;
         default:
             setflag(FLAG_FROM_DEVICE);
             return;
     }
}






More information about the sr-users mailing list