<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.0.6603.0">
<TITLE>[Serusers] find_export: <append_hf> not found - SOLVED IT</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<P><FONT SIZE=2 FACE="Arial">Hi Lucas,</FONT>
<BR><FONT SIZE=2 FACE="Arial">Would mind sending your ser.cfg file, i am facing the same problems with NAT traversal</FONT>
<BR><FONT SIZE=2 FACE="Arial">I have already read</FONT> <FONT FACE="Times New Roman">><I><U> </U></I></FONT><I><U><FONT COLOR="#0000FF" FACE="Times New Roman"><<A HREF="http://www.informatik.uni-bremen.de/~prelle/terena/cookbook/Co">http://www.informatik.uni-bremen.de/~prelle/terena/cookbook/Co</A>></FONT></U><FONT FACE="Times New Roman"></FONT></I> <FONT FACE="Times New Roman">okbook_D2/ </FONT>
<BR><FONT FACE="Times New Roman">but it still does not working</FONT>
</P>
<P><FONT FACE="Times New Roman">This is my ser.cfg file:</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># simple quick-start config script</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ----------- global configuration parameters ------------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">#debug=3 # debug level (cmd line: -dddddddddd)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#fork=yes</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#log_stderror=no # (cmd line: -E)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">/* Uncomment these lines to enter debugging mode </FONT>
<BR><FONT SIZE=2 FACE="Courier New">debug=7</FONT>
<BR><FONT SIZE=2 FACE="Courier New">fork=no</FONT>
<BR><FONT SIZE=2 FACE="Courier New">log_stderror=yes</FONT>
<BR><FONT SIZE=2 FACE="Courier New">*/</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">check_via=no # (cmd. line: -v)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">dns=no # (cmd. line: -r)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">rev_dns=no # (cmd. line: -R)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#port=5060</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#children=4</FONT>
<BR><FONT SIZE=2 FACE="Courier New">fifo="/tmp/ser_fifo"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ------------------ module loading ----------------------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/local/lib/ser/modules/nathelper.so"</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment this if you want to use SQL database</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/mysql.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/sl.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/tm.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/rr.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/maxfwd.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/usrloc.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/registrar.so"</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/textops.so" </FONT>
</P>
<BR>
<BR>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment this if you want digest authentication</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># mysql.so must be loaded !</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/auth.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/auth_db.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ----------------- setting module-specific parameters ---------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># -- usrloc params --</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">#modparam("usrloc", "db_mode", 0)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment this if you want to use SQL database </FONT>
<BR><FONT SIZE=2 FACE="Courier New"># for persistent storage and comment the previous line</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("usrloc", "db_mode", 2)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># -- auth params --</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># Uncomment if you are using auth module</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#modparam("auth_db", "calculate_ha1", yes)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># If you set "calculate_ha1" parameter to yes (which true in this config), </FONT>
<BR><FONT SIZE=2 FACE="Courier New"># uncomment also the following parameter)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#modparam("auth_db", "password_column", "password")</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># -- rr params --</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># add value to ;lr param to make some broken UAs happy</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("rr", "enable_full_lr", 1)</FONT>
</P>
<BR>
<BR>
<BR>
<P><FONT SIZE=2 FACE="Courier New"># We will you flag 6 to mark NATed contacts</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("registrar", "nat_flag", 6)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Enable NAT pinging</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("nathelper", "natping_interval", 60)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Ping only contacts that are known to be</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># behind NAT</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("nathelper", "ping_nated_only", 1)</FONT>
</P>
<BR>
<BR>
<BR>
<BR>
<BR>
<P><FONT SIZE=2 FACE="Courier New"># ------------------------- request routing logic -------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># main routing logic</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">route{</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># initial sanity checks -- messages with</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># max_forwards==0, or excessively long requests</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!mf_process_maxfwd_header("10")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("483","Too Many Hops");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if ( msg:len > max_len ) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("513", "Message too big");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<BR>
<BR>
<BR>
<BR>
<P><FONT SIZE=2 FACE="Courier New"># special handling for NATed clients; first, nat test is</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># executed: it looks for via!=received and RFC1918 addresses</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># in Contact (may fail if line-folding used); also,</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># the received test should, if complete, should check all</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># vias for presence of received</FONT>
<BR><FONT SIZE=2 FACE="Courier New">if (nat_uac_test("3")) {</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # allow RR-ed requests, as these may indicate that</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # a NAT-enabled proxy takes care of it; unless it is</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # a REGISTER</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"> if (method == "REGISTER" || ! search("^Record-Route:")) {</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> log("LOG: Someone trying to register from private IP, rewriting\n");</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"> # This will work only for user agents that support symmetric</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # communication. We tested quite many of them and majority is</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # smart smart enough to be symmetric. In some phones, like</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # it takes a configuration option. With Cisco 7960, it is</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # called NAT_Enable=Yes, with kphone it is called</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # "symmetric media" and "symmetric signaling". (The latter</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> # not part of public released yet.)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"> fix_nated_contact(); # Rewrite contact with source IP of signalling</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> if (method == "INVITE") {</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> fix_nated_sdp("1"); # Add direction=active to SDP</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> };</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> force_rport(); # Add rport parameter to topmost Via</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> setflag(6); # Mark as NATed</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> };</FONT>
<BR><FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<BR>
<BR>
<P> <FONT SIZE=2 FACE="Courier New"># we record-route all messages -- to make sure that</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># subsequent messages will go through our proxy; that's</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># particularly good if upstream and downstream entities</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># use different transport protocol</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">record_route(); </FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># loose-route processing</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (loose_route()) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_relay();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># if the request is for other domain use UsrLoc</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># (in case, it does not work, use the following command</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># with proper names and addresses in it)</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (uri==myself) {</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (method=="REGISTER") {</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># Uncomment this if you want to use digest authentication</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!www_authorize("200.151.192.13", "subscriber")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">www_challenge("200.151.192.13", "0");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">save("location");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># native SIP destinations are handled using our USRLOC DB</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!lookup("location")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("404", "Not Found");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># forward to current uri now; use stateful forwarding; that</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># works reliably even if we forward from TCP to UDP</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!t_relay()) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_reply_error();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<BR>
<BR>
<P><FONT SIZE=2 FACE="Courier New"> </FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># Forcing media relay if necessary</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New">route[1] {</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> if (uri=~"[@:](192\.168\.|10\.|172\.16)" && !search("^Route:")){</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> sl_send_reply("479", "We don't forward to private IP addresses");</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> break;</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> };</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> if (isflagset(6)) {</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> force_rtp_proxy();</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> t_on_reply("1");</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> append_hf("P-Behind-NAT: Yes\r\n");</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> };</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"> if (!t_relay()) {</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> sl_reply_error();</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> break;</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> };</FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Courier New">onreply_route[1] {</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> if (status =~ "(183)|2[0-9][0-9]") {</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> fix_nated_contact();</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> force_rtp_proxy();</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> };</FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<BR>
<BR>
<BR>
<P><FONT FACE="Times New Roman">Thanks </FONT>
<BR><FONT FACE="Times New Roman">Paulo</FONT>
</P>
<BR>
<BR>
</BODY>
</HTML>