[OpenSIPS-Users] basic load balancer setup
Joshua Nankin
jnankin at gmail.com
Fri Mar 16 15:02:42 CET 2012
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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20120316/b0132638/attachment-0001.htm>
More information about the Users
mailing list