SER example NAThelper

Using SER as an outbound SIP proxy with NAT support


SIP Express Router, SER, can be used to help overcome the problem of SIP clients behind NAT devices trying to communicate with phones on the other side of the Internet - through the NAT.

What's needed


Diagram

REQUEST: It would be nice to see a diagram for this example. Explaining the location of UA's, SER, private and public IPs.

Example of configuration



Nathelper/rtpproxy has been changing rapidly, see recent mailing list messages and check out this
example.
jht2 12/25/03




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





See also


Using SER as an outbound SIP proxy with NAT support


SIP Express Router, SER, can be used to help overcome the problem of SIP clients behind NAT devices trying to communicate with phones on the other side of the Internet - through the NAT.

What's needed


Diagram

REQUEST: It would be nice to see a diagram for this example. Explaining the location of UA's, SER, private and public IPs.

Example of configuration



Nathelper/rtpproxy has been changing rapidly, see recent mailing list messages and check out this
example.
jht2 12/25/03




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





See also


Created by: oej, Last modification: Tue 05 of Jun, 2007 (05:47 UTC) by sobomax
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+