Hello All,
I’m fairly new to SER / Mediaproxy. I’ve been following the examples from onsip.org using the latest Getting started docs.
At this point I’m testing with two Grandstream Handytone 486 UA’s. One NAT'd, one not.
Please check out the following URL to see a diagram explaining my setup. http://marc.ivalve.net/ser/gif_1.gif
“UA-2” cannot hear anything spoken from “UA-1”, although I can hear what is said from “UA-2” on “UA-1”, but not vice versa. 2-way voice is not happening.
Both UA’s do register to SER. The NAT’d UA couldn’t register until I got Mediaproxy installed. Mediaproxy does appear to start with out errors. Below are my Ser.cfg and Mediaproxy.ini.
Please Help.
Marc
Ser.cfg -------------------------------------------------------------- #5a-mysql-mediaproxy-ser.cfg debug=3 fork=yes log_stderror=no
listen=XXX.XXX.XXX.235 # INSERT YOUR IP ADDRESS HERE port=5060 children=4
dns=no rev_dns=no fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:heslo@localhost/ser"
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/auth.so" loadmodule "/usr/lib/ser/modules/auth_db.so" loadmodule "/usr/lib/ser/modules/uri.so" loadmodule "/usr/lib/ser/modules/uri_db.so" loadmodule "/usr/lib/ser/modules/domain.so" loadmodule "/usr/lib/ser/modules/mediaproxy.so" loadmodule "/usr/lib/ser/modules/nathelper.so" loadmodule "/usr/lib/ser/modules/textops.so"
modparam("auth_db|uri_db|usrloc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "rtpproxy_disable", 1) modparam("nathelper", "natping_interval", 0)
modparam("mediaproxy","natping_interval", 30) modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock") modparam("mediaproxy","sip_asymmetrics","/etc/ser/sip-clients") modparam("mediaproxy","rtp_asymmetrics","/etc/ser/rtp-clients")
modparam("usrloc", "db_mode", 2)
modparam("registrar", "nat_flag", 6)
modparam("rr", "enable_full_lr", 1)
route {
# ------------------------------------------------------------------------ # Sanity Check Section # ------------------------------------------------------------------------
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; };
# ------------------------------------------------------------------------ # Record Route Section # ------------------------------------------------------------------------ if (method=="INVITE" && client_nat_test("3")) { # INSERT YOUR IP ADDRESS HERE record_route_preset("XXX.XXX.XXX.235:5060;nat=yes"); } else if (method!="REGISTER") { record_route(); };
# ----------------------------------------------------------------- # Call Tear Down Section # ----------------------------------------------------------------- if (method=="BYE" || method=="CANCEL") { end_media_session(); };
# ------------------------------------------------------------------------ # Loose Route Section # ------------------------------------------------------------------------ if (loose_route()) {
if ((method=="INVITE" || method=="REFER") && !has_totag()) { sl_send_reply("403", "Forbidden"); break; };
if (method=="INVITE") {
if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); break; } else if (!check_from()) { sl_send_reply("403", "Use From=ID"); break; };
consume_credentials();
if (client_nat_test("3") || search("^Route:.*;nat=yes")) { setflag(6); use_media_proxy();
}; };
route(1); break; };
# ------------------------------------------------------------------------ # Call Type Processing Section # ------------------------------------------------------------------------ if (uri!=myself) { route(4); route(1); break; };
if (method=="ACK") { route(1); break; } else if (method=="CANCEL") { route(3); break; } else if (method=="INVITE") { route(3); break; } else if (method=="REGISTER") { route(2); break; };
lookup("aliases"); if (uri!=myself) { route(4); route(1); break; };
if (!lookup("location")) { sl_send_reply("404", "User Not Found"); break; };
route(1); }
route[1] { # ------------------------------------------------------------------------ # Default Message Handler # ------------------------------------------------------------------------
t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") { end_media_session(); };
sl_reply_error(); }; }
route[2] { # ------------------------------------------------------------------------ # REGISTER Message Handler # ------------------------------------------------------------------------
sl_send_reply("100", "Trying");
if (!search("^Contact:[ ]**") && client_nat_test("7")) { setflag(6); fix_nated_register(); force_rport();
};
if (!www_authorize("","subscriber")) { www_challenge("","0"); break; };
if (!check_to()) { sl_send_reply("401", "Unauthorized"); break; };
consume_credentials();
if (!save("location")) { sl_reply_error(); };
}
route[3] {
# ----------------------------------------------------------------- # INVITE Message Handler # -----------------------------------------------------------------
if (client_nat_test("3")) { setflag(7); force_rport(); fix_nated_contact(); };
if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); break; } else if (!check_from()) { sl_send_reply("403", "Use From=ID"); break; };
consume_credentials();
lookup("aliases"); if (uri!=myself) { route(4); route(1); break; };
if (!lookup("location")) { sl_send_reply("404", "User Not Found"); break; };
route(4); route(1); }
route[4] {
#----------------------------------------------------------------- # NAT Traversal Section # ----------------------------------------------------------------- if (isflagset(6) || isflagset(7)) { if (isflagset(8)) { setflag(8); use_media_proxy(); }; }; }
onreply_route[1] {
if ((isflagset(6) || isflagset(7)) && (status=~"(180)|(183)|2[0-9][0-9]")) {
if (!search("^Content-Length:[ ]*0")) { use_media_proxy(); }; };
if (client_nat_test("1")) { fix_nated_contact(); }; }
------------------------------------------------------------
mediaproxy.ini ------------------------------------------------------------
[Dispatcher] ;start = yes socket = /var/run/proxydispatcher.sock ;group = ser defaultProxy = /var/run/mediaproxy.sock
[MediaProxy] start = yes socket = /var/run/mediaproxy.sock group = ser listen = None allow = None proxyIP = XXX.XXX.XXX.235 # This is where OpenSER installed ;portRange = 2000:8000 # These values are set same in ATA's configs for RTP Range TOS = 0xb8 idleTimeout = 60 holdTimeout = 180 forceClose = 0 accounting = off
[Accounting] user = root password = host = localhost database = ser table = acc