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