[Users] OpenSER as load balancer for several Asterisk servers

Edoardo Serra osdevel at webrainstorm.it
Tue Dec 19 17:40:12 CET 2006


Hello
         tnx for the attention

At 17.00 19/12/2006, Stefano Capitanio wrote:
>Hi,
>
>is it correct that in the second Via Header of the message from 
>Asterisk to OpenSER there is the address of the Client?
>there should be the address of Asterisk no?

I guess it is correct for outbound calls (from client to openser -> asterisk)
I captured some packets on a working setup and I see the same via 
headers: one with OpenSER address and one with Client address

>maybe this make OpenSER think that the message is coming from a NAT...
>i'm not sure, maybe i'm wrong...
>try to set:
>
>modparam("nathelper", "rtpproxy_disable", 1)

I also think it's a NAT-related issue but that modparam doesn't solve 
the problem :(

Tnx again for help

Regards

Edoardo



>regards,
>Stefano
>
>
>Edoardo Serra ha scritto:
>>At 13.51 19/12/2006, Klaus Darilion wrote:
>>>You said that the 200 contains openser's IP in the SDP? Is it put 
>>>in there by openser or already by Asterisk?
>>
>>Tnx very much for help
>>
>>It's put in there by OpenSER.
>>
>>I'm attaching the 2 SIP/SDP packets (1 from asterisk to openser and 
>>1 from openser to client)
>>
>>AAA.AAA.AAA.AAA stands for IP of Asterisk
>>OOO.OOO.OOO.OOO stands for IP of OpenSER
>>CCC.CCC.CCC.CCC stands for IP of client
>>3333333333 is the called number
>>
>>
>>No.     Time        Source                Destination
>>Protocol Info
>>     20 12.646925   AAA.AAA.AAA.AAA       OOO.OOO.OOO.OOO       SIP/SDP
>>Status: 200 OK, with session description
>>
>>Session Initiation Protocol
>>    Status-Line: SIP/2.0 200 OK
>>    Message Header
>>        Via: SIP/2.0/UDP 
>> OOO.OOO.OOO.OOO;branch=z9hG4bK5bbd.eaf4f093.0;received=OOO.OOO.OOO.OOO
>>        Via: SIP/2.0/UDP 
>> CCC.CCC.CCC.CCC:8952;branch=z9hG4bK-d87543-e15656230434101e-1--d87543-;rport=8952 
>>
>>        Record-Route: <sip:OOO.OOO.OOO.OOO;lr=on;ftag=9043ec70>
>>        From: "test"<sip:test at OOO.OOO.OOO.OOO>;tag=9043ec70
>>        To: "3333333333"<sip:3333333333 at OOO.OOO.OOO.OOO>;tag=as30a7528b
>>        Call-ID: 98684a222a2eeb7aYmVlZTUzZDRhNjMzN2Y0MTZhYmNmOTc5MzQ4OGI3ZGU.
>>        CSeq: 3 INVITE
>>        User-Agent: Asterisk
>>        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
>>        Contact: <sip:3333333333 at AAA.AAA.AAA.AAA:5060>
>>        Content-Type: application/sdp
>>        Content-Length: 291
>>    Message body
>>        Session Description Protocol
>>            Session Description Protocol Version (v): 0
>>            Owner/Creator, Session Id (o): root 20137 20138 IN IP4 
>> AAA.AAA.AAA.AAA
>>            Session Name (s): session
>>            Connection Information (c): IN IP4 AAA.AAA.AAA.AAA
>>            Time Description, active time (t): 0 0
>>            Media Description, name and address (m): audio 58508 
>> RTP/AVP 98 3 8 0 101
>>            Media Attribute (a): rtpmap:98 iLBC/8000
>>            Media Attribute (a): rtpmap:3 GSM/8000
>>            Media Attribute (a): rtpmap:8 PCMA/8000
>>            Media Attribute (a): rtpmap:0 PCMU/8000
>>            Media Attribute (a): rtpmap:101 telephone-event/8000
>>            Media Attribute (a): fmtp:101 0-16
>>            Media Attribute (a): silenceSupp:off - - - -
>>
>>No.     Time        Source                Destination
>>Protocol Info
>>     21 12.647437   OOO.OOO.OOO.OOO       CCC.CCC.CCC.CCC       SIP/SDP
>>Status: 200 OK, with session description
>>
>>Session Initiation Protocol
>>    Status-Line: SIP/2.0 200 OK
>>    Message Header
>>        Via: SIP/2.0/UDP 
>> OOO.OOO.OOO.OOO:5060;branch=z9hG4bK-d87543-e15656230434101e-1--d87543-;rport=8952 
>>
>>        Record-Route: <sip:OOO.OOO.OOO.OOO;lr=on;ftag=9043ec70>
>>        From: "test"<sip:test at OOO.OOO.OOO.OOO>;tag=9043ec70
>>        To: "3333333333"<sip:3333333333 at OOO.OOO.OOO.OOO>;tag=as30a7528b
>>        Call-ID: 98684a222a2eeb7aYmVlZTUzZDRhNjMzN2Y0MTZhYmNmOTc5MzQ4OGI3ZGU.
>>        CSeq: 3 INVITE
>>        User-Agent: Asterisk
>>        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
>>        Contact: <sip:3333333333 at AAA.AAA.AAA.AAA:5060>
>>        Content-Type: application/sdp
>>        Content-Length: 291
>>    Message body
>>        Session Description Protocol
>>            Session Description Protocol Version (v): 0
>>            Owner/Creator, Session Id (o): root 20137 20138 IN IP4 
>> OOO.OOO.OOO.OOO
>>            Session Name (s): session
>>            Connection Information (c): IN IP4 OOO.OOO.OOO.OOO
>>            Time Description, active time (t): 0 0
>>            Media Description, name and address (m): audio 58508 
>> RTP/AVP 98 3 8 0 101
>>            Media Attribute (a): rtpmap:98 iLBC/8000
>>            Media Attribute (a): rtpmap:3 GSM/8000
>>            Media Attribute (a): rtpmap:8 PCMA/8000
>>            Media Attribute (a): rtpmap:0 PCMU/8000
>>            Media Attribute (a): rtpmap:101 telephone-event/8000
>>            Media Attribute (a): fmtp:101 0-16
>>            Media Attribute (a): silenceSupp:off - - - -
>>
>>Tnx very much for help again
>>
>>Regards
>>
>>Edoardo
>>
>>
>>>regards
>>>klaus
>>>
>>>
>>>regards
>>>klaus
>>>
>>>Edoardo Serra wrote:
>>>>Hi guys,
>>>>     I'm having a problem with an OpenSER acting as registrar 
>>>> server and load balancer for many Asterisk servers.
>>>>In a few words: "users are registering on openser and, when they 
>>>>want to make a call, OpenSER proxies the request to an Asterisk 
>>>>server with the dispatcher module"
>>>>Here is the intended data flow (SIP goes through OpenSER and 
>>>>media goes directly to Asterisk)
>>>>User <-- SIP --> OpenSER <-- SIP --> Asterisk
>>>>User <-- RTP --> Asterisk
>>>>Both, OpenSER and Asterisks have public IPs
>>>>I already have a working setup of that and everything seems 
>>>>working correctly.
>>>>I'm trying to replicate that setup on another site, same 
>>>>configurations of the boxes, same versions of OpenSER and 
>>>>Asterisk, etc... but I'm having monodirectional Audio.
>>>>Having a look with tethereal I see that OpenSER, when the 
>>>>communication is answered, sends a SIP packet (200 OK) to the 
>>>>user indicating itself as media endpoint instead of the Asterisks.
>>>>  From that moment I see RTP packets flowing from the client to OpenSER
>>>>This seems really strange to me because I just copied the same 
>>>>configurations file from a working setup to the new installation.
>>>>Tnx in advance for help.
>>>>Regards
>>>>P.S.: Here is my openser.cfg
>>>>## $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
>>>>## simple quick-start config script
>>>>#
>>>># ----------- global configuration parameters ------------------------
>>>>#debug=3 # debug level (cmd line: -dddddddddd)
>>>>fork=yes
>>>>#log_stderror=no # (cmd line: -E)
>>>>check_via=no # (cmd. line: -v)
>>>>dns=no # (cmd. line: -r)
>>>>rev_dns=no # (cmd. line: -R)
>>>>#children=4
>>>>#port=5060
>>>>fifo="/tmp/ser_fifo"
>>>>#uid=nobody
>>>>#gid=nobody
>>>># ------------------ module loading ----------------------------------
>>>>loadmodule "/usr/lib/openser/modules/sl.so"
>>>>loadmodule "/usr/lib/openser/modules/tm.so"
>>>>loadmodule "/usr/lib/openser/modules/rr.so"
>>>>loadmodule "/usr/lib/openser/modules/maxfwd.so"
>>>>loadmodule "/usr/lib/openser/modules/usrloc.so"
>>>>loadmodule "/usr/lib/openser/modules/registrar.so"
>>>>loadmodule "/usr/lib/openser/modules/nathelper.so"
>>>>loadmodule "/usr/lib/openser/modules/textops.so"
>>>>loadmodule "/usr/lib/openser/modules/exec.so"
>>>>loadmodule "/usr/lib/openser/modules/uri.so"
>>>>loadmodule "/usr/lib/openser/modules/uri_db.so"
>>>>loadmodule "/usr/lib/openser/modules/dispatcher.so"
>>>># Uncomment this if you want digest authentication
>>>># mysql.so must be loaded !
>>>>loadmodule "/usr/lib/openser/modules/mysql.so"
>>>>loadmodule "/usr/lib/openser/modules/auth.so"
>>>>loadmodule "/usr/lib/openser/modules/auth_db.so"
>>>>modparam("usrloc", "db_mode", 2)
>>>>modparam("usrloc", "db_url", "mysql://xxx:xxx@xxx.xxx.xxx.xxx/openser")
>>>>modparam("usrloc", "timer_interval", 120)
>>>>modparam("auth_db", "calculate_ha1", 0)
>>>>modparam("auth_db", "db_url", "mysql://xxx:xxx@xxx.xxx.xxx.xxx/voip")
>>>>modparam("uri_db", "db_url", "mysql://xxx:xxx@xxx.xxx.xxx.xxx/openser")
>>>>modparam("rr", "enable_full_lr", 1)
>>>>modparam("registrar", "nat_flag", 6)
>>>>modparam("registrar", "max_expires", 3600)
>>>>modparam("registrar", "min_expires", 60)
>>>>modparam("registrar", "append_branches", 0)
>>>>modparam("registrar", "desc_time_order", 1)
>>>>modparam("nathelper", "natping_interval", 20) # Ping interval 20 s
>>>>modparam("nathelper", "ping_nated_only", 1) # Ping only clients behind NAT
>>>>modparam("dispatcher", "force_dst", 1)
>>>># ------------------------- request routing logic -------------------
>>>># main routing logic
>>>>route{
>>>># initial sanity checks -- messages with
>>>># max_forwards==0, or excessively long requests
>>>>if (!mf_process_maxfwd_header("10")) {
>>>>sl_send_reply("483","Too Many Hops");
>>>>exit;
>>>>};
>>>>if ( msg:len > max_len ) {
>>>>sl_send_reply("513", "Message too big");
>>>>exit;
>>>>};
>>>>if ( (method=="OPTIONS") || (method=="SUBSCRIBE") || (method=="NOTIFY") ) {
>>>>sl_send_reply("405", "Method Not Allowed");
>>>>exit;
>>>>}
>>>>if (!method=="REGISTER") {
>>>>record_route();
>>>>};
>>>>if ((src_ip==xxx.xxx.xxx.xxx) || (src_ip==xxx.xxx.xxx.xxx)) { # 
>>>>IP of Asterisks
>>>>if (!lookup("location")) {
>>>>sl_send_reply("404", "Not Found");
>>>>exit;
>>>>};
>>>># forward to current uri now; use stateful forwarding; that
>>>># works reliably even if we forward from TCP to UDP
>>>>if (!t_relay()) {
>>>>sl_reply_error();
>>>>};
>>>>exit;
>>>>};
>>>>if (nat_uac_test("3")) {
>>>>if ((method=="REGISTER") || (method=="INVITE") || (method=="OPTIONS")) {
>>>>fix_nated_contact();
>>>>force_rport();
>>>>setflag(6); # Mark as NATed
>>>>}
>>>>}
>>>># if the request is for other domain use UsrLoc
>>>># (in case, it does not work, use the following command
>>>># with proper names and addresses in it)
>>>>if (method=="REGISTER") {
>>>>if (!proxy_authorize("domain", "openser_view")) {
>>>>proxy_challenge("domain", "0");
>>>>exit;
>>>>}
>>>>if (!check_to()) {
>>>>sl_send_reply("403", "Digest username and URI username do NOT 
>>>>match! Stay away!");
>>>>exit;
>>>>}
>>>>save("location");
>>>>exit;
>>>>};
>>>>
>>>>if (method=="INVITE") {
>>>>if (!proxy_authorize("domain", "openser_view")) {
>>>>proxy_challenge("domain", "0");
>>>>exit;
>>>>}
>>>>if (!check_from()) {
>>>>sl_send_reply("403", "Digest username and URI username do NOT 
>>>>match! Stay away!");
>>>>exit;
>>>>}
>>>>}
>>>># loose-route processing
>>>>if (loose_route()) {
>>>># mark routing logic in request
>>>>append_hf("P-hint: rr-enforced\r\n");
>>>>route(1);
>>>>exit;
>>>>};
>>>>if (!uri==myself) {
>>>># mark routing logic in request
>>>>append_hf("P-hint: outbound\r\n");
>>>>route(1);
>>>>exit;
>>>>};
>>>>append_hf("P-hint: usrloc applied\r\n");
>>>>route(1);
>>>>}
>>>>route[1]
>>>>{
>>>># ! Nathelper
>>>>if (uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)" && 
>>>>!search("^Route:")){
>>>>sl_send_reply("479", "We don't forward to private IP addresses");
>>>>exit;
>>>>};
>>>># NAT processing of replies; apply to all transactions (for example,
>>>># re-INVITEs from public to private UA are hard to identify as
>>>># NATed at the moment of request processing); look at replies
>>>>t_on_reply("1");
>>>># send it out now; use stateful forwarding as it works reliably
>>>># even for UDP2TCP
>>>>if ((src_ip!=xxx.xxx.xxx.xxx) && (src_ip!=xxx.xxx.xxx.xxx)) { # 
>>>>IP of Asterisks
>>>>ds_select_dst("2", "0");
>>>>}
>>>>if (!t_relay()) {
>>>>sl_reply_error();
>>>>};
>>>>}
>>>># ! Nathelper
>>>>onreply_route[1] {
>>>># NATed transaction ?
>>>>if (isflagset(6) && status =~ "(183)|2[0-9][0-9]") {
>>>>fix_nated_contact();
>>>># otherwise, is it a transaction behind a NAT and we did not
>>>># know at time of request processing ? (RFC1918 contacts)
>>>>} else if (nat_uac_test("1")) {
>>>>fix_nated_contact();
>>>>};
>>>>}
>>>>
>>>>_______________________________________________
>>>>Users mailing list
>>>>Users at openser.org
>>>>http://openser.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>>--
>>>Klaus Darilion
>>>nic.at
>>
>>
>>_______________________________________________
>>Users mailing list
>>Users at openser.org
>>http://openser.org/cgi-bin/mailman/listinfo/users





More information about the Users mailing list