[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