[Serusers] ZyXel P2000w wlan SIP UA's

mike mseppane at dc.turkuamk.fi
Fri May 28 10:06:53 CEST 2004


Maybe I should be more specific with the question.

At the moment I am only testing IP-to IP without PSTN connectivity. I'm  
still waiting for an FXO module for my channelbank Adtran Atlas 550-series  
(anyone tested this?)which I plan on integrating w/ Asterisk. . maybe.  
Basically I now have SER /RTP running with a basic configuration. See  
below--> I have been modifying ser.cfg lots just to experiment and learn.  
I have two separate locations at my use , the other office(1) being behind  
a NAT and on the other side where my research lab(2) is  no NAT/firewall  
with public addresses. On top of this I have a public hotspot available to  
my lab which uses RADIUS/LDAP authentication with a pre-assigned login  
name and password.

To get to the point then.

At office 1, When I first received the phones, tried them out behind a  
D-link wireless router, so basically it was behind two nat's :( (what's  
the scenario on this?) Inside the private dhcp-generated IP-space, calls  
between the UA's worked fine. phones sip-settings as my SER  
(sip3.dc.turkuamk.fi) for both proxy and outgoing. SER did log an incoming  
request, but at the moment didn't even have NAT-helper conf.d. so the  
reply was lost. Even afterwards the phones would not register to my  
server. Now my research-lab doesn't have a wireless network except for the  
hotspot. The Prestige finds the network and receives an IP-address, but  
fails to make calls and register on both sip3.dc.turkuamk.fi server nor  
iptel.org servers. To my understanding the "SPARKNET" hotspot uses also  
ssl encryption, but I'm not sure. I am also a bit strange on the  
authentication scenario due to the public access point. The phone has no  
setting for such authentication. Ofcourse there is the SIP-setting  
username and password, but that's it.

Otherwise my current configuration has worked fine for softphones,  
(kphone, M$-mes.. and SCS-client)making, receiving and registering calls  
and UA's using the digest authentication scheme
even behind the NAT. Sip-clients work fine on my laptop on the hotspot.

Maybe I should get another d-link wireless network... :)

  thanks,

  Michael Seppänen

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

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

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="sip3.dc.turkuamk.fi"
alias="wlan.turkuamk.fi"
alias="sip.dc.turkuamk.fi"
alias="turkuamk.fi"
alias="brage-dataware.fi"
alias="10.42.1.179"
alias="93.166.139.107"
listen=193.166.135.116
# ------------------ module loading ----------------------------------

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/acc.so"
loadmodule "/usr/lib/ser/modules/exec.so"
loadmodule "/usr/lib/ser/modules/group.so"
#loadmodule "/usr/lib/ser/modules/msilo.so"
loadmodule "/usr/lib/ser/modules/textops.so"
#loadmodule "/usr/lib/ser/modules/uri.so"
loadmodule "/usr/lib/ser/modules/nathelper.so"

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

# -- usrloc params --

modparam("usrloc", "db_mode", 2)

# -- auth params --

modparam("auth_db", "calculate_ha1", yes)

modparam("auth_db", "password_column", "password")

# -- rr params --

modparam("rr", "enable_full_lr", 1)

# !! Nathelper
modparam("registrar", "nat_flag", 6)
modparam("nathelper", "natping_interval", 30) # Ping interval 30 s
#modparam("nathelper", "ping_nated_only", 1)   # Ping only clients behind  
NAT

# -------------------------  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 ( 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
                     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
                 };
         #};
	# 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") {

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

			save("location");
			break;
		};
		lookup("aliases");
             if (!uri==myself) {
                  append_hf("P-hint: outbound alias\r\n");
                  route(1);
                  break;
		};
	
		lookup("aliases");
		# native SIP destinations are handled using our USRLOC DB
		if (!lookup("location")) {
			sl_send_reply("404", "Not Found");
			break;
		};
	};
	
	# 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();
	};
	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");

         # 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 {
         fix_nated_contact();
     };
}


  _______________________________________________
> Serusers mailing list
> serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers



-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/




More information about the sr-users mailing list