Hi, <br><br>I'm getting error when I configured Nathelper on OpenSIPs, the errors are listed down below;<br><br>May 3 05:44:43 newtest /usr/local/sbin/opensips[2999]: ERROR:nathelper:select_rtpp_node: script error -no valid set selected<br>
May 3 05:44:43 newtest /usr/local/sbin/opensips[2999]: ERROR:nathelper:force_rtp_proxy_body: no available proxies<br>May 3 05:45:04 newtest /usr/local/sbin/opensips[2998]: ERROR:nathelper:force_rtp_proxy: Unable to parse body <br clear="all">
<br>and my configuration of OpenSIPs is listed below;<br><br>loadmodule "dispatcher.so"<br>loadmodule "avpops.so"<br>loadmodule "permissions.so"<br>loadmodule "aaa_radius.so"<br>loadmodule "auth_aaa.so"<br>
#loadmodule "auth_diameter.so"<br>loadmodule "nathelper.so"<br><br><br>#--------------------------------Settings For Radius-------------------------------------<br>#modparam("auth_diameter", "diameter_client_host", "localhost")<br>
modparam("aaa_radius", "radius_config","/usr/local/etc/radiusclient-ng/radiusclient.conf")<br>modparam("acc", "aaa_url", "radius:/usr/local/etc/radiusclient-ng/radiusclient.conf")<br>
modparam("acc", "aaa_flag", 2)<br>modparam("acc", "aaa_missed_flag", 3)<br>modparam("acc", "aaa_extra", "User-Name=$Au; \<br> Calling-Station-Id=$from; \<br>
Called-Station-Id=$to; \<br> Sip-Translated-Request-URI=$ruri; \<br> Sip-RPid=$avp(s:rpid); \<br> Source-IP=$si; \<br>
Source-Port=$sp; \<br> Canonical-URI=$avp(s:can_uri); \<br> Billing-Party=$avp(s:billing_party); \<br> Divert-Reason=$avp(s:divert_reason); \<br>
X-RTP-Stat=$hdr(X-RTP-Stat); \<br> Contact=$hdr(contact); \<br> Event=$hdr(event); \<br> SIP-Proxy-IP=$avp(s:sip_proxy_ip); \<br>
ENUM-TLD=$avp(s:enum_tld)")<br><br>modparam("auth_aaa","aaa_url","radius:/usr/local/etc/radiusclient-ng/radiusclient.conf")<br>modparam("auth", "rpid_prefix", "<sip:")<br>
modparam("auth", "rpid_suffix", "@<a href="http://77.66.2.137">77.66.2.137</a>>;screen=yes;privacy=off")<br>#modparam("auth", "rpid_suffix", "@<a href="http://203.215.179.54">203.215.179.54</a>>;screen=yes;privacy=off")<br>
modparam("auth", "rpid_avp", "$avp(s:rpid)")<br>#modparam("uri","service_type",10)<br><br><br># ----------------- setting module-specific parameters ---------------<br><br>
modparam("dispatcher", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")<br>modparam("permissions", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")<br>
<br>#----------------- setting NAT module parameters ---------------------<br><br>modparam("nathelper","ping_nated_only",1)<br>modparam("nathelper", "natping_interval", 30)<br>modparam("nathelper","natping_processes",1)<br>
#modparam("nathelper","rtpproxy_sock","udp:<a href="http://127.0.0.1:7890">127.0.0.1:7890</a>")<br>modparam("nathelper","received_avp","$avp(i:42)")<br>#modparam("nathelper", "sipping_bflag", 7)<br>
modparam("usrloc", "nat_bflag", 6)<br><br>route{<br><br> if (!mf_process_maxfwd_header("10")) {<br> sl_send_reply("483","Too Many Hops");<br> exit;<br>
}<br><br> #NAT detection<br> log("######################################### Go to Route 3 for NAT Detection #####################################");<br> route(3);<br><br> if (has_totag()) {<br>
# sequential request withing a dialog should<br> # take the path determined by record-routing<br> if (loose_route()) {<br> if (is_method("BYE")) {<br>
setflag(1); # do accounting ...<br> setflag(3); # ... even if the transaction fails<br> } else if (is_method("INVITE")) {<br>
record_route();<br> }<br> <br> route(1);<br> } else {<br> <br> if ( is_method("ACK") ) {<br>
if ( t_check_trans() ) {<br> t_relay();<br> exit;<br> } else {<br> exit;<br>
}<br> }<br> sl_send_reply("404","Not here");<br> }<br> exit;<br> }<br><br> #initial requests<br>
<br> # CANCEL processing<br> if (is_method("CANCEL"))<br> {<br> if (t_check_trans())<br> t_relay();<br> exit;<br> }<br><br> t_check_trans();<br>
<br> if (loose_route()) {<br> xlog("L_ERR",<br> "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");<br> if (!is_method("ACK"))<br>
sl_send_reply("403","Preload Route denied");<br> exit;<br> }<br><br> # record routing<br> if (!is_method("REGISTER|MESSAGE"))<br> record_route();<br>
<br> $avp(s:checksrc) = check_source_address("0");<br> log("###########################################################################################\n");<br> xlog("Check Source Address from Address TABLE Where Value 1 is Equal to True: $(avp(s:checksrc))\n");<br>
log("###########################################################################################\n");<br> if (is_method("INVITE") && check_source_address("0")) {<br><br>
if(uri=~"^sip:4569918004@*"){<br><br> log("####################INVITE####################");<br><br> rewriteuser("3225555002");<br> setflag(1); # do accounting<br>
<br> log("#################INVITE ENDS##################");<br> }<br> <br> }<br> else<br> {<br> log("################CALL REJECTED##################");<br>
#t_reply("405","Forbidden");<br> }<br><br><br> if (!uri==myself)<br> {<br> append_hf("P-hint: outbound\r\n");<br> route(1);<br>
}<br><br> # requests for my domain<br><br><br> if(uri==myself)<br> {<br> log("########################################### URI == MYSELF ########################################");<br>
if(method=="REGISTER")<br> {<br> route(2);<br> }<br><br> append_hf("P-hint: usrloc applied\r\n");<br> }<br><br>
<br> if (is_method("PUBLISH"))<br> {<br> sl_send_reply("503", "Service Unavailable");<br> exit;<br> }<br><br><br> if (is_method("REGISTER"))<br>
{<br> route(2);<br> }<br><br> if ($rU==NULL) {<br> # request with no Username in RURI<br> sl_send_reply("484","Address Incomplete");<br>
exit;<br> }<br><br><br> # apply DB based aliases (uncomment to enable)<br> ##alias_db_lookup("dbaliases");<br><br> # do lookup with method filtering<br> if (!lookup("location","m")) {<br>
switch ($retcode) {<br> case -1:<br> log("############################# LOOKUP LOCATION FLAG -1 PASS #################################");<br>
#ds_select_dst("1","4");<br><br> log("############################# DO ACCOUNTING ON RADIUS ######################################");<br>
setflag(2);<br><br> log("############################# SEND CALL TO ASTERISK #######################################");<br> rewritehostport("<a href="http://11.22.33.45:5070">11.22.33.45:5070</a>");<br>
<br> #forward();<br> log("############################# CALL IS GOING IN STATEFULL MANNER ############################");<br> t_relay();<br>
<br> log("############################# CALL ROUTING TO ROUTE 1 ######################################");<br> route(1);<br> exit;<br>
<br> case -3:<br> log("############################ LOOKUP LOCATION FLAG -3 PASS #################################");<br> t_newtran();<br>
t_reply("404", "Not Found");<br> exit;<br> case -2:<br> log("############################ LOOKUP LOCATION FLAG -2 PASS #################################");<br>
sl_send_reply("405", "Method Not Allowed");<br> exit;<br> }<br> }<br><br> # when routing via usrloc, log the missed calls also<br>
setflag(2);<br><br> route(1);<br>}<br><br>route[1] {<br> # for INVITEs enable some additional helper routes<br> if (is_method("INVITE")) {<br><br> log("################################ INVITE ROUTE 1 Function ##################################");<br>
<br> t_on_branch("2");<br> t_on_reply("2");<br> t_on_failure("1");<br> }<br><br> if (subst_uri('/(sip:.*);nat=yes/\1/')){<br>
<br> log("################################ IF SUBSTR CONTAINS NAT=YES ################################");<br> setbflag(6);<br> };<br><br> if (isflagset(5)||isbflagset(6)) {<br>
<br> log("################################ CHECK FLAGSET AND ROUTE TO 4 ###############################");<br> route(4);<br> }<br><br><br> if (!t_relay()) {<br> sl_reply_error();<br>
};<br> exit;<br>}<br>route[2]<br>{<br> log("######################################## AAA-REGISTRATION #######################################");<br> if (!aaa_www_authorize("11.22.33.44"))<br>
{<br> www_challenge("11.22.33.44", "1");<br> return;<br> # #exit;<br> }<br> #else<br> #{<br> # t_reply("405","UnAuhorized");<br>
# exit();<br> #}<br><br> if(isflagset(5))<br> {<br> log("################################### IF FLAG SET IS 5 ##################################");<br> # set branch flag -- when someone will call this user<br>
# the INVITE will have branch flag 6 set after lookup("location")<br> setbflag(6);<br> # if you want OPTIONS natpings uncomment next<br> # setbflag(7);<br>
}<br><br><br> if (!save("location"))<br> sl_reply_error();<br><br> exit;<br>}<br><br>route[3]<br>{<br> log("################################ FUNCTION ROUTE 3 NAT DETECTION ################################");<br>
<br> force_rport();<br> if (nat_uac_test("19")) {<br> if (method=="REGISTER") {<br> fix_nated_register();<br> } else {<br> fix_nated_contact();<br>
};<br> setflag(5);<br> };<br>}<br>route[4]<br>{<br> log("################################ FUNCTION ROUTE 4 RTP PROXY ################################");<br> if (is_method("BYE")) {<br>
unforce_rtp_proxy();<br> } else if (is_method("INVITE")){<br> force_rtp_proxy();<br> #t_on_failure("2");<br> t_on_failure("3");<br>
};<br> if (isflagset(5))<br> search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes');<br> #t_on_reply("1");<br> t_on_reply("3");<br>}<br>
<br><br><br>branch_route[2] {<br> xlog("new branch at $ru\n");<br>}<br><br><br>onreply_route[2] {<br> xlog("incoming reply\n");<br>}<br><br><br>failure_route[1] {<br> if (t_was_cancelled()) {<br>
exit;<br> }<br>failure_route[3] {<br><br> log("################################ FAILURE ROUTE 3 FUNCTION ################################");<br><br> if (isbflagset(6) || isflagset(5)) {<br>
unforce_rtp_proxy();<br> }<br>}<br><br>onreply_route[3] {<br><br> log("################################ ONREPLY ROUTE 3 FUNCTION ################################");<br><br> if ((isflagset(5) || isbflagset(6)) && status=~"(183)|(2[0-9][0-9])") {<br>
force_rtp_proxy();<br> }<br> search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes');<br><br> if (isbflagset(6)) {<br> fix_nated_contact();<br> }<br>
exit;<br>}<br><br>Further more to add when I call within UAS means call between 2 registered softphones on OpenSIPs 2 way audio is heard, but when calling from DID one way audio is passing through, caller can hears the UAC which is registered on OpenSIPs but UAC can't hears the caller. Note: OpenSIPs is hosted on public IP and UAC are located on different network behind the Nat. <br>
<br>Please assist me to resolve this problem. Waiting for your reply.<br><br>-- <br>Regards,<br><br>Ahmed Munir<br><br><br>