[OpenSIPS-Users] basic load balancer setup

Bogdan-Andrei Iancu bogdan at opensips.org
Thu Mar 15 10:40:34 CET 2012


Hi Joshua,

Ok, I see - your opensips is actually in a private network.
What you can do is to use instead of record_route() the 
record_route_preset("pub_IP") function (see  
http://www.opensips.org/html/docs/modules/1.7.x/rr.html#id250439) - this 
will make opensips to advertise in RR the public IP. Additionally set 
"alias = pub_IP" in your cfg (see 
http://www.opensips.org/Resources/DocsCoreFcn17#toc26), so that opensips 
will recognize its own pub IP in the Route hdr (in ACK)

Regards,
Bogdan

On 03/14/2012 10:54 PM, Joshua Nankin wrote:
> Do I need to specify the public IPs of my asterisk boxes in the load 
> balancing table?
>
> Here's is what my carrier told me:
>
> After looking into this issue further, it appears you are not 
> including the Record-route header for your public IP address. The 
> reason the call is failing currently is because you have listed your 
> internal IP address for us to send the call too, however since we do 
> not have access to your internal IP address, we are unable to send 
> this to you. You can see this in the 200 OK that you send to us, where 
> you start with your internal IP, and go straight to our IP.
>
> You can find a packet captures for the call here:
>
> Capture from OpenSIPS: xxxxxxxxxxxxxx<http://joshnankin.com/opensips.pcap>
> Capture from Asterisk: xxxxxxxxxxxxxx
>
> Thanks,
> Josh
>
> On Wed, Mar 14, 2012 at 1:02 PM, Joshua Nankin <jnankin at gmail.com 
> <mailto:jnankin at gmail.com>> wrote:
>
>     Yeah, I'm seeing that now.  I just did a capture and verified, the
>     200s are coming out of my Asterisk box, and OpenSIPS is relaying them
>     properly.  I'm not getting the ACK back from my carrier.  I'm going to
>     check with them and send the capture files I just generated - they use
>     IP whitelists, and this may just be a authentication/security problem.
>
>     Thanks again!
>
>     -Josh
>
>     On Wed, Mar 14, 2012 at 12:59 PM, Bogdan-Andrei Iancu
>     <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>     > Hi Joshua,
>     >
>     > It seams to be a lot of 200 OK retransmissions from Asterisk
>     because there
>     > is no ACK from the original caller side.
>     >
>     > Do you see the caller sending such ACK ? have you tried to make
>     a network
>     > capture ?
>     >
>     > Regards,
>     > Bogdan
>     >
>     >
>     >
>     > On 03/14/2012 06:27 PM, Joshua Nankin wrote:
>     >>
>     >> Hey Bogdan!
>     >>
>     >> So, it appears that the call gets to the LB and is forwarded to
>     >> Asterisk.  Here's what happens in both the LB logs and Asterisk:
>     >>
>     >> Asterisk - http://pastebin.com/
>     >> OpenSIPS - http://pastebin.com/
>     >>
>     >>
>     >> I have debug=6 on OpenSIPS, so there's quite a bit of logging
>     >> happening for a pretty short call.  It seems that there's a
>     >> retransmission problem here.  Also, I'm trying to negotiate
>     T.38, so
>     >> I'm not sure if that has something to do with this.
>     >>
>     >> Thanks,
>     >> Josh
>     >>
>     >> On Wed, Mar 14, 2012 at 7:25 AM, Bogdan-Andrei Iancu
>     >> <bogdan at opensips.org <mailto:bogdan at opensips.org>>  wrote:
>     >>>
>     >>> Hi Joshua,
>     >>>
>     >>> Have you checked (at network level) if the actual call (the
>     inbound one,
>     >>> from a client) gets to opensips LB ? and if so, if the call gets
>     >>> forwarded
>     >>> to Asterisk ?
>     >>>
>     >>> Regards,
>     >>> Bogdan
>     >>>
>     >>>
>     >>> On 03/13/2012 10:00 PM, Joshua Nankin wrote:
>     >>>>
>     >>>> Hello,
>     >>>>
>     >>>> Trying to use OpenSIPS as both a load balancer for incoming
>     calls and
>     >>>> as an outbound proxy to my carrier.  I have been unsuccessful
>     to place
>     >>>> outgoing or incoming calls, and I think I just need some help
>     with the
>     >>>> configuration.  Just for testing, I have one Asterisk box behind
>     >>>> OpenSIPS and the load balancer table on OpenSIPS looks like this:
>     >>>>
>     >>>>
>     >>>>
>     >>>>
>     +----+----------+-------------------+-----------+------------+-------------+
>     >>>> | id | group_id | dst_uri           | resources | probe_mode |
>     >>>> description
>     >>>> |
>     >>>>
>     >>>>
>     >>>>
>     +----+----------+-------------------+-----------+------------+-------------+
>     >>>> |  1 |        1 | sip:10.36.115.119 | fax=300   |          0
>     | tester
>     >>>>  |
>     >>>>
>     >>>>
>     >>>>
>     +----+----------+-------------------+-----------+------------+-------------+
>     >>>>
>     >>>>
>     >>>> The dst_ur is the internal IP of my asterisk box.  I'm using
>     this for
>     >>>> fax, so I have set the resources field to 300 channels of
>     "fax".   On
>     >>>> my asterisk box, I've added "outboundproxy=23.21.170.154", as
>     the 23.*
>     >>>> IP is the external IP of the opensips box.  Below is my simple
>     >>>> opensips.cfg that I've adapted from the load balancing
>     tutorial.  Any
>     >>>> help would be much appreciated.  Additionally, for debugging
>     purposes,
>     >>>> I've opened all UDP and TCP ports.  Still not able to connect.
>     >>>>
>     >>>>
>     >>>> debug=6
>     >>>> memlog=1
>     >>>>
>     >>>> fork=yes
>     >>>> children=2
>     >>>> log_stderror=yes
>     >>>> log_facility=LOG_LOCAL0
>     >>>>
>     >>>> disable_tcp=yes
>     >>>> disable_dns_blacklist = yes
>     >>>>
>     >>>> auto_aliases=no
>     >>>>
>     >>>> check_via=no
>     >>>> dns=off
>     >>>> rev_dns=off
>     >>>> port=5060
>     >>>>
>     >>>> mpath="/usr/lib/opensips/modules/"
>     >>>> loadmodule "maxfwd.so"
>     >>>> loadmodule "sl.so"
>     >>>> loadmodule "db_mysql.so"
>     >>>> loadmodule "tm.so"
>     >>>> loadmodule "uri.so"
>     >>>> loadmodule "rr.so"
>     >>>> loadmodule "dialog.so"
>     >>>> loadmodule "mi_fifo.so"
>     >>>> loadmodule "signaling.so"
>     >>>> loadmodule "textops.so"
>     >>>> loadmodule "load_balancer.so"
>     >>>>
>     >>>> modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
>     >>>> modparam("mi_fifo", "fifo_mode",0666)
>     >>>>
>     >>>> modparam("dialog", "db_mode", 1)
>     >>>> modparam("dialog", "db_url",
>     "mysql://root:opensips@localhost/opensips")
>     >>>>
>     >>>> modparam("rr","enable_double_rr",1)
>     >>>> modparam("rr","append_fromtag",1)
>     >>>>
>     >>>> modparam("load_balancer",
>     >>>> "db_url","mysql://root:opensips@localhost/opensips")
>     >>>>
>     >>>>
>     >>>> route{
>     >>>>        if (!mf_process_maxfwd_header("3")) {
>     >>>>                sl_send_reply("483","looping");
>     >>>>                exit;
>     >>>>        }
>     >>>>
>     >>>>
>     >>>>        if (!has_totag()) {
>     >>>>                 # initial request
>     >>>>                record_route();
>     >>>>        } else {
>     >>>>                # sequential request ->    obey Route indication
>     >>>>                loose_route();
>     >>>>                 t_relay();
>     >>>>                 exit;
>     >>>>         }
>     >>>>
>     >>>>         # handle cancel and re-transmissions
>     >>>>        if ( is_method("CANCEL") ) {
>     >>>>                if ( t_check_trans() )
>     >>>>                        t_relay();
>     >>>>                exit;
>     >>>>        }
>     >>>>
>     >>>>
>     >>>>         # from now on we have only the initial requests
>     >>>>         if (!is_method("INVITE")) {
>     >>>>                 send_reply("405","Method Not Allowed");
>     >>>>                 exit;
>     >>>>         }
>     >>>>
>     >>>>         # detect resources and do balancing
>     >>>>        load_balance("1","fax");
>     >>>>
>     >>>>         # LB function returns negative if no suitable
>     destination (for
>     >>>> requested resources) is found,
>     >>>>         # or if all destinations are full
>     >>>>         if ($retcode<0) {
>     >>>>              sl_send_reply("500","Service full");
>     >>>>              exit;
>     >>>>         }
>     >>>>
>     >>>>        xlog("Selected destination is: $du\n");
>     >>>>
>     >>>>         # send it out
>     >>>>        if (!t_relay()) {
>     >>>>                sl_reply_error();
>     >>>>        }
>     >>>> }
>     >>>>
>

-- 
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20120315/5337dbb1/attachment-0001.htm>


More information about the Users mailing list