[Serusers] NAT and ser

Serhan Sevim sevims at mezun.com
Mon Apr 18 22:44:38 CEST 2005


Hello there,
we use ser to forward incoming call requests to a remote PSTN.
this system works fine if the client has a non-natted public IP
address.However, I can't tell the same thing for the natted clients and
it doesn't work so far.
using nathelper/rtpproxy, the client (x-lite) can make the connection
and ring the phone but picking up the phone on the other end.. hmm,
well, no audio can be heard.
As a matter of fact, x-lite client times out with error 408 "after" I
hear the remote phone rings. it seems like the client side simply
signaling for connection but no data(audio) transfer can be made.
below is my ser.cfg, does anybody have an idea?
Thanks in advance.
Serhan.



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

#debug=7        # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=yes       # (cmd line: -E)

# Uncomment these lines to enter debugging mode
#debug=7
#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=4
fifo="/tmp/ser_fifo"

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


loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"

#Database URL is here!
modparam("usrloc", "db_url", "sql://ser:pass123@localhost/ser")

#nathelper params.
modparam("registrar", "nat_flag", 6)
modparam("nathelper", "natping_interval", 30)   # Ping interval 30 seconds
modparam("nathelper", "ping_nated_only", 1)     # Ping only clients
behind NAT

#mysql
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"

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

#modparam("usrloc", "db_mode",   0)
modparam("usrloc", "db_mode", 2)
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("rr", "enable_full_lr", 1)

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

# main routing logic

alias="domain.com"
alias="sipgw.domain.com"

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;
        };

        # for testing purposes, simply okay all REGISTERs
        if (method=="REGISTER") {
                log(1, "REGISTER received\n");
        } else {
                log(1, "non-REGISTER received\n");
        };
        if (uri=~"sip:.*[@:]sipgw.domain.com") {
                log(1, "request for sipgw.domain.com received\n");
        } else {
                log(1, "request for other domain received\n");
        };



        if ( msg:len > max_len ) {
                sl_send_reply("513", "Message too big");
                break;
        };

        # we record-route all messages -- to make sure that
        # subsequent messages will go through our proxy; that's
        # particularly good if upstream and downstream entitie
        # use different transport protocol
        record_route();
        # loose-route processing
        if (loose_route()) {
                t_relay();
                break;
        };


# PSTN Forwarding
        if (uri=~"^sip:1")
        {
                strip(1);
           #    forward(pstngw.jondoe.com,5060);
                force_rtp_proxy();
                t_relay_to_udp("pstngw.jondoe.com", "5060");
                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) {

                if (method=="REGISTER") {
                        save("location");
                        break;
                };

                # native SIP destinations are handled using our USRLOC DB
                if (!lookup("location")) {
                        sl_send_reply("404", "not exists!");
                        break;
                };


        };
        # 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();
        };

}






More information about the sr-users mailing list