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