[Serusers] public to private call problem

Manpreet Dhanjal manpreet_k at hotmail.com
Wed Jun 30 12:41:36 CEST 2004


Hi

I a using ser with rtpproxy..
i am using stable version from cvs ...
my scenerio is :

		public ip(xlite phone)
		    Client A
			|
			|
			|
                   SER Server
	           (public IP)
			|
			|
			|
			|
		Private IP (xlite phone)
		     Client B


I am able to call from B to A. But unable to call when try to place call 
from public tp private..
The softphone displays error:
	"Response 479:We don't forward to private IP addresses"
plz help me in this scenerio.

my config file is:
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#

# ----------- global configuration parameters ------------------------

#debug=3         # debug level (cmd line: -dddddddddd)
#fork=no
#log_stderror=no	# (cmd line: -E)

# Uncomment these lines to enter debugging mode
debug=7
fork=yes
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"
mhomed=yes   	 # manpreet 30/06/04

# ------------------ module loading ----------------------------------

# Uncomment this if you want to use SQL database
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/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"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
loadmodule "/usr/local/lib/ser/modules/exec.so"
loadmodule "/usr/local/lib/ser/modules/group.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/mangler.so"

# ----------------- setting module-specific parameters ---------------

# -- usrloc params --
modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser")
modparam("usrloc", "db_mode",   2)

# -- auth params --
# Uncomment if you are using auth module
#
modparam("auth_db", "db_url", "mysql://ser:heslo@localhost/ser")
modparam("auth_db", "calculate_ha1", yes)

# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
modparam("auth_db", "password_column", "password")

# -- tm modules ---
modparam("tm", "fr_inv_timer", 15 )

#-- acc params --
modparam("acc","db_url", "mysql://ser:heslo@localhost/ser")
modparam("acc", "log_missed_flag", 3)
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 3)

# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)

# -- nathelper params --
modparam("registrar", "nat_flag", 6)
modparam("nathelper", "natping_interval", 30) # Ping interval 30 s
modparam("nathelper", "ping_nated_only", 1)

#----- 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 (msg:len >=  max_len ) {
                 sl_send_reply("513", "Message too big");
                 break;
         };

         # !! Nathelper
         # Special handling for NATed clients; first, NAT test is
         # executed: it looks for via!=received and RFC1918 addresses
         # in Contact (may fail if line-folding is used); also,
         # the received test should, if completed, should check all
         # vias for rpesence of received
         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("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".

                     fix_nated_contact(); # Rewrite contact with source IP 
of signalling
		     log("LOG: fix_nated_contact\n");
                     if (method == "INVITE") {
                         fix_nated_sdp("3"); # Add direction=active to SDP
                     };
                     force_rport(); # Add rport parameter to topmost Via
		     log("LOG: force_rport");
                     setflag(6);    # Mark as NATed
                 };
         };

         # 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
         if (!method=="REGISTER") record_route();

         # subsequent messages withing a dialog should take the
         # path determined by record-routing
         if (loose_route()) {
                 # mark routing logic in request
                 append_hf("P-hint: rr-enforced\r\n");
                 route(1);
                 break;
         };

         if (!uri==myself) {
                 # mark routing logic in request
                 append_hf("P-hint: outbound\r\n");
                 route(1);
                 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") {
		 	log("LOG: in register main");

# Uncomment this if you want to use digest authentication
                        if (!www_authorize("61.16.236.180", "subscriber")) {
                                www_challenge("61.16.236.180", "0");
                                break;
                        };

                         save("location");
                         break;
                 };

                 lookup("aliases");
                 if (!uri==myself) {
                         append_hf("P-hint: outbound alias\r\n");
                         route(1);
                         break;
                 };


                 # native SIP destinations are handled using our USRLOC DB
                 if (!lookup("location")) {
                         sl_send_reply("404", "Not Found");
                         break;
                 };
         };
         append_hf("P-hint: usrloc applied\r\n");
         route(1);
}

route[1]
{
         # !! Nathelper
         if (uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)" && 
!search("^Route:")){
             sl_send_reply("479", "We don't forward to private IP  
addresses");
             break;
         };

         # if client or server know to be behind a NAT, enable relay
         if (isflagset(6)) {
             force_rtp_proxy();
         };

         # NAT processing of replies; apply to all transactions (for 
example,
         # re-INVITEs from public to private UA are hard to identify as
         # NATed at the moment of request processing); look at replies
         t_on_reply("1");
	setflag(1);
		setflag(3);
         # send it out now; use stateful forwarding as it works reliably
         # even for UDP2TCP
         if (!t_relay()) {
                 sl_reply_error();
         };
}

# !! Nathelper
onreply_route[1] {
     # NATed transaction ?
     if (isflagset(6) && status =~ "(183)|2[0-9][0-9]") {
         fix_nated_contact();
         force_rtp_proxy();
     # otherwise, is it a transaction behind a NAT and we did not
     # know at time of request processing ? (RFC1918 contacts)
     } else if (nat_uac_test("1")) {
         fix_nated_contact();
     };
}

_________________________________________________________________
Marriage?  http://www.bharatmatrimony.com/cgi-bin/bmclicks1.cgi?74 Join 
BharatMatrimony.com for free.




More information about the sr-users mailing list