Hi,
We are testing a SIP solution * + ser solution for a large implementation.
All the clients are nated.
When a client is dialing outside the domain (to a FWD sip account for example) all is perfect ! ;-)
But ,when a call is done to a sip account, the client is ringing, then the caller can hear the nated client very well, but the nated client does'nt hear anything. RTP issue no ?
I've follow the SER, Asterisk and Lucent TNT by Michael Shuler (http://www.voip-info.org/wiki-Asterisk+at+large ), but I think I've missed something.
The * and ser are using public ip, no nat for them.
I've tried different config, with and without rtpproxy, with forward instead of t_relay, but same or more problems.
If someone could help me please.
Here are my conf files :
extensions.conf: ============
[ser]
exten => 0870441067,1,Dial(SIP/[EMAIL PROTECTED],20,t) exten => 0870441067,2,Congestion exten => 0870441067,3,Hangup
exten => 0870441111,1,Dial(SIP/[EMAIL PROTECTED],20,t) exten => 0870441111,2,Congestion exten => 0870441111,3,Hangup
exten => _X.,1,Dial(SIP/[EMAIL PROTECTED],20,t) exten => _X.,2,Playback(vm-nobodyavail) exten => _X.,3,Voicemail([EMAIL PROTECTED]) exten => _X.,4,Hangup
exten => *,1,Answer exten => *,2,VoiceMailMain([EMAIL PROTECTED]) exten => *,3,Hangup
sip.conf ====== [general] realm=my.domain recordhistory=yes pedantic=no bindport=5060 disallow=all allow=g729 allow=ilbc maxexpirey=180 defaultexpirey=160 tos=reliability rtcachefriends=yes rtnoupdate=no rtautoclear=2000 qualify=2000 dtmfmode=rfc2833 context=ser autocreatepeer=yes nat = yes
[ser] type=friend context=ser dtmfmode=rfc2833 disallow=all allow=g729 allow=ilbc nat=no canreinvite=no host=192.168.0.146
ser.cfg: ====== # # $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 */
listen=192.168.0.146
sip_warning=no
alias="domain" alias="sip.domain.com" alias="domain.com"
advertised_address=192.168.0.146
reply_to_via=no 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"
# if changing fifo mode to a more restrictive value, put # decimal value in there, e.g. dec(rw|rw|rw)=dec(666)=438 #fifo_mode=438
# user | uid - uid to be used by the server. 99 = nobody. #uid="nobody"
# group | gid - gid to be used by the server. 99 = nobody. #gid="nobody"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database loadmodule "/usr/local/lib/ser/modules/mysql.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/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/xlog.so"
# Uncomment this if you want digest authentication # mysql.so must be loaded ! loadmodule "/usr/local/lib/ser/modules/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
# Flush every 60 sec
modparam("usrloc", "db_mode", 1)
modparam("usrloc", "db_url","sql://user:[EMAIL PROTECTED]/astcc")# -- auth params --
modparam("auth_db", "db_url","sql://user:[EMAIL PROTECTED]/astcc")
modparam("auth_db", "user_column", "name")
modparam("auth_db", "domain_column", "domain")
modparam("auth_db", "calculate_ha1", 1)modparam("auth_db", "password_column", "secret")# -- replication auth param --
modparam("auth", "secret", "secret")# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)# ------------- registrar parameters
modparam("registrar", "nat_flag", 2)# ------------- nathelper parameters
modparam("nathelper", "natping_interval", 60)
modparam("nathelper", "ping_nated_only", 1)# ------------------------- 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(method != "REGISTER")
# {
# xlog("L_INFO", "Got a %rm (URI = %ru) from %is");
# };# By default we are already responding to the learned IP:PORT that the message came from.
# This will properly fix the contact header. Asterisk will fix the SDP (actually it learns it).
force_rport();
fix_nated_contact();# ------------------------------------------------------------------------------------------------
# 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 || src_ip == 192.168.0.146)
{
if(method == "REGISTER")
{
# Make sure they are a valid user on our proxy
if(!www_authorize("domain", "sipfriends"))
{
# xlog("L_INFO", "Req Auth For %ct, URI = %ru");
www_challenge("domain", "1");
break;
};
# xlog("L_INFO", "Registered Contact %ct, URI = %ru");
save("location");
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 entities
# use different transport protocol
record_route();# This will make the return path the VIRTUAL IP on a L4 switch instead of our REAL IP
# record_route_preset("192.168.0.146:5060");
#------------------------------------------------------------------------------------------------
# loose-route processing
if(loose_route())
{
xlog("L_INFO", "loose_route(): Looking up %rm URI %ru from %is");
lookup("location");
xlog("L_INFO", "loose_route(): t_relay() %rm to URI %ru");
t_relay();
break;
};
#------------------------------------------------------------------------------------------------
# We only need to do load balancing on the INVITE.
# After the dest IP has been put in the message the servers will follow it on their own.
if(method == "INVITE")
{
# If it came from Asterisk send it to a Quintum for final routing if it can't be looked up
# As of now its ast0 and ast1 which are 222.222.222.222 and 333.333.333.333 which fall within this subnet
if(src_ip == 192.168.0.145)
{
xlog("L_INFO", "%rm came from Asterisk server %is, URI = %ru");
# native SIP destinations are handled using our USRLOC DB
if(lookup("location"))
{
# Found a match, this is going to a VoIP phone
xlog("L_INFO", "Sending %rm (URI = %ru) to Contact (%ct)");
}
else
{
# Lookup failed, assume that this is a phone number URL until I setup pattern matching
# Send to the Quintum
xlog("L_INFO", "Sending URI (%ru) to Quintum");
rewritehostport("192.168.0.147:5060");
};
}# NOTE: I could have combine the following "else if" and "else" but I wanted to seperate them for debug purpo
# If it came from a Quintum send it to an Asterisk box for final routing
# As of now Quintum is 192.168.0.147 which falls within this subnet
else if(src_ip == 192.168.0.147)
{
xlog("L_INFO", "%rm came from Quintum (%is), sending to Asterisk (URI = %ru)");
rewritehostport("192.168.0.145:5060");
# I cheated here because I made ast.mycompany.com a DNS round robing with a 5 sec experation. It's n
}
# Assume it came from one of our VoIP phones, all routing is done by Asterisk
else
{
xlog("L_INFO", "%rm came from a VoIP phone (%is), attempting to authorize %fu");
# Make sure they are a valid user on our proxy
if (!www_authorize("domain", "sipfriends"))
{
www_challenge("domain", "0");
xlog("L_INFO", "Failed to authorize %fu(%is)");
break;
};
# Found a match, this is going to a VoIP phone
xlog("L_INFO", "Auth OK, sending URI %ru to Asterisk for routing");
rewritehostport("192.168.0.145:5060");
};
xlog("L_INFO", "INVITE New URI = %ru, t_relay()ing now");
t_relay();
# forward(uri:host,uri:port);
break;
};#------------------------------------------------------------------------------------------------
# forward to current uri now; use stateful forwarding; that
# works reliably even if we forward from TCP to UDP
lookup("location");
xlog("L_INFO", "Default t_relay() (method = %rm, URI = %ru, >From = %is)");
if(!t_relay())
{
xlog("L_INFO", "Failed sending requesting %rm URI (%ru)");
sl_reply_error();
};
}
_______________________________________________ Asterisk-Users mailing list [email protected] http://lists.digium.com/mailman/listinfo/asterisk-users To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-users
