[Serusers] Nathelper/RTPPorxy not working for two natted clients

Vivienne Curran vivcurran at yahoo.co.uk
Thu Mar 31 18:05:10 CEST 2005


Hi,

 

I am having problems troubleshooting a problem I am experiencing with my SER configuration. I have ser 0.8.14 running with rtpproxy and nathelper enabled. I have two phones on the same subnet behind nat and I would like to make a call between the two. I want to invoke rtpproxy for this as they both have private address [I know this isn’t the most efficient way as they’re both on the same subnet but I can worry about that later]. 

 

When I ring from the phone 1 (2092) to phone 2 (2093), 2092 can hear voice but 2093 can’t. When 2093 ring 2092, there’s no audio. These phones are Grandstream BT100’s. They have been configured to listen on different SIP and RTP ports.

 

2092: SIP Port: 5060

2092: RTP Port: 5004

2093: SIP Port: 5061

2093: RTP Port: 5005

 

I have included my ser.cfg file below. I can send on the SER SIP message sniff if nescessary [I tried attaching it but serbouncers said the attachment was too big]. I can confirm that my rtpproxy is working (originally I thought it wasn’t) by using “strace –d <rtpproxy  pid> -f –F”. I can see a signal being returned. 

 

Any help would be appreciated or advise as to how I can proceed troubleshooting.

Kindest Regards,

Vivienne.

 

 

#

# $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)

 

# Uncomment these lines to enter debugging mode

#debug=7

#fork=no

#log_stderror=yes

 

check_via=no    # (cmd. line: -v)

dns=no           # (cmd. line: -r)

rev_dns=no      # (cmd. line: -R)

#port=5060

#children=4

fifo="/tmp/ser_fifo"

 

alias="84.203.148.146:5060"

 

# ------------------ module loading ----------------------------------

 

# Uncomment this if you want to use SQL database

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/nathelper.so"

#loadmodule "/usr/lib/ser/modules/pa.so"

 

# Uncomment this if you want digest authentication

# mysql.so must be loaded !

loadmodule "/usr/lib/ser/modules/auth.so"

 

loadmodule "/usr/lib/ser/modules/auth_db.so"

 

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

 

# -- usrloc params --

 

#modparam("usrloc", "db_mode",   0)

 

# Uncomment this if you want to use SQL database

# for persistent storage and comment the previous line

modparam("usrloc", "db_mode", 2)

 

# -- auth params --

# Uncomment if you are using auth module

#

modparam("auth_db", "calculate_ha1", yes)

#

# If you set "calculate_ha1" parameter to yes (which true in this config),

# uncomment also the following parameter)

 

#

modparam("auth_db", "password_column", "password")

 

# -- rr params --

# add value to ;lr param to make some broken UAs happy

modparam("rr", "enable_full_lr", 11)

 

#!! Nathelper

modparam("registrar", "nat_flag", 60)

modparam("nathelper", "natping_interval", 10) #Ping interval 10 s

modparam("nathelper", "ping_nated_only", 1)   #Ping only clients behind NAT

modparam("nathelper", "rtpproxy_sock", "/var/run/rtpproxy.sock")

 

modparam("tm", "fr_inv_timer", 20)

 

# -------------------------  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");

                break;

        };

        if ( msg:len > max_len ) {

                sl_send_reply("513", "Message too big");

                break;

        };

 

                if (nat_uac_test("3")){

                if (method == "REGISTER" || ! search("^Record-Route:")){

                        log("Log: Someone trying to register from private IP,rew

riting\n");

            fix_nated_contact(); #Rewrite contact with source IP

                        if (method == "INVITE"){

                                fix_nated_sdp("1"); #Add direction=active to SDP

                        };

                        force_rport(); # Add rport parameter to topmost Via

                        setflag(6); # Mark as Nated

                };

        };

        ###################################################################

 

        # we record-route all messages -- to make sure that

        # subsequent messages will go through our proxy; that's

        # particularly good if upstream and downstream entities

        # use different transport protocol

 

        if (method =="REGISTER") record_route();

 

        # loose-route processing

        if (loose_route()) {

                #commented 11/02/05

                        #t_relay();

                route(1);

                break;

        };

 

        # 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 (uri==myself) {

 

                log(1,"into loop");

                if (method=="REGISTER") {

 

# Uncomment this if you want to use digest authentication

#                       if (!www_authorize("84.203.148.146", "subscriber")) {

#                               www_challenge("84.203.148.146", "0");

#                               break;

#                       };

 

                        save("location");

                        break;

                };

 

            lookup("aliases");

                if (!uri==myself) {

                        append_hf("P-hint: outbound alias\r\n");

                        route(1);

                        break;

                };

 

                if (method=="INVITE"){

                        log(1,"in invite loop");

                        #break; #no 100 trying

                        t_on_failure("1");

                };

 

                # native SIP destinations are handled using our USRLOC DB

                if (!lookup("location")) {

                        #sl_send_reply("404", "Not Found");

                        route(2);

                        break;

                };

        };

# forward to current uri now; use stateful forwarding; that

        # works reliably even if we forward from TCP to UDP

        #commented 11/02/05#######################

        if (!t_relay()) {

                sl_reply_error();

        };

 

        #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")

;

                break;

        };

 

        if (isflagset(6)){

                force_rtp_proxy();

        }

 

        t_on_reply("1");

 

        if(!t_relay()){

                sl_reply_error();

                break;

};

 

}

######################################

#!! Nathelper

onreply_route[1] {

        if(isflagset(6) && status =~ "(183)|2[0-9][0-9]"){

                fix_nated_contact();

                force_rtp_proxy();

        }else if (nat_uac_test("1")){

                fix_nated_contact();

        };

}

########

# ------------- handling of unavailable user ------------------

 

 

route[2] {

 

        # non-Voip -- just send "off-line"

        if (!(method == "INVITE" || method == "ACK" || method == "CANCEL")) {

                sl_send_reply("404", "Not Found");

                break;

        };

 

        # forward to voicemail now

        rewritehostport("84.203.148.146:5062");

        t_relay_to_udp("84.203.148.146", "5062");

}

 

# if forwarding downstream did not succeed, try voicemail running

# at 84.203.148.146:5062

 

failure_route[1] {

        revert_uri();

        rewritehostport("84.203.148.146:5062");

        append_branch();

        t_relay_to_udp("84.203.148.146", "5062");

}

 

 

 


Send instant messages to your online friends http://uk.messenger.yahoo.com 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20050331/04f3b05b/attachment.htm>


More information about the sr-users mailing list