Hi everyone,
We're working through various SER problems and my thinking is that we've got something generally wrong with our SER config. I posted previously about one of these problems but wanted to clarify the situation and see if anyone could offer some advice.
Network: +-------------+ +--| Asterisk VM | | +-------------+ +---------------+ +---+ | +----------------+ |Inbound PSTN GW|----|SER|--+--| Outbound LD GW | +---------------+ +---+ | +----------------+ | | +------------------+ +-------+ | +--| Outbound PSTN GW | | UAs |-----+ +------------------+ +-------+ | | +-----------+ +--+ | | NATed UAs |--|FW|--+ +-----------+ +--+
Problems: - All UAs can make outbound calls without a problem. - UAs outside NAT can call each other. - NATed UAs can call each other. Depending on the UA it will either get one way audio or no audio. (Cisco 7960 seems to have more problems than the Sipura 841) - PSTN GW calls to NATed UAs ring but can't answer the call. SER logs: Warning: sl_send_reply: I won't send a reply for ACK!! - When PSTN calls a UA and it doesn't answer, failure route fails to connect the call to Asterisk. The call is set up (Asterisk logs attempts to send OKs back and will launch the voicemail app) but the PSTN gateway never gets the OK. Call is lost. - When NATed UAs call each other without answering fr_invite_timer hits and failure route fails to send the call to Asterisk.
I've read a LOT of back postings on the list and have read a bunch of threads that describe the one-way audio problem but never could find any acutal answers or resolution. The threads just seem to end. (i.e. http://lists.iptel.org/pipermail/serusers/2004-October/012305.html )
I'm going to attach the ser.cfg but will hold off on the ngrep and related documentation as I think someone might be able to tell me what we're doing wrong by just looking at this.
Anyhow, if anyone can offer some insight it would be greatly appreciated. (If anyone who is reading this is interested in consulting on this problem, contact me off-list and we can make payment arrangements.)
Thanks in advance, -Corey
SER Config: ############################################################ # # whatever.net - SER Configuration File # ser.conf # Revised 7/31/2005 # ############################################################
debug=3 fork=yes log_stderror=yes
listen=xxx.ser.ip.addr port=5060 children=4 alias=whatever.net alias=hostname.whatever.net
dns=no rev_dns=no
# Added 9/3 reply_to_via=no check_via=no
fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:passwd@localhost/ser"
### # Modules ###
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/acc.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/exec.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/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so" loadmodule "/usr/local/lib/ser/modules/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/uri_db.so" loadmodule "/usr/local/lib/ser/modules/uri.so" loadmodule "/usr/local/lib/ser/modules/permissions.so" loadmodule "/usr/local/lib/ser/modules/xlog.so"
### # Module Paramaters ###
modparam("auth_db|uri_db|usrloc|permissions", "db_url", "mysql://ser:passwd@localhost/ser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "natping_interval", 5) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")
# VM Timeout #modparam("tm", "fr_inv_timer", 20) modparam("tm", "fr_inv_timer", 10) modparam("tm", "fr_timer", 10)
modparam("usrloc", "db_mode", 2) modparam("permissions", "db_mode", 0) modparam("permissions", "trusted_table", "trusted") modparam("registrar", "nat_flag", 6) modparam("rr", "enable_full_lr", 1) modparam("exec", "setvars", 1)
modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1) modparam("acc", "db_url", "mysql://ser:passwd@localhost/ser") modparam("acc", "db_flag", 1)
### # Routing Section ###
route {
# Basic Checks if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); break; }; if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); break; };
if (method=="INVITE" && nat_uac_test("19")) { xlog("L_ERR", "INVITE detected with nat_uac_test 19. Adding record route preset.\n"); record_route_preset("xxx.ser.ip.addr:5060;nat=yes"); } else if (method!="REGISTER") { record_route(); };
if (method=="BYE" || method=="CANCEL") { unforce_rtp_proxy(); };
# Loose Routing if (loose_route()) { route(1); break; };
# Call Processing if (uri!=myself) { log (1, "*** Message URI is not myself. Probably should not happen.\n"); route(1); break; }; if (uri==myself) { if (method=="ACK") { xlog("L_ERR", "ACK received from %is for %tu.\n"); route(1); break; } else if (method=="CANCEL") { xlog("L_ERR", "CANCEL received from %is for %tu.\n"); log(1, " Cancel\n"); route(3); break; } else if (method=="INVITE") { xlog("L_ERR", "INVITE received from %is for %tu.\n"); route(3); break; } else if (method=="REGISTER") { xlog("L_ERR", "REGISTER received from %is.\n"); route(2); break; } else if (method=="NOTIFY") { sl_send_reply("200", "Shut up."); break; } else if (method=="OPTIONS") { sl_send_reply("200", "Shut up."); break; }; };
route(1); }
route[1] {
### # Default Call Handling ###
# NAT Fix if (method=="INVITE" && nat_uac_test("19") && !isflagset(9)) { xlog("L_ERR", " - INVITE NAT detected (route 1).\n"); xlog("L_ERR", " -- Contact Header: %ct\n"); fix_nated_sdp("1"); force_rport(); fix_nated_contact(); force_rtp_proxy(); setflag(9); xlog("L_ERR", " ++ Contact Header: %ct\n"); };
# On call timeout to voicemail # t_on_failure("1"); # t_on_reply("1");
# Log setflag(1);
if (!t_relay()) { if (method=="INVITE" && isflagset(6)) { unforce_rtp_proxy(); }; sl_reply_error(); }; }
route[2] {
### # REGISTER method ###
log(1," Route 2 hit.\n");
if (!search("^Contact:\ +*") && nat_uac_test("19")) { setflag(6); fix_nated_register(); force_rport(); };
sl_send_reply("100", "Trying");
if (!www_authorize("whatever.net","subscriber")) { www_challenge("whatever.net","0"); break; };
if (!check_to()) { sl_send_reply("401", "Unauthorized"); break; };
consume_credentials();
if (!save("location")) { sl_reply_error(); }; }
route[3] {
### # INVITE & CANCEL # URI matching is here. ###
xlog("L_ERR", " Route 3 starting.\n");
t_on_failure("1"); t_on_reply("1");
if (nat_uac_test("19")) { setflag(6); };
if (method=="INVITE" && !allow_trusted()) { # Proxy auth code goes here consume_credentials(); log(1,"INVITE and not trusted."); };
lookup("aliases");
if (!lookup("location")) { if (uri=~"^sip:911@") { # Pass 911 calls first route(5); break; };
if (uri=~"^sip:[0-9]{7}@") { # EXPAND 7-DIGIT CALL exec_dset("/root/7digit.pl"); };
# Try location lookup again
if (!lookup("location")) {
if (uri=~"^sip:[0-9]{10}@") { # DB Lookup of NPANXX route exec_dset("/root/npa_nxx.pl"); route(1); break; };
if (uri=~"^sip:1[0-9]{10}@") { # DB Lookup of NPANXX route exec_dset("/root/npa_nxx.pl"); route(1); break; };
if (uri=~"^sip:555@") { # Voicemail Access route(6); break; };
if (uri=~"^sip:556@") { # Voicemail Access route(6); break; };
# Call error message route(7); break; }; };
# NAT Fix if (nat_uac_test("19") && !isflagset(9)) { fix_nated_sdp("1"); force_rport(); fix_nated_contact(); force_rtp_proxy(); setflag(9); };
if (!t_relay()) { if(nat_uac_test("19") && isflagset(9)) { unforce_rtp_proxy(); } sl_reply_error(); }; }
route[4] {
### # Primary LD Gateway ###
rewritehost("xxx.sip.gw.ip"); route(1); }
route[5] {
### # Local PSTN Gateway ### rewritehost("xxx.pstn.gw.ip"); route(1); }
route[6] {
### # Calls to VM ### rewritehost("xxx.ast.srv.ip"); route(1); }
route[7] {
### # Call Failure ### rewriteuri("sip:7110000001@xxx.ast.srv.ip"); route(1); }
failure_route[1] {
### # Voicemail ### xlog("L_ERR", " * Failure Route 1 "); rewritehost("xxx.ast.srv.ip"); append_hf("P-hint: OFFLINE VOICEMAIL\r\n"); append_branch(); route(1); }
onreply_route[1] {
if (nat_uac_test("19") && status=~"(180)|(183)|2[0-9][0-9]") { if (!search("^Content-Length:\ +0")) { force_rtp_proxy(); }; };
if (nat_uac_test("1") && !isflagset(9)) { fix_nated_contact(); }; }
END
********************************************* This message has been scanned for viruses and dangerous content, and is believed to be clean.
Corey, I comment on this email instead of the previous post. Your post below + the error messages you showed in your previous post show that there are some serious problems with your config. However, your setup is not straight-forward (with inbound and outbound PSTN GWs etc). Some of the errors should be fairly easy to fix, others may be harder. My suggestion is that you take the time to rewrite your config from scratch using an ONsip.org config file as a starting point. The Getting Started document discussion on nathelper and mediaproxy should make you capable of adapting it to your setup below. This exercise should at least remove some of your errors. In addition, it will make it easier to trace your problems. Something is eating your OKs and it seems to be outside ser, so I would also set up a trace at various places in your network. g-)
Corey S. McFadden wrote:
Hi everyone,
We're working through various SER problems and my thinking is that we've got something generally wrong with our SER config. I posted previously about one of these problems but wanted to clarify the situation and see if anyone could offer some advice.
Network: +-------------+ +--| Asterisk VM | | +-------------+ +---------------+ +---+ | +----------------+ |Inbound PSTN GW|----|SER|--+--| Outbound LD GW | +---------------+ +---+ | +----------------+ | | +------------------+ +-------+ | +--| Outbound PSTN GW | | UAs |-----+ +------------------+ +-------+ | | +-----------+ +--+ | | NATed UAs |--|FW|--+ +-----------+ +--+
Problems:
- All UAs can make outbound calls without a problem.
- UAs outside NAT can call each other.
- NATed UAs can call each other. Depending on the UA it will either
get one way audio or no audio. (Cisco 7960 seems to have more problems than the Sipura 841)
- PSTN GW calls to NATed UAs ring but can't answer the call.
SER logs: Warning: sl_send_reply: I won't send a reply for ACK!!
- When PSTN calls a UA and it doesn't answer, failure route fails to
connect the call to Asterisk. The call is set up (Asterisk logs attempts to send OKs back and will launch the voicemail app) but the PSTN gateway never gets the OK. Call is lost.
- When NATed UAs call each other without answering fr_invite_timer
hits and failure route fails to send the call to Asterisk.
I've read a LOT of back postings on the list and have read a bunch of threads that describe the one-way audio problem but never could find any acutal answers or resolution. The threads just seem to end. (i.e. http://lists.iptel.org/pipermail/serusers/2004-October/012305.html )
I'm going to attach the ser.cfg but will hold off on the ngrep and related documentation as I think someone might be able to tell me what we're doing wrong by just looking at this.
Anyhow, if anyone can offer some insight it would be greatly appreciated. (If anyone who is reading this is interested in consulting on this problem, contact me off-list and we can make payment arrangements.)
Thanks in advance, -Corey
SER Config: ############################################################ # # whatever.net - SER Configuration File # ser.conf # Revised 7/31/2005 # ############################################################
debug=3 fork=yes log_stderror=yes
listen=xxx.ser.ip.addr port=5060 children=4 alias=whatever.net alias=hostname.whatever.net
dns=no rev_dns=no
# Added 9/3 reply_to_via=no check_via=no
fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:passwd@localhost/ser"
### # Modules ###
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/acc.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/exec.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/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so" loadmodule "/usr/local/lib/ser/modules/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/uri_db.so" loadmodule "/usr/local/lib/ser/modules/uri.so" loadmodule "/usr/local/lib/ser/modules/permissions.so" loadmodule "/usr/local/lib/ser/modules/xlog.so"
### # Module Paramaters ###
modparam("auth_db|uri_db|usrloc|permissions", "db_url", "mysql://ser:passwd@localhost/ser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "natping_interval", 5) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")
# VM Timeout #modparam("tm", "fr_inv_timer", 20) modparam("tm", "fr_inv_timer", 10) modparam("tm", "fr_timer", 10)
modparam("usrloc", "db_mode", 2) modparam("permissions", "db_mode", 0) modparam("permissions", "trusted_table", "trusted") modparam("registrar", "nat_flag", 6) modparam("rr", "enable_full_lr", 1) modparam("exec", "setvars", 1)
modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1) modparam("acc", "db_url", "mysql://ser:passwd@localhost/ser") modparam("acc", "db_flag", 1)
### # Routing Section ###
route {
# Basic Checks if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); break; }; if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); break; };
if (method=="INVITE" && nat_uac_test("19")) { xlog("L_ERR", "INVITE detected with nat_uac_test 19. Adding record route preset.\n"); record_route_preset("xxx.ser.ip.addr:5060;nat=yes"); } else if (method!="REGISTER") { record_route(); };
if (method=="BYE" || method=="CANCEL") { unforce_rtp_proxy(); }; # Loose Routing if (loose_route()) { route(1); break;
};
# Call Processing if (uri!=myself) {
log (1, "*** Message URI is not myself. Probably should not happen.\n"); route(1); break; }; if (uri==myself) { if (method=="ACK") { xlog("L_ERR", "ACK received from %is for %tu.\n"); route(1); break; } else if (method=="CANCEL") { xlog("L_ERR", "CANCEL received from %is for %tu.\n"); log(1, " Cancel\n"); route(3); break; } else if (method=="INVITE") { xlog("L_ERR", "INVITE received from %is for %tu.\n"); route(3); break; } else if (method=="REGISTER") { xlog("L_ERR", "REGISTER received from %is.\n"); route(2); break; } else if (method=="NOTIFY") { sl_send_reply("200", "Shut up."); break; } else if (method=="OPTIONS") { sl_send_reply("200", "Shut up."); break; }; };
route(1);
}
route[1] {
### # Default Call Handling ###
# NAT Fix if (method=="INVITE" && nat_uac_test("19") && !isflagset(9)) { xlog("L_ERR", " - INVITE NAT detected (route 1).\n"); xlog("L_ERR", " -- Contact Header: %ct\n"); fix_nated_sdp("1"); force_rport(); fix_nated_contact(); force_rtp_proxy(); setflag(9); xlog("L_ERR", " ++ Contact Header: %ct\n"); };
# On call timeout to voicemail
# t_on_failure("1"); # t_on_reply("1");
# Log setflag(1); if (!t_relay()) { if (method=="INVITE" && isflagset(6)) { unforce_rtp_proxy(); }; sl_reply_error(); };
}
route[2] {
### # REGISTER method ###
log(1," Route 2 hit.\n");
if (!search("^Contact:\ +\*") && nat_uac_test("19")) { setflag(6); fix_nated_register(); force_rport(); }; sl_send_reply("100", "Trying"); if (!www_authorize("whatever.net","subscriber")) { www_challenge("whatever.net","0"); break; }; if (!check_to()) { sl_send_reply("401", "Unauthorized"); break; }; consume_credentials(); if (!save("location")) { sl_reply_error(); };
}
route[3] {
### # INVITE & CANCEL # URI matching is here. ###
xlog("L_ERR", " Route 3 starting.\n");
t_on_failure("1"); t_on_reply("1");
if (nat_uac_test("19")) { setflag(6); }; if (method=="INVITE" && !allow_trusted()) {
# Proxy auth code goes here consume_credentials(); log(1,"INVITE and not trusted."); };
lookup("aliases"); if (!lookup("location")) {
if (uri=~"^sip:911@") { # Pass 911 calls first route(5); break; };
if (uri=~"^sip:[0-9]{7}@") { # EXPAND 7-DIGIT CALL exec_dset("/root/7digit.pl"); };
# Try location lookup again
if (!lookup("location")) {
if (uri=~"^sip:[0-9]{10}@") { # DB Lookup of NPANXX route exec_dset("/root/npa_nxx.pl"); route(1); break; };
if (uri=~"^sip:1[0-9]{10}@") { # DB Lookup of NPANXX route exec_dset("/root/npa_nxx.pl"); route(1); break; };
if (uri=~"^sip:555@") { # Voicemail Access route(6); break; }; if (uri=~"^sip:556@") { # Voicemail Access route(6); break; };
# Call error message route(7); break; }; };
# NAT Fix if (nat_uac_test("19") && !isflagset(9)) { fix_nated_sdp("1"); force_rport(); fix_nated_contact(); force_rtp_proxy(); setflag(9); };
if (!t_relay()) { if(nat_uac_test("19") && isflagset(9)) { unforce_rtp_proxy(); } sl_reply_error(); };
}
route[4] {
###
# Primary LD Gateway ###
rewritehost("xxx.sip.gw.ip"); route(1);
}
route[5] {
###
# Local PSTN Gateway ### rewritehost("xxx.pstn.gw.ip"); route(1); }
route[6] {
### # Calls to VM ###
rewritehost("xxx.ast.srv.ip"); route(1); }
route[7] {
### # Call Failure ### rewriteuri("sip:7110000001@xxx.ast.srv.ip"); route(1);
}
failure_route[1] {
### # Voicemail ###
xlog("L_ERR", " * Failure Route 1 "); rewritehost("xxx.ast.srv.ip"); append_hf("P-hint: OFFLINE VOICEMAIL\r\n"); append_branch(); route(1); }
onreply_route[1] {
if (nat_uac_test("19") && status=~"(180)|(183)|2[0-9][0-9]") { if (!search("^Content-Length:\ +0")) { force_rtp_proxy(); }; };
if (nat_uac_test("1") && !isflagset(9)) { fix_nated_contact(); }; }
END
This message has been scanned for viruses and dangerous content, and is believed to be clean.
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Greger,
Thanks for the response. I believe the original configuration was based on the ONsip.org rtpproxy example config but I will take it back there and try re-implementing features one at a time. Hopefully that will provide a little more clarity as to where the biggest problem lies.
It's actually a fairly straightforward setup minus the external NPANXX route lookup...
Thanks again, -Corey
On Mon, 5 Sep 2005, Greger V. Teigre wrote:
Corey, I comment on this email instead of the previous post. Your post below + the error messages you showed in your previous post show that there are some serious problems with your config. However, your setup is not straight-forward (with inbound and outbound PSTN GWs etc). Some of the errors should be fairly easy to fix, others may be harder. My suggestion is that you take the time to rewrite your config from scratch using an ONsip.org config file as a starting point. The Getting Started document discussion on nathelper and mediaproxy should make you capable of adapting it to your setup below. This exercise should at least remove some of your errors. In addition, it will make it easier to trace your problems. Something is eating your OKs and it seems to be outside ser, so I would also set up a trace at various places in your network. g-)
Corey S. McFadden wrote:
Hi everyone,
We're working through various SER problems and my thinking is that we've got something generally wrong with our SER config. I posted previously about one of these problems but wanted to clarify the situation and see if anyone could offer some advice.
Network: +-------------+ +--| Asterisk VM | | +-------------+ +---------------+ +---+ | +----------------+ |Inbound PSTN GW|----|SER|--+--| Outbound LD GW | +---------------+ +---+ | +----------------+ | | +------------------+ +-------+ | +--| Outbound PSTN GW | | UAs |-----+ +------------------+ +-------+ | | +-----------+ +--+ | | NATed UAs |--|FW|--+ +-----------+ +--+
Problems:
- All UAs can make outbound calls without a problem.
- UAs outside NAT can call each other.
- NATed UAs can call each other. Depending on the UA it will either
get one way audio or no audio. (Cisco 7960 seems to have more problems than the Sipura 841)
- PSTN GW calls to NATed UAs ring but can't answer the call.
SER logs: Warning: sl_send_reply: I won't send a reply for ACK!!
- When PSTN calls a UA and it doesn't answer, failure route fails to
connect the call to Asterisk. The call is set up (Asterisk logs attempts to send OKs back and will launch the voicemail app) but the PSTN gateway never gets the OK. Call is lost.
- When NATed UAs call each other without answering fr_invite_timer
hits and failure route fails to send the call to Asterisk.
I've read a LOT of back postings on the list and have read a bunch of threads that describe the one-way audio problem but never could find any acutal answers or resolution. The threads just seem to end. (i.e. http://lists.iptel.org/pipermail/serusers/2004-October/012305.html )
I'm going to attach the ser.cfg but will hold off on the ngrep and related documentation as I think someone might be able to tell me what we're doing wrong by just looking at this.
Anyhow, if anyone can offer some insight it would be greatly appreciated. (If anyone who is reading this is interested in consulting on this problem, contact me off-list and we can make payment arrangements.)
Thanks in advance, -Corey
SER Config: ############################################################ # # whatever.net - SER Configuration File # ser.conf # Revised 7/31/2005 # ############################################################
debug=3 fork=yes log_stderror=yes
listen=xxx.ser.ip.addr port=5060 children=4 alias=whatever.net alias=hostname.whatever.net
dns=no rev_dns=no
# Added 9/3 reply_to_via=no check_via=no
fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:passwd@localhost/ser"
### # Modules ###
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/acc.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/exec.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/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so" loadmodule "/usr/local/lib/ser/modules/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/uri_db.so" loadmodule "/usr/local/lib/ser/modules/uri.so" loadmodule "/usr/local/lib/ser/modules/permissions.so" loadmodule "/usr/local/lib/ser/modules/xlog.so"
### # Module Paramaters ###
modparam("auth_db|uri_db|usrloc|permissions", "db_url", "mysql://ser:passwd@localhost/ser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "natping_interval", 5) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")
# VM Timeout #modparam("tm", "fr_inv_timer", 20) modparam("tm", "fr_inv_timer", 10) modparam("tm", "fr_timer", 10)
modparam("usrloc", "db_mode", 2) modparam("permissions", "db_mode", 0) modparam("permissions", "trusted_table", "trusted") modparam("registrar", "nat_flag", 6) modparam("rr", "enable_full_lr", 1) modparam("exec", "setvars", 1)
modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1) modparam("acc", "db_url", "mysql://ser:passwd@localhost/ser") modparam("acc", "db_flag", 1)
### # Routing Section ###
route {
# Basic Checks if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); break; }; if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); break; };
if (method=="INVITE" && nat_uac_test("19")) { xlog("L_ERR", "INVITE detected with nat_uac_test 19. Adding record route preset.\n"); record_route_preset("xxx.ser.ip.addr:5060;nat=yes"); } else if (method!="REGISTER") { record_route(); };
if (method=="BYE" || method=="CANCEL") { unforce_rtp_proxy(); }; # Loose Routing if (loose_route()) { route(1); break;
};
# Call Processing if (uri!=myself) {
log (1, "*** Message URI is not myself. Probably should not happen.\n"); route(1); break; }; if (uri==myself) { if (method=="ACK") { xlog("L_ERR", "ACK received from %is for %tu.\n"); route(1); break; } else if (method=="CANCEL") { xlog("L_ERR", "CANCEL received from %is for %tu.\n"); log(1, " Cancel\n"); route(3); break; } else if (method=="INVITE") { xlog("L_ERR", "INVITE received from %is for %tu.\n"); route(3); break; } else if (method=="REGISTER") { xlog("L_ERR", "REGISTER received from %is.\n"); route(2); break; } else if (method=="NOTIFY") { sl_send_reply("200", "Shut up."); break; } else if (method=="OPTIONS") { sl_send_reply("200", "Shut up."); break; }; };
route(1);
}
route[1] {
### # Default Call Handling ###
# NAT Fix if (method=="INVITE" && nat_uac_test("19") && !isflagset(9)) { xlog("L_ERR", " - INVITE NAT detected (route 1).\n"); xlog("L_ERR", " -- Contact Header: %ct\n"); fix_nated_sdp("1"); force_rport(); fix_nated_contact(); force_rtp_proxy(); setflag(9); xlog("L_ERR", " ++ Contact Header: %ct\n"); };
# On call timeout to voicemail
# t_on_failure("1"); # t_on_reply("1");
# Log setflag(1); if (!t_relay()) { if (method=="INVITE" && isflagset(6)) { unforce_rtp_proxy(); }; sl_reply_error(); };
}
route[2] {
### # REGISTER method ###
log(1," Route 2 hit.\n");
if (!search("^Contact:\ +\*") && nat_uac_test("19")) { setflag(6); fix_nated_register(); force_rport(); }; sl_send_reply("100", "Trying"); if (!www_authorize("whatever.net","subscriber")) { www_challenge("whatever.net","0"); break; }; if (!check_to()) { sl_send_reply("401", "Unauthorized"); break; }; consume_credentials(); if (!save("location")) { sl_reply_error(); };
}
route[3] {
### # INVITE & CANCEL # URI matching is here. ###
xlog("L_ERR", " Route 3 starting.\n");
t_on_failure("1"); t_on_reply("1");
if (nat_uac_test("19")) { setflag(6); }; if (method=="INVITE" && !allow_trusted()) {
# Proxy auth code goes here consume_credentials(); log(1,"INVITE and not trusted."); };
lookup("aliases"); if (!lookup("location")) {
if (uri=~"^sip:911@") { # Pass 911 calls first route(5); break; };
if (uri=~"^sip:[0-9]{7}@") { # EXPAND 7-DIGIT CALL exec_dset("/root/7digit.pl"); };
# Try location lookup again
if (!lookup("location")) {
if (uri=~"^sip:[0-9]{10}@") { # DB Lookup of NPANXX route exec_dset("/root/npa_nxx.pl"); route(1); break; };
if (uri=~"^sip:1[0-9]{10}@") { # DB Lookup of NPANXX route exec_dset("/root/npa_nxx.pl"); route(1); break; };
if (uri=~"^sip:555@") { # Voicemail Access route(6); break; }; if (uri=~"^sip:556@") { # Voicemail Access route(6); break; };
# Call error message route(7); break; }; };
# NAT Fix if (nat_uac_test("19") && !isflagset(9)) { fix_nated_sdp("1"); force_rport(); fix_nated_contact(); force_rtp_proxy(); setflag(9); };
if (!t_relay()) { if(nat_uac_test("19") && isflagset(9)) { unforce_rtp_proxy(); } sl_reply_error(); };
}
route[4] {
###
# Primary LD Gateway ###
rewritehost("xxx.sip.gw.ip"); route(1);
}
route[5] {
###
# Local PSTN Gateway ### rewritehost("xxx.pstn.gw.ip"); route(1); }
route[6] {
### # Calls to VM ###
rewritehost("xxx.ast.srv.ip"); route(1); }
route[7] {
### # Call Failure ### rewriteuri("sip:7110000001@xxx.ast.srv.ip"); route(1);
}
failure_route[1] {
### # Voicemail ###
xlog("L_ERR", " * Failure Route 1 "); rewritehost("xxx.ast.srv.ip"); append_hf("P-hint: OFFLINE VOICEMAIL\r\n"); append_branch(); route(1); }
onreply_route[1] {
if (nat_uac_test("19") && status=~"(180)|(183)|2[0-9][0-9]") { if (!search("^Content-Length:\ +0")) { force_rtp_proxy(); }; };
if (nat_uac_test("1") && !isflagset(9)) { fix_nated_contact(); }; }
END
This message has been scanned for viruses and dangerous content, and is believed to be clean.
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
This message has been scanned for viruses and dangerous content, and is believed to be clean.
********************************************* This message has been scanned for viruses and dangerous content, and is believed to be clean.
In regards to the eating of your OKs take a look at this asterisk bug if your inbound PSTN gateway is asterisk.
http://bugs.digium.com/view.php?id=2687
-----Original Message----- From: serusers-bounces@iptel.org [mailto:serusers-bounces@lists.iptel.org] On Behalf Of Corey S. McFadden Sent: Monday, September 05, 2005 3:58 PM To: serusers@lists.iptel.org Subject: Re: [Serusers] Multiple SER Problems
Greger,
Thanks for the response. I believe the original configuration was based on the ONsip.org rtpproxy example config but I will take it back there and try re-implementing features one at a time. Hopefully that will provide a little more clarity as to where the biggest problem lies.
It's actually a fairly straightforward setup minus the external NPANXX route lookup...
Thanks again, -Corey
On Mon, 5 Sep 2005, Greger V. Teigre wrote:
Corey, I comment on this email instead of the previous post. Your post below +
the
error messages you showed in your previous post show that there are some serious problems with your config. However, your setup is not straight-forward (with inbound and outbound PSTN GWs etc). Some of the errors should be fairly easy to fix, others may be harder. My suggestion
is
that you take the time to rewrite your config from scratch using an ONsip.org config file as a starting point. The Getting Started document discussion on nathelper and mediaproxy should make you capable of adapting
it to your setup below. This exercise should at least remove some of your errors. In addition,
it will make it easier to trace your problems. Something is eating your
OKs
and it seems to be outside ser, so I would also set up a trace at various places in your network. g-)
Corey S. McFadden wrote:
Hi everyone,
We're working through various SER problems and my thinking is that we've got something generally wrong with our SER config. I posted previously about one of these problems but wanted to clarify the situation and see if anyone could offer some advice.
Network: +-------------+ +--| Asterisk VM | | +-------------+ +---------------+ +---+ | +----------------+ |Inbound PSTN GW|----|SER|--+--| Outbound LD GW | +---------------+ +---+ | +----------------+ | | +------------------+ +-------+ | +--| Outbound PSTN GW | | UAs |-----+ +------------------+ +-------+ | | +-----------+ +--+ | | NATed UAs |--|FW|--+ +-----------+ +--+
Problems:
- All UAs can make outbound calls without a problem.
- UAs outside NAT can call each other.
- NATed UAs can call each other. Depending on the UA it will either
get one way audio or no audio. (Cisco 7960 seems to have more problems than the Sipura 841)
- PSTN GW calls to NATed UAs ring but can't answer the call.
SER logs: Warning: sl_send_reply: I won't send a reply for ACK!!
- When PSTN calls a UA and it doesn't answer, failure route fails to
connect the call to Asterisk. The call is set up (Asterisk logs attempts to send OKs back and will launch the voicemail app) but the PSTN gateway never gets the OK. Call is lost.
- When NATed UAs call each other without answering fr_invite_timer
hits and failure route fails to send the call to Asterisk.
I've read a LOT of back postings on the list and have read a bunch of threads that describe the one-way audio problem but never could find any acutal answers or resolution. The threads just seem to end. (i.e. http://lists.iptel.org/pipermail/serusers/2004-October/012305.html )
I'm going to attach the ser.cfg but will hold off on the ngrep and related documentation as I think someone might be able to tell me what we're doing wrong by just looking at this.
Anyhow, if anyone can offer some insight it would be greatly appreciated. (If anyone who is reading this is interested in consulting on this problem, contact me off-list and we can make payment arrangements.)
Thanks in advance, -Corey
SER Config: ############################################################ # # whatever.net - SER Configuration File # ser.conf # Revised 7/31/2005 # ############################################################
debug=3 fork=yes log_stderror=yes
listen=xxx.ser.ip.addr port=5060 children=4 alias=whatever.net alias=hostname.whatever.net
dns=no rev_dns=no
# Added 9/3 reply_to_via=no check_via=no
fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:passwd@localhost/ser"
### # Modules ###
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/acc.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/exec.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/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so" loadmodule "/usr/local/lib/ser/modules/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/uri_db.so" loadmodule "/usr/local/lib/ser/modules/uri.so" loadmodule "/usr/local/lib/ser/modules/permissions.so" loadmodule "/usr/local/lib/ser/modules/xlog.so"
### # Module Paramaters ###
modparam("auth_db|uri_db|usrloc|permissions", "db_url", "mysql://ser:passwd@localhost/ser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "natping_interval", 5) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")
# VM Timeout #modparam("tm", "fr_inv_timer", 20) modparam("tm", "fr_inv_timer", 10) modparam("tm", "fr_timer", 10)
modparam("usrloc", "db_mode", 2) modparam("permissions", "db_mode", 0) modparam("permissions", "trusted_table", "trusted") modparam("registrar", "nat_flag", 6) modparam("rr", "enable_full_lr", 1) modparam("exec", "setvars", 1)
modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1) modparam("acc", "db_url", "mysql://ser:passwd@localhost/ser") modparam("acc", "db_flag", 1)
### # Routing Section ###
route {
# Basic Checks if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); break; }; if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); break; };
if (method=="INVITE" && nat_uac_test("19")) { xlog("L_ERR", "INVITE detected with nat_uac_test 19. Adding record route preset.\n"); record_route_preset("xxx.ser.ip.addr:5060;nat=yes"); } else if (method!="REGISTER") { record_route(); };
if (method=="BYE" || method=="CANCEL") { unforce_rtp_proxy(); }; # Loose Routing if (loose_route()) { route(1); break;
};
# Call Processing if (uri!=myself) {
log (1, "*** Message URI is not myself. Probably should not happen.\n"); route(1); break; }; if (uri==myself) { if (method=="ACK") { xlog("L_ERR", "ACK received from %is for %tu.\n"); route(1); break; } else if (method=="CANCEL") { xlog("L_ERR", "CANCEL received from %is for %tu.\n"); log(1, " Cancel\n"); route(3); break; } else if (method=="INVITE") { xlog("L_ERR", "INVITE received from %is for %tu.\n"); route(3); break; } else if (method=="REGISTER") { xlog("L_ERR", "REGISTER received from %is.\n"); route(2); break; } else if (method=="NOTIFY") { sl_send_reply("200", "Shut up."); break; } else if (method=="OPTIONS") { sl_send_reply("200", "Shut up."); break; }; };
route(1);
}
route[1] {
### # Default Call Handling ###
# NAT Fix if (method=="INVITE" && nat_uac_test("19") && !isflagset(9)) { xlog("L_ERR", " - INVITE NAT detected (route 1).\n"); xlog("L_ERR", " -- Contact Header: %ct\n"); fix_nated_sdp("1"); force_rport(); fix_nated_contact(); force_rtp_proxy(); setflag(9); xlog("L_ERR", " ++ Contact Header: %ct\n"); };
# On call timeout to voicemail
# t_on_failure("1"); # t_on_reply("1");
# Log setflag(1); if (!t_relay()) { if (method=="INVITE" && isflagset(6)) { unforce_rtp_proxy(); }; sl_reply_error(); };
}
route[2] {
### # REGISTER method ###
log(1," Route 2 hit.\n");
if (!search("^Contact:\ +\*") && nat_uac_test("19")) { setflag(6); fix_nated_register(); force_rport(); }; sl_send_reply("100", "Trying"); if (!www_authorize("whatever.net","subscriber")) { www_challenge("whatever.net","0"); break; }; if (!check_to()) { sl_send_reply("401", "Unauthorized"); break; }; consume_credentials(); if (!save("location")) { sl_reply_error(); };
}
route[3] {
### # INVITE & CANCEL # URI matching is here. ###
xlog("L_ERR", " Route 3 starting.\n");
t_on_failure("1"); t_on_reply("1");
if (nat_uac_test("19")) { setflag(6); }; if (method=="INVITE" && !allow_trusted()) {
# Proxy auth code goes here consume_credentials(); log(1,"INVITE and not trusted."); };
lookup("aliases"); if (!lookup("location")) {
if (uri=~"^sip:911@") { # Pass 911 calls first route(5); break; };
if (uri=~"^sip:[0-9]{7}@") { # EXPAND 7-DIGIT CALL exec_dset("/root/7digit.pl"); };
# Try location lookup again
if (!lookup("location")) {
if (uri=~"^sip:[0-9]{10}@") { # DB Lookup of NPANXX route exec_dset("/root/npa_nxx.pl"); route(1); break; };
if (uri=~"^sip:1[0-9]{10}@") { # DB Lookup of NPANXX route exec_dset("/root/npa_nxx.pl"); route(1); break; };
if (uri=~"^sip:555@") { # Voicemail Access route(6); break; }; if (uri=~"^sip:556@") { # Voicemail Access route(6); break; };
# Call error message route(7); break; }; };
# NAT Fix if (nat_uac_test("19") && !isflagset(9)) { fix_nated_sdp("1"); force_rport(); fix_nated_contact(); force_rtp_proxy(); setflag(9); };
if (!t_relay()) { if(nat_uac_test("19") && isflagset(9)) { unforce_rtp_proxy(); } sl_reply_error(); };
}
route[4] {
###
# Primary LD Gateway ###
rewritehost("xxx.sip.gw.ip"); route(1);
}
route[5] {
###
# Local PSTN Gateway ### rewritehost("xxx.pstn.gw.ip"); route(1); }
route[6] {
### # Calls to VM ###
rewritehost("xxx.ast.srv.ip"); route(1); }
route[7] {
### # Call Failure ### rewriteuri("sip:7110000001@xxx.ast.srv.ip"); route(1);
}
failure_route[1] {
### # Voicemail ###
xlog("L_ERR", " * Failure Route 1 "); rewritehost("xxx.ast.srv.ip"); append_hf("P-hint: OFFLINE VOICEMAIL\r\n"); append_branch(); route(1); }
onreply_route[1] {
if (nat_uac_test("19") && status=~"(180)|(183)|2[0-9][0-9]") { if (!search("^Content-Length:\ +0")) { force_rtp_proxy(); }; };
if (nat_uac_test("1") && !isflagset(9)) { fix_nated_contact(); }; }
END
This message has been scanned for viruses and dangerous content, and is believed to be clean.
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
This message has been scanned for viruses and dangerous content, and is believed to be clean.
********************************************* This message has been scanned for viruses and dangerous content, and is believed to be clean.
_______________________________________________ Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers