Hello,
I have a problem whereby when a private client rings a public client only the public user
can hear voice and when the public user rings the private user, no audio is transmitted.
After looking at the messages I have have determined that the contact header and sdp part
of the invite contains the private address of the natted client. This would lead me to
believe that the registration process is incorrect. My problem is that I believe my script
should handle the registration process correctly and I suspect that the following code is
being skipped: I tried changing it to nat_uac_test("19") and
fix_nated_sdp("3") but that didnt help.
if (nat_uac_test("3")){
if (method == "REGISTER" || ! search("^Record-Route:")){
log("Log: Someone trying to register from private IP,rewriting\n");
fix_nated_contact(); #Rewrite contact with source IP
if (method == "INVITE"){
fix_nated_sdp("1"); #Add direction=active to SDP
force_rtp_proxy();
};
force_rport(); # Add rport parameter to topmost Via
setflag(6); # Mark as Nated
};
};
I have included the log message below and my ser.cfg as an attachment. Please let me know
where I could be going wrong.
Thank you,
Vivienne.
2093 (private) ringing 2092 (public)
U 84.203.148.14:5060 -> 84.203.148.146:5060
INVITE sip:2092@84.203.148.146 SIP/2.0..Via: SIP/2.0/UDP 172.16.3.31;branch
=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.146>;tag=2dc376
dcd4655094..To: <sip:2092@84.203.148.146>..Contact: <sip:2093@172.16.3.31>.
.Supported: replaces..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq: 10327 IN
VITE..User-Agent: Grandstream BT100 1.0.5.18..Max-Forwards: 70..Allow: INVI
TE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Type: applic
ation/sdp..Content-Length: 362....v=0..o=2093 8000 0 IN IP4 172.16.3.31..s=
SIP Call..c=IN IP4 172.16.3.31..t=0 0..m=audio 5004 RTP/AVP 0 8 4 18 2 15 9
9 9..a=sendrecv..a=rtpmap:0 PCMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4
G723/8000/3..a=rtpmap:18 G729/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:
15 G728/8000/3..a=rtpmap:99 iLBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9 G722
/8000/3..a=ptime:20..
U 84.203.148.146:5060 -> 84.203.148.14:5060
SIP/2.0 100 trying -- your call is important to us..Via: SIP/2.0/UDP 172.16
.3.31;branch=z9hG4bK1a48edc121f5bc1f;rport=5060;received=84.203.148.14..Fro
m: "2093" <sip:2093@84.203.148.146>;tag=2dc376dcd4655094..To:
<sip:2092@84.
203.148.146>..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..Se
rver: Sip EXpress router (0.8.14 (i386/linux))..Content-Length: 0..Warning:
392 84.203.148.146:5060 "Noisy feedback tells: pid=4732 req_src_ip=84.203
.148.14 req_src_port=5060 in_uri=sip:2092@84.203.148.146 out_uri=sip:2092@1
57.190.74.151 via_cnt==1"....
U 84.203.148.146:5060 -> 157.190.74.151:5060
INVITE sip:2092@157.190.74.151 SIP/2.0..Via: SIP/2.0/UDP 84.203.148.146;bra
nch=z9hG4bK77bc.b54ca216.0..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;receive
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.2
03.148.146>;tag=2dc376dcd4655094..To: <sip:2092@84.203.148.146>..Contact: <
sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID: 44e1ae63c476fbf
f@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100 1.0.5.18..
Max-Forwards: 69..Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
BSCRIBE..Content-Type: application/sdp..Content-Length: 443....v=0..o=2093
8000 0 IN IP4 172.16.3.31..s=SIP Call..c=IN IP4 84.203.148.1484.203.148.146
..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99 9..a=sendrecv..a=rtpmap:0 P
CMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4 G723/8000/3..a=rtpmap:18 G72
9/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:15 G728/8000/3..a=rtpmap:99 i
LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9 G722/8000/3..a=ptime:20..a=direct
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
U 84.203.148.146:5060 -> 157.190.74.150:5060
INVITE sip:2092@157.190.74.150 SIP/2.0..Via: SIP/2.0/UDP 84.203.148.146;bra
nch=z9hG4bK77bc.b54ca216.1..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;receive
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.2
03.148.146>;tag=2dc376dcd4655094..To: <sip:2092@84.203.148.146>..Contact: <
sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID: 44e1ae63c476fbf
f@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100 1.0.5.18..
Max-Forwards: 69..Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
BSCRIBE..Content-Type: application/sdp..Content-Length: 443....v=0..o=2093
8000 0 IN IP4 172.16.3.31..s=SIP Call..c=IN IP4 84.203.148.1484.203.148.146
..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99 9..a=sendrecv..a=rtpmap:0 P
CMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4 G723/8000/3..a=rtpmap:18 G72
9/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:15 G728/8000/3..a=rtpmap:99 i
LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9 G722/8000/3..a=ptime:20..a=direct
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
U 157.190.74.151:5060 -> 84.203.148.146:5060
SIP/2.0 100 Trying..Via: SIP/2.0/UDP 84.203.148.146;branch=z9hG4bK77bc.b54c
a216.0..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;received=84.203.148.14;bran
ch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.146>;tag=2dc3
76dcd4655094..To: <sip:2092@84.203.148.146>..Call-ID: 44e1ae63c476fbff@172.
16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100 1.0.5.18..Conten
t-Length: 0....
U 157.190.74.151:5060 -> 84.203.148.146:5060
SIP/2.0 180 Ringing..Via: SIP/2.0/UDP 84.203.148.146;branch=z9hG4bK77bc.b54
ca216.0..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;received=84.203.148.14;bra
nch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.146>;tag=2dc
376dcd4655094..To: <sip:2092@84.203.148.146>;tag=10bdf2044401a257..Call-ID:
44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream
BT100 1.0.5.18..Content-Length: 0....
U 84.203.148.146:5060 -> 84.203.148.14:5060
SIP/2.0 180 Ringing..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;received=84.20
3.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.
146>;tag=2dc376dcd4655094..To: <sip:2092@84.203.148.146>;tag=10bdf2044401a2
57..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..User-Agent:
Grandstream BT100 1.0.5.18..Content-Length: 0....
U 84.203.148.146:5060 -> 157.190.74.150:5060
INVITE sip:2092@157.190.74.150 SIP/2.0..Via: SIP/2.0/UDP 84.203.148.146;bra
nch=z9hG4bK77bc.b54ca216.1..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;receive
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.2
03.148.146>;tag=2dc376dcd4655094..To: <sip:2092@84.203.148.146>..Contact: <
sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID: 44e1ae63c476fbf
f@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100 1.0.5.18..
Max-Forwards: 69..Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
BSCRIBE..Content-Type: application/sdp..Content-Length: 443....v=0..o=2093
8000 0 IN IP4 172.16.3.31..s=SIP Call..c=IN IP4 84.203.148.1484.203.148.146
..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99 9..a=sendrecv..a=rtpmap:0 P
CMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4 G723/8000/3..a=rtpmap:18 G72
9/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:15 G728/8000/3..a=rtpmap:99 i
LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9 G722/8000/3..a=ptime:20..a=direct
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
U 84.203.148.146:5060 -> 157.190.74.150:5060
INVITE sip:2092@157.190.74.150 SIP/2.0..Via: SIP/2.0/UDP 84.203.148.146;bra
nch=z9hG4bK77bc.b54ca216.1..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;receive
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.2
03.148.146>;tag=2dc376dcd4655094..To: <sip:2092@84.203.148.146>..Contact: <
sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID: 44e1ae63c476fbf
f@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100 1.0.5.18..
Max-Forwards: 69..Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
BSCRIBE..Content-Type: application/sdp..Content-Length: 443....v=0..o=2093
8000 0 IN IP4 172.16.3.31..s=SIP Call..c=IN IP4 84.203.148.1484.203.148.146
..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99 9..a=sendrecv..a=rtpmap:0 P
CMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4 G723/8000/3..a=rtpmap:18 G72
9/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:15 G728/8000/3..a=rtpmap:99 i
LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9 G722/8000/3..a=ptime:20..a=direct
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
U 157.190.74.151:5060 -> 84.203.148.146:5060
SIP/2.0 200 OK..Via: SIP/2.0/UDP 84.203.148.146;branch=z9hG4bK77bc.b54ca216
.0..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;received=84.203.148.14;branch=z
9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.146>;tag=2dc376dc
d4655094..To: <sip:2092@84.203.148.146>;tag=10bdf2044401a257..Call-ID: 44e1
ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100
1.0.5.18..Contact: <sip:2092@157.190.74.151>..Allow: INVITE,ACK,CANCEL,BYE
,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Type: application/sdp..Suppor
ted: replaces..Content-Length: 158....v=0..o=2092 8000 0 IN IP4 157.190.74.
151..s=SIP Call..c=IN IP4 157.190.74.151..t=0 0..m=audio 5004 RTP/AVP 0..a=
recvonly..a=rtpmap:0 PCMU/8000/3..a=ptime:20..
U 84.203.148.146:5060 -> 84.203.148.14:5060
SIP/2.0 200 OK..Via: SIP/2.0/UDP 172.16.3.31;rport=5060;received=84.203.148
.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.146>;
tag=2dc376dcd4655094..To: <sip:2092@84.203.148.146>;tag=10bdf2044401a257..C
all-ID: 44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grand
stream BT100 1.0.5.18..Contact: <sip:2092@157.190.74.151>..Allow: INVITE,AC
K,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Type: application
/sdp..Supported: replaces..Content-Length: 158....v=0..o=2092 8000 0 IN IP4
157.190.74.151..s=SIP Call..c=IN IP4 157.190.74.151..t=0 0..m=audio 5004 R
TP/AVP 0..a=recvonly..a=rtpmap:0 PCMU/8000/3..a=ptime:20..
Send instant messages to your online friends
http://uk.messenger.yahoo.com
#
# $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="157.190.74.152: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"
loadmodule "/usr/lib/ser/modules/cpl-c.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
#NB Had to up this value from 1 to 11 because reinvites were bombarding called phone
modparam("rr", "enable_full_lr", 11)
#!! Nathelper
modparam("registrar", "nat_flag", 60)
modparam("nathelper", "natping_interval", 30) #Ping interval 30 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)
#modparam("pa", "default_expires", 3600)
modparam("usrloc", "db_url",
"sql://root:1alfa156@localhost/ser")
#modparam("cpl-c", "cpl_db",
"mysql://root:1alfa156@localhost/ser")
#modparam("cpl-c", "cpl_table", "cpl")
#modparam("cpl-c", "cpl_dtd_file",
"/work/sip_router/modules/cpl-ccpl-06.dtd")
# ------------------------- 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,rewriting\n");
fix_nated_contact(); #Rewrite contact with source IP
if (method == "INVITE"){
fix_nated_sdp("1"); #Add direction=active to SDP
force_rtp_proxy();
};
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("157.190.74.152", "subscriber")) {
# www_challenge("157.190.74.152", "0");
# break;
# };
#cpl_process_register();
save("location");
break;
};
# if (method=="SUBSCRIBE")
# {
# log(1, "Subscribe\n");
# if(t_newtran())
# {
# log(1, "Registrar\n");
# handle_subscription("registrar");
# };
# 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
#if (!cpl_run_script("incoming","is_stateless"))
#{
# #script execution failed
# t_reply("500", "CPL script execution failed");
#};
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);
}
######################################entered
11/02/05############################################################
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;
};
}
######################################entered
11/02/05############################################################
#!! 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("157.190.74.152:5062");
t_relay_to_udp("157.190.74.152", "5062");
}
# if forwarding downstream did not succeed, try voicemail running
# at 172.16.2.120:5062
failure_route[1] {
revert_uri();
rewritehostport("157.190.74.152:5062");
append_branch();
t_relay_to_udp("157.190.74.152", "5062");
}