[Serusers] ACK message Via field branch=0 problem

ks lf ksabc at lycos.com
Sat Jul 17 02:09:03 CEST 2004


Use SER 0.8.12 stable release, enabled nathelper+rtpproxy for NAT traversal, forward 1(xxx)xxx-xxxx to SIp termiantion gateway, when the call was connected, PSTN gateway send 200 OK back, sip client ( behind NAT ) response with ACK ( which has branch value in Via head ), but when SER forward the ACK back to PSTN gateway, in Via header it includes branch=0, PSTN gateway refuse this ACk because it think the branch id is invalid, so call was dropped after 30- 60 seconds, what's wrong with that? I really appreciate if you met such problems before, thanks, and have a nice day.

Here is captured message between pstn gateway and ser:

     SIP MESSAGE 4        65.22.14.3:42326(1) -> 182.156.33.10:5060(2)
     UDP Frame 13      10/Jul/04 13:29:33.6715 TimeFromPreviousSipFrame=3.4065 TimeFromStart=6.3374
SIP/2.0 200 OK
Call-ID: 3164823746 at 192.168.0.102
From: <sip:2103334444 at 182.156.33.10;user=phone>;tag=1842950071
To: <sip:021445333321 at 182.156.33.10;user=phone>;tag=17810
Content-Length: 215
Content-Type: application/sdp
CSeq: 1 INVITE
Via: SIP/2.0/UDP 182.156.33.10;branch=z9hG4bK2681.4c495f05.0,SIP/2.0/UDP 192.168.0.102:5060;rport=64069;received=65.33.22.6
Contact: sip:19727925475 at 65.22.14.3:5060
Record-Route: <sip:021445333321 at 182.156.33.10;ftag=1842950071;lr=on> 


     SIP MESSAGE 5        182.156.33.10:5060(2) -> 65.22.14.3:42326(1)
     UDP Frame 23      10/Jul/04 13:29:33.7641 TimeFromPreviousSipFrame=0.0926 TimeFromStart=6.4300
ACK sip:19727925475 at 65.22.14.3:42326 SIP/2.0
Max-Forwards: 10
Record-Route: <sip:021445333321 at 182.156.33.10;ftag=1842950071;lr=on>
Via: SIP/2.0/UDP 182.156.33.10;branch=0
Via: SIP/2.0/UDP 192.168.0.102:5060;rport=64069;received=65.33.22.6
From:  <sip:2103334444 at 182.156.33.10;user=phone>;tag=1842950071
To:  <sip:021445333321 at 182.156.33.10;user=phone>;tag=17810
Call-ID: 3164823746 at 192.168.0.102
CSeq: 1 ACK
User-Agent: Cisco ATA  v2.15 ata18x (020927a)
Content-Length: 0 

Here is the configuration file:

debug=0
fork=yes
log_stderror=yes
check_via=no    # (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)
port=5060
children=8
listen=182.156.33.10
fifo="/tmp/ser_fifo"
loadmodule "/usr/lib/ser/modules/nathelper.so"
loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so"
loadmodule "/usr/lib/ser/modules/tm.so"
loadmodule "/usr/lib/ser/modules/rr.so"
loadmodule "/usr/lib/ser/modules/maxfwd.so"
loadmodule "/usr/lib/ser/modules/usrloc.so"
loadmodule "/usr/lib/ser/modules/registrar.so"
loadmodule "/usr/lib/ser/modules/textops.so"
loadmodule "/usr/lib/ser/modules/uri.so"
loadmodule "/usr/lib/ser/modules/auth.so"
loadmodule "/usr/lib/ser/modules/auth_radius.so"
loadmodule "/usr/lib/ser/modules/acc.so"

modparam("usrloc", "db_mode",   2)
modparam("usrloc", "db_mode", 2)
modparam("rr", "enable_full_lr", 1)
modparam("auth_radius", "radius_config", "/etc/radiusclient/radiusclient.conf")
modparam("auth_radius", "service_type", 15)
modparam("acc", "service_type", 15)
modparam("acc", "radius_config", "/etc/radiusclient/radiusclient.conf")
modparam("acc", "log_level", 2)
modparam("acc", "radius_flag", 1)
modparam("acc", "radius_missed_flag", 9)
modparam("nathelper", "natping_interval", 10)
route{
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                break;
        };
        if ( msg:len > max_len ) {
                sl_send_reply("513", "Message too big");
                break;
        };

        setflag(1); /* Radius Accouting */

        loose_route();
        record_route();

        if (search("@192.168.*") || search("@10.*") || search("@172.16.*")) {
                setflag(2);
                force_rport();
                fix_nated_contact();
        };

        /* For Radius Accounting */
        if (method=="INVITE") {
                log(1, "INVITE: Radius Accounting\n");
                setflag(1); /* Radius Accouting */

        if (isflagset(2)) {
               force_rtp_proxy();
        };

        t_on_reply("1");
        };

       if (method=="MESSAGE") {
                log(1, "MESSAGE: Radius Accounting\n");
                setflag(1); /* Radius Accouting */
        };

        if (method=="BYE" || method=="CANCEL") {
                log (1, "BYE or CANCEL: Radius Accounting\n");
                setflag(1); /* Radius Accouting */
        };


        if (uri==myself) {
                if (method=="REGISTER") {
if (!radius_www_authorize("")) {
    log(1, "REGISTER: Radius Challenging User\n");
    www_challenge("", "0");
    break;
};
                        save("location");
                        break;
                };

lookup("aliases");

                if (uri=~"sip:1[0-9][0-9][0-9]*@.*") {
                       t_relay_to_udp("65.22.14.3", "5060");
                        break;
                };
                # native SIP destinations are handled using our USRLOC DB
                if (!lookup("location")) {
                        sl_send_reply("404", "Not Found");
                        break;
                };
        };
        setflag(1);
        if (!t_relay()) {
                sl_reply_error();
        };
}

onreply_route[1] {
         if ( ((status=~"2[0-9][0-9]")||(status=~"183")) && (search("192.168.*") || search("@10.*") || search("172.16.*") )) {
                fix_nated_contact();
                force_rtp_proxy();
        };
}

-- 
_______________________________________________
Find what you are looking for with the Lycos Yellow Pages
http://r.lycos.com/r/yp_emailfooter/http://yellowpages.lycos.com/default.asp?SRC=lycos10




More information about the sr-users mailing list