Reposting the setup part as was not visible clearly in the previous mail.
My setup is like : ---------> Opensips Proxy 1 ----> UAS 1 UAC -----> Load Balancer --------> Opensips Proxy 2 -----> UAS 2 Regards Mayur On Mon, Jan 8, 2018 at 9:16 PM, Mayur Koshal <mayurkos...@gmail.com> wrote: > Hi Everyone, > > > > I have configured and build opensips as a Load Balancer but am not > able to make it work. > > Not able to figure out where the problem is ? > > Request your help in resolving the issue .. > > > > My setup is like : > > > ---------> > Opensips Proxy 1 ----> UAS 1 > > UAC -----> Load Balancer > --------> Opensips > Proxy 2 -----> UAS 2 > > > > where UAC = 192.168.100.18 > Load Balancer = 192.168.100.18:5060 > OPensips Proxy 1 = 192.168.100.194:5060 > Opensips Proxy 2 = 192.168.100.187:5060 > sipp UAS 1 = 192.168.100.194:5080 > sipp UAS 2 = 192.168.100.187:5080 > > > > I use the below sipp command for > > Sipp UAC Command : ./sipp -sn uac -rsa 192.168.100.18:5060 > 192.168.100.194:5080 > Sipp UAS1 Command : ./sipp -sn uas > > When I bypass the load balancer and use sipp to test opensips proxy it > works fine. > > When I run the Load Balancer I can see in the wireshark logs as: ICMP > 590 Destination unreachable (Port unreachable). > > In the opensips logs it goes to the failure route and displays message > Failed trunk 192.168.100.194/<null> detected. > > > > > The load distribution table I am using is as below : > > mysql> select * from load_balancer; > +----+----------+---------------------+-----------+------------+-------------+ > | id | group_id | dst_uri | resources | probe_mode | description | > +----+----------+---------------------+-----------+------------+-------------+ > | 1 | 1 | sip:192.168.100.194 | sip=64 | 0 | Server1 | > | 2 | 1 | sip:192.168.100.187 | sip=64 | 0 | Server2 | > +----+----------+---------------------+-----------+------------+-------------+ > 2 rows in set (0.00 sec) > > > The load balancer script, Proxy script, Load balancer logs are below. > > > Load Balancer Script : > > ------------------------ > debug=3 > log_stderror=no > log_facility=LOG_LOCAL1 > > fork=yes > children=4 > > /* uncomment the following lines to enable debugging */ > #debug=6 > #fork=no > #log_stderror=yes > > /* uncomment the next line to enable the auto temporary blacklisting of > not available destinations (default disabled) */ > #disable_dns_blacklist=no > > /* uncomment the next line to enable IPv6 lookup after IPv4 dns > lookup failures (default disabled) */ > #dns_try_ipv6=yes > > /* comment the next line to enable the auto discovery of local aliases > based on revers DNS on IPs */ > auto_aliases=no > > > listen=udp:192.168.100.18:5060 # CUSTOMIZE ME > > disable_tcp=no > listen=tcp:192.168.100.18:5060 # CUSTOMIZE ME > > disable_tls=yes > > > > > ####### Modules Section ######## > > #set module path > mpath="/usr/local/opensips_proxy/lib64/opensips/modules/" > > #### SIGNALING module > loadmodule "signaling.so" > > #### StateLess module > loadmodule "sl.so" > > #### Transaction Module > loadmodule "tm.so" > modparam("tm", "fr_timer", 5) > modparam("tm", "fr_inv_timer", 30) > modparam("tm", "restart_fr_on_each_reply", 0) > modparam("tm", "onreply_avp_mode", 1) > > #### Record Route Module > loadmodule "rr.so" > /* do not append from tag to the RR (no need for this script) */ > modparam("rr", "append_fromtag", 0) > > #### MAX ForWarD module > loadmodule "maxfwd.so" > > #### SIP MSG OPerationS module > loadmodule "sipmsgops.so" > > #### FIFO Management Interface > loadmodule "mi_fifo.so" > modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo") > modparam("mi_fifo", "fifo_mode", 0666) > > #### URI module > loadmodule "uri.so" > modparam("uri", "use_uri_table", 0) > > #### MYSQL module > loadmodule "db_mysql.so" > > #### AVPOPS module > loadmodule "avpops.so" > > #### ACCounting module > loadmodule "acc.so" > /* what special events should be accounted ? */ > modparam("acc", "early_media", 0) > modparam("acc", "report_cancels", 0) > /* by default we do not adjust the direct of the sequential requests. > if you enable this parameter, be sure the enable "append_fromtag" > in "rr" module */ > modparam("acc", "detect_direction", 0) > modparam("acc", "failed_transaction_flag", "ACC_FAILED") > /* account triggers (flags) */ > modparam("acc", "log_flag", "ACC_DO") > modparam("acc", "log_missed_flag", "ACC_MISSED") > > > #### DIALOG module > loadmodule "dialog.so" > modparam("dialog", "dlg_match_mode", 1) > modparam("dialog", "default_timeout", 21600) # 6 hours timeout > modparam("dialog", "db_mode", 2) > modparam("dialog", "db_url", > "mysql://opensips:stack@localhost/opensips") # CUSTOMIZE ME > > > #### LOAD BALANCER module > loadmodule "load_balancer.so" > modparam("load_balancer", "db_url", > "mysql://opensips:stack@localhost/opensips") # CUSTOMIZE ME > modparam("load_balancer", "probing_method", "OPTIONS") > > modparam("load_balancer", "probing_interval", 30) > > > ####### Routing Logic ######## > > > # main request routing logic > > route{ > > if (!mf_process_maxfwd_header("10")) { > sl_send_reply("483","Too Many Hops"); > exit; > } > > > xlog("Inside main route loop LoadBalance\n"); > > if (has_totag()) { > # sequential request withing a dialog should > # take the path determined by record-routing > if (loose_route()) { > xlog("Inside loose_route loop LoadBalance\n"); > # validate the sequential request against dialog > if ( $DLG_status!=NULL && !validate_dialog() ) { > xlog("In-Dialog $rm from $si (callid=$ci) is not valid according to > dialog\n"); > ## exit; > } > if (is_method("BYE")) { > setflag(ACC_DO); # do accounting ... > setflag(ACC_FAILED); # ... even if the transaction fails > } else if (is_method("INVITE")) { > # even if in most of the cases is useless, do RR for > # re-INVITEs alos, as some buggy clients do change route set > # during the dialog. > xlog("Inside else if is_method INVITE loop > LoadBalance\n"); > record_route(); > } > > # route it out to whatever destination was set by loose_route() > # in $du (destination URI). > route(RELAY); > } else { > 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 > exit; > } > } > sl_send_reply("404","Not here"); > } > exit; > } > > #### INITIAL REQUESTS > > # CANCEL processing > if (is_method("CANCEL")) { > if (t_check_trans()) > t_relay(); > exit; > } else if (!is_method("INVITE")) { > send_reply("405","Method Not Allowed"); > exit; > } > > if ($rU==NULL) { > # request with no Username in RURI > sl_send_reply("484","Address Incomplete"); > exit; > } > > t_check_trans(); > > # preloaded route checking > if (loose_route()) { > xlog("L_ERR", > "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); > if (!is_method("ACK")) > sl_send_reply("403","Preload Route denied"); > exit; > } > > # record routing > record_route(); > > setflag(ACC_DO); # do accounting > > if ( !load_balance("1","sip")) { > > xlog("Inside load_balance loop LoadBalance\n"); > send_reply("500","No Destination available"); > exit; > } > > > t_on_failure("GW_FAILOVER"); > > route(RELAY); > } > > > route[RELAY] { > if (!t_relay()) { > sl_reply_error(); > }; > exit; > } > > > failure_route[GW_FAILOVER] { > xlog("Inside failure_route GW_FAILOVER \n"); > if (t_was_cancelled()) { > exit; > } > > # failure detection with redirect to next available trunk > if (t_check_status("(408)|([56][0-9][0-9])")) { > xlog("Failed trunk $rd/$du detected \n"); > > if ( load_balance("1","sip") ) { > t_on_failure("GW_FAILOVER"); > t_relay(); > exit; > } > send_reply("500","All GW are down"); > } > } > > > local_route { > if (is_method("BYE") && $DLG_dir=="UPSTREAM") { > acc_log_request("200 Dialog Timeout"); > } > } > > > > ******************************************* > Opensips Logs : > > > 8 15:14:58 stack-LB /usr/local/opensips_proxy/sbin/opensips[28824]: > Inside main route loop LoadBalance > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28826]: Inside main route loop > LoadBalance > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28824]: Inside main route loop > LoadBalance > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28826]: Inside main route loop > LoadBalance > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Inside failure_route > GW_FAILOVER > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Failed trunk > 192.168.100.194/<null> detected > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Inside failure_route > GW_FAILOVER > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Failed trunk > 192.168.100.194/<null> detected > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Inside failure_route > GW_FAILOVER > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Failed trunk > 192.168.100.194/<null> detected > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Inside failure_route > GW_FAILOVER > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Failed trunk > 192.168.100.194/<null> detected > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Inside failure_route > GW_FAILOVER > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28823]: Failed trunk > 192.168.100.194/<null> detected > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28825]: Inside main route loop > LoadBalance > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28825]: message repeated 5 > times: [ Inside main route loop LoadBalance] > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28826]: Inside failure_route > GW_FAILOVER > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28826]: Failed trunk > 192.168.100.194/<null> detected > Jan 8 15:14:59 stack-LB > /usr/local/opensips_proxy/sbin/opensips[28826]: Inside failure_route > GW_FAILOVER > ************************************************************************************************************** > > Proxy Script : > > -------------- > debug=3 > log_stderror=no > log_facility=LOG_LOCAL1 > > fork=yes > children=32 > > /* uncomment the following lines to enable debugging */ > #debug=6 > #fork=no > #log_stderror=yes > > /* uncomment the next line to enable the auto temporary blacklisting of > not available destinations (default disabled) */ > #disable_dns_blacklist=no > > /* uncomment the next line to enable IPv6 lookup after IPv4 dns > lookup failures (default disabled) */ > #dns_try_ipv6=yes > > /* comment the next line to enable the auto discovery of local aliases > based on revers DNS on IPs */ > auto_aliases=no > > > > > > listen=udp:192.168.100.187:5060 # CUSTOMIZE ME > > disable_tcp=no > > > listen=tcp:192.168.100.187:5060 # CUSTOMIZE ME > > disable_tls=yes > > > ####### Modules Section ######## > > #set module path > mpath="/usr/local/opensips_proxy/lib64/opensips/modules/" > > #### SIGNALING module > loadmodule "signaling.so" > > #### StateLess module > loadmodule "sl.so" > > #### Transaction Module > loadmodule "tm.so" > modparam("tm", "fr_timer", 5) > modparam("tm", "fr_inv_timer", 30) > modparam("tm", "restart_fr_on_each_reply", 0) > modparam("tm", "onreply_avp_mode", 1) > > #### Record Route Module > loadmodule "rr.so" > /* do not append from tag to the RR (no need for this script) */ > modparam("rr", "append_fromtag", 0) > > #### MAX ForWarD module > loadmodule "maxfwd.so" > > #### SIP MSG OPerationS module > loadmodule "sipmsgops.so" > > #### FIFO Management Interface > loadmodule "mi_fifo.so" > modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo") > modparam("mi_fifo", "fifo_mode", 0666) > > > #### URI module > loadmodule "uri.so" > modparam("uri", "use_uri_table", 0) > modparam("uri", "db_url", > "mysql://opensips:stack@localhost/opensips") # CUSTOMIZE ME > > > > > #### MYSQL module > loadmodule "db_mysql.so" > > #### USeR LOCation module > loadmodule "usrloc.so" > modparam("usrloc", "nat_bflag", 10) > modparam("usrloc", "db_mode", 2) > modparam("usrloc", "db_url", > "mysql://opensips:stack@localhost/opensips") # CUSTOMIZE ME > > > #### REGISTRAR module > loadmodule "registrar.so" > modparam("registrar", "tcp_persistent_flag", 7) > > /* uncomment the next line not to allow more than 10 contacts per AOR */ > #modparam("registrar", "max_contacts", 10) > > #### ACCounting module > loadmodule "acc.so" > /* what special events should be accounted ? */ > modparam("acc", "early_media", 0) > modparam("acc", "report_cancels", 0) > /* by default we do not adjust the direct of the sequential requests. > if you enable this parameter, be sure the enable "append_fromtag" > in "rr" module */ > modparam("acc", "detect_direction", 0) > modparam("acc", "failed_transaction_flag", 3) > /* account triggers (flags) */ > modparam("acc", "db_flag", 1) > modparam("acc", "db_missed_flag", 2) > modparam("acc", "db_url", > "mysql://opensips:stack@localhost/opensips") # CUSTOMIZE ME > > > #### AUTHentication modules > loadmodule "auth.so" > loadmodule "auth_db.so" > modparam("auth_db", "calculate_ha1", yes) > modparam("auth_db", "password_column", "password") > modparam("auth_db", "db_url", > "mysql://opensips:stack@localhost/opensips") # CUSTOMIZE ME > modparam("auth_db", "load_credentials", "") > > > > > > > > ####### Routing Logic ######## > > # main request routing logic > > route{ > > if (!mf_process_maxfwd_header("10")) { > sl_send_reply("483","Too Many Hops"); > exit; > } > > 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 > } else if (is_method("INVITE")) { > # even if in most of the cases is useless, do RR for > # re-INVITEs alos, as some buggy clients do change route set > # during the dialog. > record_route(); > } > > > # route it out to whatever destination was set by loose_route() > # in $du (destination URI). > route(1); > } else { > 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 > exit; > } > } > sl_send_reply("404","Not here"); > } > exit; > } > > # CANCEL processing > if (is_method("CANCEL")) > { > if (t_check_trans()) > t_relay(); > exit; > } > > t_check_trans(); > > #if ( !(is_method("REGISTER") ) ) { > # if (from_uri==myself) > # { > > # authenticate if from local subscriber > # authenticate all initial non-REGISTER request that pretend to be > # generated by local subscriber (domain from FROM URI is local) > # if (!proxy_authorize("", "subscriber")) { > # proxy_challenge("", "0"); > # exit; > # } > # if (!db_check_from()) { > # sl_send_reply("403","Forbidden auth ID"); > # exit; > # } > # consume_credentials(); > # caller authenticated > # } else { > # if caller is not local, then called number must be local > # if (!uri==myself) { > # send_reply("403","Rely forbidden"); > # exit; > # } > # } > > #} > > # preloaded route checking > if (loose_route()) { > xlog("L_ERR", > "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); > if (!is_method("ACK")) > sl_send_reply("403","Preload Route denied"); > exit; > } > > # 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")) > { > sl_send_reply("503", "Service Unavailable"); > exit; > } > > if (is_method("REGISTER")) > { > # authenticate the REGISTER requests > # if (!www_authorize("", "subscriber")) > # { > # www_challenge("", "0"); > # exit; > # } > # > # if (!db_check_to()) > # { > # sl_send_reply("403","Forbidden auth ID"); > # exit; > # } > # > # if ( proto==TCP || 0 ) setflag(7); > # > if (!save("location")) > sl_reply_error(); > > exit; > } > > if ($rU==NULL) { > # request with no Username in RURI > sl_send_reply("484","Address Incomplete"); > exit; > } > > > > > > # do lookup with method filtering > if (!lookup("location","m")) { > if (!db_does_uri_exist()) { > send_reply("420","Bad Extension"); > exit; > } > t_newtran(); > t_reply("404", "Not Found"); > exit; > } > > > # when routing via usrloc, log the missed calls also > setflag(2); > route(1); > } > > > route[1] { > # for INVITEs enable some additional helper routes > if (is_method("INVITE")) { > > t_on_branch("2"); > t_on_reply("2"); > t_on_failure("1"); > } > > > if (!t_relay()) { > send_reply("500","Internal Error"); > }; > exit; > } > > > > > branch_route[2] { > xlog("new branch at $ru\n"); > } > > > onreply_route[2] { > xlog("incoming reply\n"); > } > > > failure_route[1] { > if (t_was_cancelled()) { > exit; > } > > # uncomment the following lines if you want to block client > # redirect based on 3xx replies. > ##if (t_check_status("3[0-9][0-9]")) { > ##t_reply("404","Not found"); > ## exit; > ##} > > } > ---------------------------------------------------------------- > > root@stack-LB:/usr/local/opensips_proxy/sbin# ./opensipsctl fifo lb_list > Destination:: sip:192.168.100.187:5060 id=5 group=1 enabled=no auto-re=on > Resource:: sip max=32 load=0 > root@stack-LB:/usr/local/opensips_proxy/sbin# > root@stack-LB:/usr/local/opensips_proxy/sbin# ./opensipsctl fifo lb_list > Destination:: sip:192.168.100.194:5060 id=7 group=1 enabled=yes auto-re=on > Resource:: sip max=64 load=0 > Destination:: sip:192.168.100.187:5060 id=6 group=1 enabled=yes auto-re=on > Resource:: sip max=64 load=0 > root@stack-LB:/usr/local/opensips_proxy/sbin# > > ------------------------------------------------------- > > > > > > > > Regards > Mayur _______________________________________________ Users mailing list Users@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users