<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Message</TITLE>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.2722" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2>Hi,</FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>I am trying to
figure out how to solve the follwoing problem.</FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>I have two
subnetworks, A and B, with different private ip adressing schemes (I<A
href="mailto:IP@A">P@A</A>) and (I<A
href="mailto:IP@B">P@B</A>).</FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>SER is installed in
a computer with network interfaces towards both subnetworks.</FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>SER's SIP signalling
proxying operation works properly within the subnetworks and when trying to
set up a communication between users in A and B. But in that last case,
obviously there is no media at all circulating among the
subnetworks.</FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>Portaone's RTP
proxy has been installed and configured in the computer with
interfaces towards both subnetworks where SER is
installed. </FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>I am trying to
configure SER so that, based on the nathelper module, when
communication between both subnetworks occurs, the RTP proxy is involved
and the communication (also media and not only signalling) is possible. BUT I am
making something wrong, becouse it does not work ...</FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005></SPAN><SPAN class=367095711-20092005><FONT
face=Arial size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>Can anyone give
me a hand /hint?</FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>Thanks a lot in
advance / in any case.</FONT> </SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial size=2>My SER config file
is the following:</FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=367095711-20092005>
<P><FONT size=2>#</FONT></P>
<P><FONT size=2># ----------- global configuration parameters
------------------------</FONT></P>
<P><FONT size=2>/* Uncomment these lines to enter debugging mode </FONT></P>
<P><FONT size=2>debug=7</FONT></P>
<P><FONT size=2>fork=no</FONT></P>
<P><FONT size=2>log_stderror=yes</FONT></P>
<P><FONT size=2>*/</FONT></P>
<P><FONT size=2>check_via=no # (cmd. line: -v)</FONT></P>
<P><FONT size=2>dns=no # (cmd. line: -r)</FONT></P>
<P><FONT size=2>rev_dns=no # (cmd. line: -R)</FONT></P>
<P><FONT size=2>fifo="/tmp/ser_fifo"</FONT></P>
<P><FONT size=2>fifo_mode=0662</FONT></P>
<P><FONT size=2>alias=wirelessip<SPAN
class=367095711-20092005>.x.x.x</SPAN></FONT></P>
<P><FONT size=2>alias=sip.<SPAN
class=367095711-20092005>.x.x.x</SPAN></FONT></P>
<P><FONT size=2>alias=<SPAN class=367095711-20092005>x.x.x</SPAN></FONT></P>
<P><FONT size=2>log_stderror=no</FONT></P>
<P><FONT size=2>debug=3</FONT></P>
<P><FONT size=2>children=3</FONT></P>
<P><FONT size=2>mhomed=1</FONT></P>
<P><FONT size=2># ------------------ module loading
----------------------------------</FONT></P>
<P><FONT size=2># Uncomment this if you want to use SQL database</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/mysql.so"</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/sl.so"</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/tm.so"</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/rr.so"</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/maxfwd.so"</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/usrloc.so"</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/textops.so"</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/registrar.so"</FONT></P>
<P><FONT size=2># Uncomment this if you want digest authentication</FONT></P>
<P><FONT size=2># mysql.so must be loaded !</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/auth.so"</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/auth_db.so"</FONT></P>
<P><FONT size=2># For NAT support / media proxying</FONT></P>
<P><FONT size=2>loadmodule "/lib/ser/modules/nathelper.so"</FONT></P>
<P><FONT size=2># ----------------- setting module-specific parameters
---------------</FONT></P>
<P><FONT size=2># -- usrloc params --</FONT></P>
<P><FONT size=2>#modparam("usrloc", "db_mode", 0)</FONT></P>
<P><FONT size=2># Uncomment this if you want to use SQL database </FONT></P>
<P><FONT size=2># for persistent storage and comment the previous
line</FONT></P>
<P><FONT size=2>modparam("usrloc", "db_mode", 2)</FONT></P>
<P><FONT size=2># -- auth params --</FONT></P>
<P><FONT size=2># Uncomment if you are using auth module</FONT></P>
<P><FONT size=2>modparam("auth_db", "calculate_ha1", yes)</FONT></P>
<P><FONT size=2># If you set "calculate_ha1" parameter to yes (which true in
this config), </FONT></P>
<P><FONT size=2># uncomment also the following parameter)</FONT></P>
<P><FONT size=2>modparam("auth_db", "password_column", "password")</FONT></P>
<P><FONT size=2># -- rr params --</FONT></P>
<P><FONT size=2># add value to ;lr param to make some broken UAs
happy</FONT></P>
<P><FONT size=2>modparam("rr", "enable_full_lr", 1)</FONT></P>
<P><FONT size=2># For NAT</FONT></P>
<P><FONT size=2># We will use flag 6 to mark NATed contacts</FONT></P>
<P><FONT size=2>modparam("registrar", "nat_flag", 6)</FONT></P>
<P><FONT size=2># Enable NAT pinging</FONT></P>
<P><FONT size=2>modparam("nathelper", "natping_interval", 60)</FONT></P>
<P><FONT size=2># Ping only contacts that are known to be</FONT></P>
<P><FONT size=2># behind NAT</FONT></P>
<P><FONT size=2>modparam("nathelper", "ping_nated_only", 1)</FONT></P>
<P><FONT size=2># ------------------------- request routing logic
-------------------</FONT></P>
<P><FONT size=2># main routing logic</FONT></P>
<P><FONT size=2>route{</FONT></P>
<P><FONT size=2># initial sanity checks -- messages with</FONT></P>
<P><FONT size=2># max_forwards==0, or excessively long requests</FONT></P>
<P><FONT size=2>if (!mf_process_maxfwd_header("10")) {</FONT></P>
<P><FONT size=2>sl_send_reply("483","Too Many Hops");</FONT></P>
<P><FONT size=2>break;</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>if ( msg:len > max_len ) {</FONT></P>
<P><FONT size=2>sl_send_reply("513", "Message too big");</FONT></P>
<P><FONT size=2>break;</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2># special handling for NATed clients; first, nat test
is</FONT></P>
<P><FONT size=2># executed: it looks for via!=received and RFC1918
addresses</FONT></P>
<P><FONT size=2># in Contact (may fail if line-folding used); also,</FONT></P>
<P><FONT size=2># the received test should, if complete, should check
all</FONT></P>
<P><FONT size=2># vias for presence of received</FONT></P>
<P><FONT size=2>if (nat_uac_test("3")) {</FONT></P>
<P><FONT size=2># allow RR-ed requests, as these may indicate that</FONT></P>
<P><FONT size=2># a NAT-enabled proxy takes care of it; unless it is</FONT></P>
<P><FONT size=2># a REGISTER</FONT></P>
<P><FONT size=2>if (method == "REGISTER" || ! search("^Record-Route:"))
{</FONT></P>
<P><FONT size=2>log("LOG: Someone trying to register from private IP,
rewriting\n");</FONT></P>
<P><FONT size=2># This will work only for user agents that support
symmetric</FONT></P>
<P><FONT size=2># communication. We tested quite many of them and majority
is</FONT></P>
<P><FONT size=2># smart smart enough to be symmetric. In some phones,
like</FONT></P>
<P><FONT size=2># it takes a configuration option. With Cisco 7960, it
is</FONT></P>
<P><FONT size=2># called NAT_Enable=Yes, with kphone it is called</FONT></P>
<P><FONT size=2># "symmetric media" and "symmetric signaling". (The
latter</FONT></P>
<P><FONT size=2># not part of public released yet.)</FONT></P>
<P><FONT size=2>fix_nated_contact(); # Rewrite contact with source IP of
signalling</FONT></P>
<P><FONT size=2>if (method == "INVITE") {</FONT></P>
<P><FONT size=2>fix_nated_sdp("1"); # Add direction=active to SDP</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>force_rport(); # Add rport parameter to topmost Via</FONT></P>
<P><FONT size=2>setflag(6); # Mark as NATed</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2># we record-route all messages -- to make sure that</FONT></P>
<P><FONT size=2># subsequent messages will go through our proxy;
that's</FONT></P>
<P><FONT size=2># particularly good if upstream and downstream
entities</FONT></P>
<P><FONT size=2># use different transport protocol</FONT></P>
<P><FONT size=2>record_route(); </FONT></P>
<P><FONT size=2># loose-route processing</FONT></P>
<P><FONT size=2>if (loose_route()) {</FONT></P>
<P><FONT size=2>t_relay();</FONT></P>
<P><FONT size=2>break;</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>lookup("aliases");</FONT></P>
<P><FONT size=2># if the request is for other domain use UsrLoc</FONT></P>
<P><FONT size=2># (in case, it does not work, use the following
command</FONT></P>
<P><FONT size=2># with proper names and addresses in it)</FONT></P>
<P><FONT size=2>if (uri==myself) {</FONT></P>
<P><FONT size=2>if (method=="REGISTER") {</FONT></P>
<P><FONT size=2># Uncomment this if you want to use digest
authentication</FONT></P>
<P><FONT size=2>if (!www_authorize("com.dtu.dk", "subscriber")) {</FONT></P>
<P><FONT size=2>www_challenge("com.dtu.dk", "0");</FONT></P>
<P><FONT size=2>break;</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>save("location");</FONT></P>
<P><FONT size=2>break;</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2># native SIP destinations are handled using our USRLOC
DB</FONT></P>
<P><FONT size=2>if (!lookup("location")) {</FONT></P>
<P><FONT size=2>sl_send_reply("404", "Not Found");</FONT></P>
<P><FONT size=2>break;</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2># forward to current uri now; use stateful forwarding;
that</FONT></P>
<P><FONT size=2># works reliably even if we forward from TCP to UDP</FONT></P>
<P><FONT size=2>if (!t_relay()) {</FONT></P>
<P><FONT size=2>sl_reply_error();</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>}</FONT></P>
<P><FONT size=2>#</FONT></P>
<P><FONT size=2># Forcing media relay if necessary</FONT></P>
<P><FONT size=2>#</FONT></P>
<P><FONT size=2>route[1] {</FONT></P>
<P><FONT size=2>#if (uri=~"[@:](192\.168\.|10\.|172\.16)" &&
!search("^Route:")){</FONT></P>
<P><FONT size=2># sl_send_reply("479", "We don't forward to private IP
addresses");</FONT></P>
<P><FONT size=2># break;</FONT></P>
<P><FONT size=2>#};</FONT></P>
<P><FONT size=2>#if (isflagset(6)) {</FONT></P>
<P><FONT size=2>force_rtp_proxy();<SPAN class=367095711-20092005> # I force
everything through the proxy</SPAN></FONT></P>
<P><FONT size=2>t_on_reply("1");</FONT></P>
<P><FONT size=2>append_hf("P-Behind-NAT: Yes\r\n");</FONT></P>
<P><FONT size=2>#};</FONT></P>
<P><FONT size=2>if (!t_relay()) {</FONT></P>
<P><FONT size=2>sl_reply_error();</FONT></P>
<P><FONT size=2>break;</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>}</FONT></P>
<P><FONT size=2>onreply_route[1] {</FONT></P>
<P><FONT size=2>if (status =~ "(183)|2[0-9][0-9]") {</FONT></P>
<P><FONT size=2>fix_nated_contact();</FONT></P>
<P><FONT size=2>force_rtp_proxy();</FONT></P>
<P><FONT size=2>};</FONT></P>
<P><FONT size=2>}</FONT></P>
<P><FONT face=Arial size=2></FONT> </P></SPAN></DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=367095711-20092005><FONT face=Arial
size=2> </FONT></SPAN></DIV>
<DIV><SPAN class=367095711-20092005> </SPAN></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV></BODY></HTML>