[OpenSIPS-Users] basic load balancer setup

Joshua Nankin jnankin at gmail.com
Fri Mar 16 23:13:07 CET 2012


Perfect!  Everything's working now.

Thanks again Bogdan.

On Fri, Mar 16, 2012 at 9:24 AM, Bogdan-Andrei Iancu <bogdan at opensips.org>wrote:

> **
> Joshua,
>
> if you want use regex for src IP matching, better do:
>     if ($si !~ "^10\..*"){}
>
> And for printing, use the xlog function - it can print variables too.
>     4. log("source_ip: $si\n");
>
> Regards,
> Bogdan
>
>
> On 03/16/2012 04:02 PM, Joshua Nankin wrote:
>
> Sorry about that - I have a Gmail keyboard shortcut reflex :)
>
>  So, I'd like to do a regex based check where the PBXes all have
> addresses starting with 10.*.  I did the following:
>
>                  if (src_ip !~ "^10\..*"){
>                         if (!load_balance("1","fax","1")) {
>                                 sl_send_reply("503","Service Unavailable");
>                                 exit;
>                         }
>                 }
>                  else {
>                           # this is an outgoing call, just let the packets
> go through (somehow)
>                 }
>
>  But it looks like my regex is not working and incoming calls get a busy
> signal.  To make matters worse, I tried debugging with:
>
>  1. log(src_ip)
> 2. log("source ip: " + src_ip)
> 3. log($si)
> 4. log("source_ip: $si")
>
>  None of those works (all produce config file syntax errors except for 4
> which just prints out the actual $si characters.  Why can't I do the above?
>
>  Finally, what do I need to do in the "else" block to let the outgoing
> call packets go through?  I tried placing an outgoing call with out the
> load_balancing block, but my packets were not relayed from opensips to the
> carrier.
>
>  Thanks,
> Josh
>
> On Thu, Mar 15, 2012 at 1:34 PM, Bogdan-Andrei Iancu <bogdan at opensips.org>wrote:
>
>>  Hi Joshua,
>>
>> Please keep the list at CC - whatever we talk here, should also be to the
>> benefit of the entire opensips community ;)
>>
>> So, to detect where the call comes from, you simply check the source at
>> IP level:
>>     if (src_ip==11.22.33.44) {
>>            # call from PBXes
>>     } else {
>>            # call from carriers
>>     }
>>
>> Regards,
>> Bogdan
>>
>>
>> On 03/15/2012 07:33 PM, Joshua Nankin wrote:
>>
>> Perfect!  Thanks Bogdan, you're the man!  I was having some trouble with
>> record_route_preset because I was including the port in the IP string as
>> well (I had seen others do this in alias, so I just copied that in the
>> record_route_preset function and things still didn't work).
>>
>>  One more question: I'm trying to use the same opensips box as an
>> outbound proxy.  Now, since I automatically load balance any INVITEs, when
>> I place an outgoing call, the call is routed right back to one of my
>> Asterisk machines.  How would I tell if the request is incoming (and then
>> load balance it) or outgoing (and then relay the messages outside of the
>> network).
>>
>>  I'm sure this involves creating another route, but I'm a complete n00b
>> when it comes to opensips - I just started messing around with it this week.
>>
>>  Thanks again for your help!
>>
>> On Thu, Mar 15, 2012 at 4:40 AM, Bogdan-Andrei Iancu <bogdan at opensips.org
>> > wrote:
>>
>>>  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
>>> Capture from Asterisk: xxxxxxxxxxxxxx
>>>
>>>  Thanks,
>>> Josh
>>>
>>>  On Wed, Mar 14, 2012 at 1:02 PM, Joshua Nankin <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> 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>  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 Developerhttp://www.opensips-solutions.com
>>>
>>>
>>
>>
>> --
>> Bogdan-Andrei Iancu
>> OpenSIPS Founder and Developerhttp://www.opensips-solutions.com
>>
>>
>
>
> --
> Bogdan-Andrei Iancu
> OpenSIPS Founder and Developerhttp://www.opensips-solutions.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20120316/40e34c43/attachment-0001.htm>


More information about the Users mailing list