[OpenSIPS-Users] basic load balancer setup
Bogdan-Andrei Iancu
bogdan at opensips.org
Fri Mar 16 15:24:28 CET 2012
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 <mailto: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 <mailto: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 <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
>>
>>
>
>
> --
> Bogdan-Andrei Iancu
> OpenSIPS Founder and Developer
> http://www.opensips-solutions.com
>
>
--
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/20120316/65bb6348/attachment-0001.htm>
More information about the Users
mailing list