Re: Asteriak load balance

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: Asteriak load balance

Iñaki Baz Castillo
El Jueves, 22 de Enero de 2009, Gonzalo Gonzalez escribió:
> What is the best module to use for load balance with 5 asterisk servers?
>
> user ---->> Opensips --->> Asterisk --->> PSTN

Try dispacher module.

--
Iñaki Baz Castillo

_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Asteriak load balance

Gonzalo Gonzalez
Thanks.....

Could somebody share a simple config file using dispatcher module.

Thanks

Gonzo

--- On Thu, 1/22/09, Iñaki Baz Castillo <[hidden email]> wrote:
From: Iñaki Baz Castillo <[hidden email]>
Subject: Re: [OpenSIPS-Users] Asteriak load balance
To: [hidden email]
Date: Thursday, January 22, 2009, 10:24 PM

El Jueves, 22 de Enero de 2009, Gonzalo Gonzalez escribió:
> What is the best module to use for load balance with 5 asterisk servers?
>
> user ---->> Opensips --->> Asterisk --->> PSTN

Try dispacher module.

--
Iñaki Baz Castillo


_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Asteriak load balance

Robin Rodriguez
Gonzalo Gonzalez wrote:
Thanks.....

Could somebody share a simple config file using dispatcher module.

Thanks

Gonzo



http://www.dialogic.com/products/docs/appnotes/10833_HMP_OpenSER_SIP_an.pdf is the most concise example i've ever seen on using dispatcher, should be enough to get you going. A zip file is linked in the pdf that with a sample config

--
Robin D. Rodriguez
Systems Engineer
Ifbyphone, Inc.
Phone: (866) 250-1663
Fax: (847) 676-6553
[hidden email]
http://www.ifbyphone.com

 

 


_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Asteriak load balance

Gonzalo Gonzalez
In reply to this post by Iñaki Baz Castillo
Thanks; I have made some progress on my config, but now I have an issue sending the calls to the gateways. I took a config file from "Building a telephony system with openser" from Flavio E. Goncalves an adapted it to my needs, but when I try to pass a call to PSTN I receive error 404, not found.

This is the debug of the call:

U 192.168.1.101:4142 -> 192.168.1.102:5060
INVITE sip:13057286338@192.168.1.102 SIP/2.0.
Via: SIP/2.0/UDP 192.168.1.101:4142;branch=z9hG4bK-d8754z-d32c024c26331414-1---d8754z-;rport.
Max-Forwards: 70.
Contact: <sip:7862702200@192.168.1.101:4142>.
To: "13057286338"<sip:13057286338@192.168.1.102>.
From: "Gonzo"<sip:7862702200@192.168.1.102>;tag=b7384713.
Call-ID: YmFmZDgxYmI2YTVmMDJjZWRkZjM4OGI3YzhiMjljYTg..
CSeq: 1 INVITE.
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO.
Content-Type: application/sdp.
User-Agent: X-Lite release 1100l stamp 47546.
Content-Length: 474.
.
v=0.
o=- 0 2 IN IP4 192.168.1.101.
s=CounterPath X-Lite 3.0.
c=IN IP4 192.168.1.101.
t=0 0.
m=audio 28830 RTP/AVP 107 119 100 106 0 105 98 8 3 101.
a=alt:1 2 : MlZdUnJz Ygmz8XzM 192.168.1.101 28830.
a=alt:2 1 : tM0AgMUl 5/M2r2zq 5.247.86.54 28830.
a=fmtp:101 0-15.
a=rtpmap:107 BV32/16000.
a=rtpmap:119 BV32-FEC/16000.
a=rtpmap:100 SPEEX/16000.
a=rtpmap:106 SPEEX-FEC/16000.
a=rtpmap:105 SPEEX-FEC/8000.
a=rtpmap:98 iLBC/8000.
a=rtpmap:101 telephone-event/8000.
a=sendrecv.


U 192.168.1.102:5060 -> 192.168.1.101:4142
SIP/2.0 404 Not Found.
Via: SIP/2.0/UDP 192.168.1.101:4142;branch=z9hG4bK-d8754z-d32c024c26331414-1---d8754z-;rport=4142.
To: "13057727932"<sip:13057286338@192.168.1.102>;tag=c97b4d1cb1f3d0da549e06a8d482ef63.3872.
From: "Gonzo"<sip:7862702200@192.168.1.102>;tag=b7384713.
Call-ID: YmFmZDgxYmI2YTVmMDJjZWRkZjM4OGI3YzhiMjljYTg..
CSeq: 1 INVITE.
Server: OpenSIPS (1.4.4-notls (i386/linux)).
Content-Length: 0.
.


U 192.168.1.101:4142 -> 192.168.1.102:5060
ACK sip:13057286338@192.168.1.102 SIP/2.0.
Via: SIP/2.0/UDP 192.168.1.101:4142;branch=z9hG4bK-d8754z-d32c024c26331414-1---d8754z-;rport.
To: "13057286338"<sip:13057286338@192.168.1.102>;tag=c97b4d1cb1f3d0da549e06a8d482ef63.3872.
From: "Gonzo"<sip:7862702200@192.168.1.102>;tag=b7384713.
Call-ID: YmFmZDgxYmI2YTVmMDJjZWRkZjM4OGI3YzhiMjljYTg..
CSeq: 1 ACK.
Content-Length: 0.


An this is my config file:

# ----------- global configuration parameters ------------------------

debug=3            # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no    # (cmd line: -E)
children=4
port=5060
disable_tcp=yes

# ------------------ module loading ----------------------------------
#set module path
mpath="/usr/local/lib/opensips/modules/"

loadmodule "db_mysql.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "uri.so"
loadmodule "uri_db.so"
loadmodule "domain.so"
loadmodule "permissions.so"
loadmodule "group.so"
loadmodule "mi_fifo.so"
loadmodule "dispatcher.so"

# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "auth.so"
loadmodule "auth_db.so"

# ----------------- setting module-specific parameters ---------------

modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
modparam("usrloc", "db_mode", 2)
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("rr", "enable_full_lr", 1)
modparam("auth_db|permissions|uri_db|usrloc","db_url","mysql://opensips:opensipsrw@localhost/opensips")
modparam("permissions", "db_mode", 1)
modparam("permissions", "trusted_table", "trusted")
modparam("domain", "db_mode", 1)   # Use caching


# ------ dispatcher params --------
modparam("dispatcher", "list_file", "/usr/local/etc/opensips/dispatcher.list")
modparam("dispatcher", "force_dst", 1)


# -------------------------  request routing logic -------------------

# main routing logic

route{
    #
    # -- 1 -- Request Validation
    #
    if (!mf_process_maxfwd_header("10")) {
        sl_send_reply("483","Too Many Hops");
        exit;
    };

    if (msg:len >=  2048 ) {
        sl_send_reply("513", "Message too big");
        exit;
    };

    #
    # -- 2 -- Routing Preprocessing
    #
    ## Record-route all except Register
    if (!method=="REGISTER") record_route();

    ##Loose_route packets
    if (loose_route()) {
        # mark routing logic in request
        append_hf("P-hint: rr-enforced\r\n");
        route(1);
    };

    #CANCEL processing
    if (is_method("CANCEL")) {
        if (t_check_trans()) t_relay();
        exit;
    };

    t_check_trans();
   
    #
    # -- 3 -- Determine Request Target
    #
    if (method=="REGISTER") {
        route(2);
    } else {
        route(3);
    };

}


route[1] {
    #
    # -- 4 -- Forward request to target
    #
    ## Forward statefully
    if (!t_relay()) {
        sl_reply_error();
    };
    exit;
}

route[2] {
    ## Register request handler
    if (is_uri_host_local()) {
        if (!www_authorize("", "subscriber")) {
            www_challenge("", "1");
            exit;
        };

        if (!check_to()) {
            sl_send_reply("403", "Forbidden");
            exit;
        };

        save("location");
        exit;
    } else if {
        sl_send_reply("403", "Forbidden");
    };
}

route[3] {
       ## INVITE request handler
    if (is_from_local()){
        # From an internal domain -> check the credentials and the FROM
        if(!allow_trusted()){
            if (!proxy_authorize("","subscriber")) {
                proxy_challenge("","1");
                exit;
            } else if (!check_from()) {
                sl_send_reply("403", "Forbidden, use From=ID");
                exit;
            };
        } else {
            log("Request bypassed the auth.using allow_trusted");
        };
       
        consume_credentials();
       
        #Verify aliases, if found replace R-URI.
        lookup("aliases");
       
        if (is_uri_host_local()) {
            # -- Inbound to Inbound
            route(10);
        } else {
            # -- Inbound to outbound
            route(11);
        };

    } else {
        #From an external domain ->do not check credentials
        #Verify aliases, if found replace R-URI.
        lookup("aliases");
        if (is_uri_host_local()) {
            #-- Outbound to inbound
            route(12);
        } else {
            # -- Outbound to outbound
            route(13);
        };
    };
}

route[4] {
    # routing to the public network
    ds_select_dst("1", "0");
         record_route();
         t_relay();
}

route[10] {
    #from an internal domain -> inbound
    #Native SIP destinations are handled using the location table
    #Gateway destinations are handled by regular expressions
    append_hf("P-hint: inbound->inbound \r\n");
   
    if (uri=~"^sip:[2-9][0-9]{6}@") {
        if (is_user_in("credentials","local")) {
            route(4);
            exit;
        } else {
            sl_send_reply("403", "No permissions for local calls");
            exit;
        };
    };

    if (uri=~"^sip:1[2-9][1-9]{9}@") {
        if (is_user_in("credentials","ld")) {
            route(4);
            exit;
        } else {
            sl_send_reply("403", "No permissions for long distance");
            exit;
        };
    };
   
    if (uri=~"^sip:011[0-9]*@") {
        if (is_user_in("credentials","int")) {
            route(4);
            exit;
        } else {
            sl_send_reply("403", "No permissions for international calls");
        };
    };

    if (!lookup("location")) {
        sl_send_reply("404", "Not Found");
        exit;
    };
    route(1);
}

route[11] {
    # from an internal domain -> outbound
    # Simply route the call outbound using DNS search
    append_hf("P-hint: inbound->outbound \r\n");
    route(1);
}

route[12] {
    # From an external domain -> inbound
    # Verify aliases, if found replace R-URI.
    lookup("aliases");
    if (!lookup("location")) {
        sl_send_reply("404", "Not Found");
        exit;
    };
    route(1);
}

route[13] {
    #From an external domain outbound
    #we are not accepting these calls
    append_hf("P-hint: outbound->inbound \r\n");
    sl_send_reply("403", "Forbidden");
    exit;
}

Any Idea why calls are getting rejected?


--- On Fri, 1/23/09, Robin Rodriguez <[hidden email]> wrote:
From: Robin Rodriguez <[hidden email]>
Subject: Re: [OpenSIPS-Users] Asteriak load balance
To: [hidden email]
Cc: [hidden email]
Date: Friday, January 23, 2009, 4:05 PM

Gonzalo Gonzalez wrote:
Thanks.....

Could somebody share a simple config file using dispatcher module.

Thanks

Gonzo



http://www.dialogic.com/products/docs/appnotes/10833_HMP_OpenSER_SIP_an.pdf is the most concise example i've ever seen on using dispatcher, should be enough to get you going. A zip file is linked in the pdf that with a sample config

--
Robin D. Rodriguez
Systems Engineer
Ifbyphone, Inc.
Phone: (866) 250-1663
Fax: (847) 676-6553
[hidden email]
http://www.ifbyphone.com

 

 



_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users