First off, make sure your sipura has NAT mapping enabled, this must be done in the "Advanced" options under the lineX menu. Second, it sounds like your getting stuck in the register (not the invite?). Here is a snippet of my config, I took it from (Java?) the list and modified it to suit my needs.
This should go near the top of your routing. It's my understand that all NAT clients get tagged before any other info is passed, else it may not get there. This should at least get your registering. good luck!
if (nat_uac_test("3")) { # Allow RR-ed requests, as these may indicate that # a NAT-enabled proxy takes care of it; unless it is # a REGISTER
if (method == "REGISTER" || ! search("^Record-Route:")) { log(1, "LOG: Someone trying to register from private IP, rewriting\n");
# This will work only for user agents that support symmetric # communication. We tested quite many of them and majority is # smart enough to be symmetric. In some phones it takes a configuration # option. With Cisco 7960, it is called NAT_Enable=Yes, with kphone it is # called "symmetric media" and "symmetric signalling". if (!search("(c|Contact): .*@xxx.xxx.xxx.xxx" )) { log(1, "NOT LEVEL 3, FIXXING NATTED CONTACT\n"); fix_nated_contact(); # Rewrite contact with source IP of signalling } if (method == "INVITE") { fix_nated_sdp("1"); # Add direction=active to SDP }; force_rport(); # Add rport parameter to topmost Via setflag(6); # Mark as NATed }; };
-----Original Message----- From: support [mailto:support@cybertel.biz] Sent: Wednesday, December 15, 2004 2:38 AM To: serusers@lists.iptel.org Subject: [Serusers] rtpproxy + nathelper problem
Hi,
I have installed the latest rtpproxy and run it with ser-0.8-14. I have also include nathelper modules. When I try to register a siprua gateway with SER, the IP is still 192.168.1.xx. It cannot be translated to NAT public IP.
Why is that so?
Thanks.
Thomas
Appendix: my ser.cfg -------------------------------------------------- # # $Id: ser.cfg,v 1.21 2003/06/04 13:47:36 jiri 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=mydomain.dyndns.org
# ------------------ module loading ----------------------------------
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"
# ----------------- setting module-specific parameters --------------- # -- usrloc params -- modparam("usrloc", "db_mode", 0)
# -- rr params -- # add value to ;lr param to make some broken UAs happy modparam("rr", "enable_full_lr", 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 (len_gt( 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 entities # use different transport protocol record_route(); # loose-route processing if (loose_route()) { t_relay(); 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 Found"); break; }; };
#inserted by klaus if (method=="INVITE") { record_route(); force_rtp_proxy(); /* set up reply processing */ t_on_reply("1"); };
# 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(); };
}
#inserted by klaus # all incoming replies for t_onrepli-ed transactions enter here onreply_route[1] { if (status=~"[12][0-9][0-9]") force_rtp_proxy(); }
_______________________________________________ Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers