<div dir="ltr">Hi all, before hand thanks for all the support received on this channel.<div><br></div><div>I have an issue with an installed server on a aws instance which is giving me routing loops, my setup is simple, i have alias set for both ips internal and external and the loop still present when t_relay don't find any routes to relay it just sent it to  itself with the public ip then the loop starts.</div>
<div><br></div><div>can any one please advise how can i prevent that or just tell t_relay that if there is no more routes just respond with a cancel or stop searching.</div><div><br></div><div>same thing happens when a gw code is not found on the dispatcher list file.</div>
<div><br></div><div>as i had read by just specifying the alias=domain it should take care of it but it is not happening perhaps because it is a AWS instance, or most likely i am missing something after the T_relay to stop the call from looping.</div>
<div><br></div><div>I do have several headers fix because i have an asterisk sending calls with lots of signalling calls added to the call that i need to remove before the call is passed out to a carrier or another UA, Kamailio is just proxing the calls between asterisk and the outside world no Media handling, No registrations.</div>
<div><br></div><div> Again thanks for any tips to find my answer or if anyone had a similar issue thanks again.</div><div><br></div><div>thanks for any help .</div><div><br></div><div>Julian.</div><div><br></div><div>on this setup i have</div>
<div><br></div><div>public ip as 2.2.2.2</div><div><br></div><div>private IP as 1.1.1.1</div><div><br></div><div><br></div><div><div>#!KAMAILIO</div><div>####### Global Parameters #########</div><div><br></div><div>#!ifdef WITH_DEBUG</div>
<div>debug=4</div><div>log_stderror=yes</div><div>#!else</div><div>#debug=2</div><div>#log_stderror=yes</div><div>#!endif</div><div><br></div><div>memdbg=5</div><div>memlog=5</div><div><br></div><div>log_facility=LOG_LOCAL7</div>
<div><br></div><div>fork=yes</div><div>children=6</div><div><br></div><div>auto_aliases=no</div><div><br></div><div><br></div><div>listen=udp:<a href="http://1.1.1.1:5060">1.1.1.1:5060</a> advertise <a href="http://2.2.2.2:5060">2.2.2.2:5060</a></div>
<div><br></div><div>alias=<a href="http://1.1.1.1:5060">1.1.1.1:5060</a><br></div><div>alias=1.1.1.1</div><div>alias=<a href="http://2.2.2.2:5060">2.2.2.2:5060</a></div><div>alias=2.2.2.2</div><div><br></div><div><br></div>
<div>port=5060</div><div><br></div><div>enable_tls=no</div><div><br></div><div>#tcp_connection_lifetime=3605</div><div><br></div><div>#!ifdef WITH_SRCPATH</div><div>mpath="modules_k:modules"</div><div>#!else</div>
<div>mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/"</div><div><br></div><div>#!endif</div><div>loadmodule "db_mysql.so"</div><div>##loadmodule "mi_fifo.so"</div><div>loadmodule "tm.so"</div>
<div>loadmodule "sl.so"</div><div>loadmodule "acc.so"</div><div>loadmodule "rr.so"</div><div>loadmodule "maxfwd.so"</div><div>loadmodule "uac.so"</div><div>loadmodule "textops.so"</div>
<div>loadmodule "pv.so"</div><div>loadmodule "dispatcher.so"</div><div>loadmodule "usrloc.so"</div><div>loadmodule "registrar.so"</div><div>loadmodule "siputils.so"</div><div>
loadmodule "sanity.so"</div><div>loadmodule "ctl.so"</div><div>loadmodule "mi_rpc.so"</div><div>loadmodule "avpops.so"</div><div>#!ifdef WITH_NAT</div><div>loadmodule "nathelper.so"</div>
<div>loadmodule "rtpproxy.so"</div><div>#!endif</div><div>loadmodule "xlog.so"</div><div>##mysqlcdr</div><div>modparam("acc", "db_flag", 2)</div><div>modparam("acc", "db_missed_flag", 3)</div>
<div>modparam("acc", "report_cancels", 1)</div><div>modparam("acc", "db_url", "mysql://<a href="http://openser:password@1.1.1.2/openser">openser:password@1.1.1.2/openser</a>")</div>
<div>modparam("acc", "db_extra", "from_uri=$fu; to_uri=$tu; intid=$fU; type_call=$si; dst_ip=$ru; carriercode=$tu;callmode=$var(out)" )</div><div><br></div><div>#loadmodule "carrierroute"</div>
<div>modparam("tm", "cancel_b_method", 1)</div><div>modparam("tm", "failure_reply_mode", 3)</div><div>modparam("tm", "fr_timer", 30000)</div><div>modparam("tm", "fr_inv_timer", 120000)</div>
<div><br></div><div>modparam("dispatcher", "list_file", "/etc/kamailio/dispatcher.lst")</div><div>modparam("rr", "enable_full_lr", 1)</div><div><br></div><div>#!ifdef WITH_NAT</div>
<div># ----- rtpproxy params -----</div><div>modparam("rtpproxy", "rtpproxy_sock", "udp:<a href="http://127.0.0.1:7722">127.0.0.1:7722</a>")</div><div><br></div><div># ----- nathelper params -----</div>
<div>modparam("nathelper", "natping_interval", 30)</div><div>modparam("nathelper", "ping_nated_only", 1)</div><div>modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)</div>
<div>modparam("nathelper", "sipping_from", "<a href="mailto:sip%3Apinger@kamailio.org">sip:pinger@kamailio.org</a>")</div><div># ----- mi_fifo params -----</div><div><br></div><div>##modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")</div>
<div><br></div><div># params needed for NAT traversal in other modules</div><div>modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")</div><div>modparam("usrloc", "nat_bflag", FLB_NATB)</div>
<div>#!endif</div><div>modparam("xlog", "buf_size", 8192)</div><div>modparam("xlog", "force_color", 1)</div><div>#carrierroute</div><div>#modparam("carrierroute", "config_file", "/etc/kamailio/carrierroute.conf")</div>
<div>#end carrierroute</div><div><br></div><div>modparam("pv", "shvset", "ruta=s:$ru")</div><div>modparam("pv", "varset","in=s:IN")</div><div>modparam("pv", "varset","out=s:OUT")</div>
<div><span class="" style="white-space:pre">    </span></div><div>#################BEGINING MAINROUTE##################</div><div>request_route {</div><div><br></div><div>        if (!mf_process_maxfwd_header("4")) {</div>
<div>                sl_send_reply("483","Too Many Hops");</div><div><span class="" style="white-space:pre">            </span>drop;</div><div>                exit;</div><div>        }</div><div>##</div><div> # initial sanity checks -- too long messages</div>
<div>       if (msg:len >=  2048 ) {</div><div>               sl_send_reply("513", "Message too big");</div><div>xlog("out header CHECK 513 baderror from_uri=$fu;($ct++)<$tU---=$var(n)> to_uri=$tu; intid=$fU; type_call=$si; dst_ip=$ru; carriercode=$var(z);callmode=$var(out)");</div>
<div>drop;</div><div>               exit;</div><div>       };</div><div>#</div><div>        if(is_method("OPTIONS")) {</div><div>            # send reply for each options request</div><div>            sl_send_reply("200", "ok");</div>
<div>            exit();</div><div>         }</div><div><br></div><div><br></div><div><br></div><div>#</div><div>if ( is_method("ACK") ) {</div><div><span class="" style="white-space:pre">                            </span>if ( t_check_trans() ) {</div>
<div><span class="" style="white-space:pre">                                    </span># no loose-route, but stateful ACK;</div><div><span class="" style="white-space:pre">                                        </span># must be an ACK after a 487</div><div><span class="" style="white-space:pre">                                       </span># or e.g. 404 from upstream server</div>
<div>$var(n)=$(tU{s.substr,3,0});</div><div>$var(i)=$(ct{re.subst,/^.*11811(.*)/"\1/});</div><div><br></div><div>$var(t)=$(fn{re.subst,/^.*11811(.*)/"\1/});</div><div><br></div><div>$var(r)=$rd; ##to domain</div>
<div>$fU=$(fU{s.substr,14,0});</div><div>$fn=$var(t);</div><div>$tU=$var(n);</div><div>$td=$var(r);</div><div><br></div><div>subst('/^Contact:.*11811(.*)$/Contact: <sip:\1\2/ig'); </div><div><br></div><div># Remove prefixes numbers from Contact\</div>
<div><span class="" style="white-space:pre">                                    </span>t_relay();</div><div><span class="" style="white-space:pre">                                 </span>exit;</div><div><span class="" style="white-space:pre">                              </span>} else {</div><div><span class="" style="white-space:pre">                                   </span># ACK without matching transaction ... ignore and discard</div>
<div>$var(n)=$(tU{s.substr,3,0});</div><div>$var(i)=$(ct{re.subst,/^.*11811(.*)/"\1/});</div><div><br></div><div>$var(t)=$(fn{re.subst,/^.*11811(.*)/"\1/});</div><div><br></div><div>$var(r)=$rd; ##to domain</div>
<div>$fU=$(fU{s.substr,14,0});</div><div>$fn=$var(t);</div><div>$tU=$var(n);</div><div>$td=$var(r);</div><div><br></div><div>subst('/^Contact:.*11811(.*)$/Contact: <sip:\1\2/ig');</div><div>t_relay();<span class="" style="white-space:pre">                                </span></div>
<div><span class="" style="white-space:pre">    </span>exit;</div><div><span class="" style="white-space:pre">                              </span>}</div><div><span class="" style="white-space:pre">                  </span>}</div><div>##responding to bye requests and modifying headers to match invite</div>
<div>   if(method=="BYE") {</div><div>   #Account BYE transactions</div><div>#$var(d) = $tu;</div><div>#$var(e)=$(var(d){s.substr,4,3});</div><div>setflag(2);</div><div>setflag(10);</div><div>$var(n)=$(tU{s.substr,3,0});</div>
<div>$var(i)=$(ct{re.subst,/^.*11811(.*)/"\1/});</div><div><br></div><div>$var(t)=$(fn{re.subst,/^.*11811(.*)/"\1/});</div><div><br></div><div>$var(r)=$rd; ##to domain</div><div>$fU=$(fU{s.substr,14,0});</div><div>
$fn=$var(t);</div><div>$tU=$var(n);</div><div>$td=$var(r);</div><div><br></div><div>subst('/^Contact:.*11811(.*)$/Contact: <sip:\1\2/ig');</div><div>t_relay();</div><div>        exit;</div><div>};</div><div><br>
</div><div>#CANCEL processing</div><div>if (method=="CANCEL") {</div><div>setflag(2);</div><div>setflag(3);</div><div>$var(n)=$(tU{s.substr,3,0});</div><div>$var(i)=$(ct{re.subst,/^.*11811(.*)/"\1/});</div>
<div><br></div><div>$var(t)=$(fn{re.subst,/^.*11811(.*)/"\1/});</div><div><br></div><div>$var(r)=$rd; ##to domain</div><div>$fU=$(fU{s.substr,14,0});</div><div>$fn=$var(t);</div><div>$tU=$var(n);</div><div>$td=$var(r);</div>
<div><br></div><div>subst('/^Contact:.*11811(.*)$/Contact: <sip:\1\2/ig');</div><div>t_relay();</div><div>        exit;</div><div>##if (t_check_trans()) t_relay();</div><div><br></div><div>exit;</div><div>};</div>
<div><br></div><div><br></div><div>#</div><div><br></div><div><br></div><div>#</div><div>       if (loose_route()) {</div><div><span class="" style="white-space:pre">              </span></div><div><br></div><div><br></div><div>##</div>
<div>if(is_method("OPTIONS")) {</div><div>            # send reply for each options request</div><div>            sl_send_reply("200", "ok");</div><div>            exit();</div><div>         }</div>
<div>##</div><div><span class="" style="white-space:pre">   </span></div><div><span class="" style="white-space:pre">           </span>if(method=="BYE") {</div><div>   #Account BYE transactions</div><div>setflag(2);</div><div>
};</div><div><br></div><div><br></div><div>##CANCEL processing</div><div>if (method=="CANCEL") {</div><div>setflag(3);</div><div>$var(n)=$(tU{s.substr,3,0});</div><div>$var(i)=$(ct{re.subst,/^.*11811(.*)/"\1/});</div>
<div><br></div><div>$var(t)=$(fn{re.subst,/^.*11811(.*)/"\1/});</div><div><br></div><div>$var(r)=$rd; ##to domain</div><div>$fU=$(fU{s.substr,14,0});</div><div>$fn=$var(t);</div><div>$tU=$var(n);</div><div>$td=$var(r);</div>
<div>subst('/^Contact:.*11811(.*)$/Contact: <sip:\1\2/ig');</div><div>if (t_check_trans()) t_relay();</div><div>exit;</div><div>};                </div><div><br></div><div><span class="" style="white-space:pre">                        </span>if (!t_relay()) {</div>
<div>                        sl_reply_error();</div><div>                }</div><div>                exit;</div><div>       }</div><div><br></div><div><br></div><div> if (is_method("INVITE")) { #Procesing invites</div>
<div><br></div><div><br></div><div><span class="" style="white-space:pre">          </span>record_route();</div><div>              </div><div>        }</div><div>##LOGGING CALL BEFORE IS PROCESSED</div><div>xlog("before strip,< time [$Tf] > Aip= $src_ip, r-uri($ru\n");</div>
<div>xlog("before from_uri=$fu; to_uri=$tu; pai=<<$ct>>;intid=$fU; type_call=$si; dst_ip=$ru; carriercode=$tu;callmode=$var(out) --$$--$ou");</div><div>#creando rutas</div><div>setflag(2);</div><div>
# Account Missed calls</div><div>setflag(3);</div><div>###VARIABLES FOR MODIFICATIONS</div><div>$var(x) = $(ru);</div><div><br></div><div>$var(y)=$(var(x){s.substr,4,3}); </div><div><br></div><div>$var(z)=$(var(y){<a href="http://s.int">s.int</a>});</div>
<div><br></div><div>$var(t)=$(var(x){s.substr,7,0});</div><div><br></div><div>$var(h)=$(var(x){s.substr,0,7});</div><div><br></div><div>$var(o)=$(fU{s.substr,14,0});</div><div><br></div><div>if($(var(x){s.len}) < 3)</div>
<div>{</div><div> $var(z)='0'+ $var(z);</div><div>}</div><div><br></div><div>xlog("dsroute $var(z)fullruri($ru)\n");</div><div><br></div><div><br></div><div>strip(3);</div><div><br></div><div>xlog("after strip time [$Tf] method ($rm) via el code ($var(z)--varhex($var(h))-- ($var(y))\n");</div>
<div>xlog("after from_uri=$fu; to_uri=$tu; intid=$fU; type_call=$si; dst_ip=$ru; carriercode=$var(z);callmode=$var(out)");</div><div><br></div><div>ds_select_domain ("$var(z)", "4");#carrer dynamic</div>
<div><br></div><div><br></div><div>###########KILLING BUGGIES#######when t_realy fails to find a route a loop is generate then strip takes off a digit until <a href="mailto:0@2.2.2.2">0@2.2.2.2</a> is left for to: user this kills that call.#####</div>
<div>if ($(tU{s.len}) < 4) {</div><div>xlog("CHECK TU 1bad kILLING BUGGIES>>> $tu--$td-$tU-$tt--$dd-$dd-$du- -<<$rd>$ru --- $oU> pai+++ <<$ct>>++ from_uri=$fu;<$tU---=$var(n)> to_uri=$tu; }pai<$ai> id=$fU; type_call=$si; dst_ip=$ru; carriercode=$var(z);callmode=$var(out)");</div>
<div>##sl_reply_error();</div><div>##sl_send_reply("513", "Message too big");</div><div>##sl_send_reply("488","Not Acceptable Here");</div><div>sl_send_reply("488","Not Acceptable Here");</div>
<div>#t_reset_retr();</div><div>#t_release();</div><div>##if(!t_relay()){ sl_reply_error(); drop; exit;}</div><div><br></div><div>#if (!t_relay()) { sl_reply_error(); break; };</div><div># t_relay();</div><div>#setflag(2);</div>
<div>drop;</div><div>exit;</div><div><br></div><div>}; ## Endif less than 4</div><div>##############END KILLING###########</div><div>################ROUTE SELECTION###############</div><div>if($(fn{s.len}) > 10) { # IF WE CHECK FOR FROM: ROUTEID MUST BE LONGER THAN 10 DIGITS TO BE A VALID ROUTE</div>
<div><br></div><div>xlog("out header CHECK more than 10 digits BEFORE from_uri=$fu;($ct++)<$tU---=$var(n)> to_uri=$tu; intid=$fU; type_call=$si; dst_ip=$ru; carriercode=$var(z);callmode=$var(out)");</div><div>
$var(n)=$(tU{s.substr,3,0});</div><div>$var(i)=$(ct{re.subst,/^.*00700(.*)/"\1/});</div><div>$var(t)=$(fn{re.subst,/^.*00700(.*)/"\1/});</div><div>$var(r)=$rd; ##to domain</div><div>$fU=$(fU{s.substr,14,0});</div>
<div>$fn=$var(t);</div><div>$tU=$var(n);</div><div>$td=$var(r);</div><div><br></div><div>subst('/^Contact:.*11811(.*)$/Contact: <sip:\1\2/ig'); # Remove number from Contact</div><div><br></div><div>##if(!t_relay()){ sl_reply_error(); drop; exit;}</div>
<div><br></div><div>if (!t_relay()) { sl_reply_error(); break; };</div><div><br></div><div># t_relay();</div><div><br></div><div>drop;</div><div> exit;</div><div><br></div><div>};</div><div><br></div><div>################ENDrouteselect##############################</div>
<div><br></div><div><br></div><div>###############AFTER LAST IF##############reply 488 ANY CALL THAT DID NOT FOUND A ROUTE.</div><div>sl_send_reply("488","Not Acceptable Here");</div><div>drop;</div><div>
exit;</div><div>}</div><div><br></div><div>###################END MAINROUTE#################</div><div><br></div><div><br></div></div><div><br></div><div><br></div><div><br></div><div>On My dispatcher.lst i have </div><div>
<br></div><div><br></div><div>1 sip:<a href="http://1.1.1.1:5060">1.1.1.1:5060</a></div><div>2 sip:<a href="http://2.2.2.2:5060">2.2.2.2:5060</a><br>3 sip:<a href="http://3.3.3.3:5060">3.3.3.3:5060</a></div><div>3 sip:<a href="http://3.3.3.5:5060">3.3.3.5:5060</a></div>
<div>...</div><div><br></div><div><br></div></div>