NSIS                                                       A. Pashalidis
Internet-Draft                                             H. Tschofenig
Expires: January 12, 2006                                        Siemens
                                                           July 11, 2005


                        NAT Traversal for GIMPS
            draft-pashalidis-nsis-gimps-nattraversal-00.txt

Status of this Memo

   By submitting this Internet-Draft, each author represents that any
   applicable patent or other IPR claims of which he or she is aware
   have been or will be disclosed, and any of which he or she becomes
   aware will be disclosed, in accordance with Section 6 of BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-
   Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt.

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

   This Internet-Draft will expire on January 12, 2006.

Copyright Notice

   Copyright (C) The Internet Society (2005).

Abstract

   This document contains a number of mechanisms that may be used in
   order to enable General Internet Messaging Protocol for Signaling
   (GIMPS) messages to traverse different types of Network Address
   Translators that may be located along the path between two adjecent
   NSLP hosts.






Pashalidis & Tschofenig    Expires January 12, 2006             [Page 1]


Internet-Draft           NAT traversal for GIMPS               July 2005


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  4
   3.  Problem Statement  . . . . . . . . . . . . . . . . . . . . . .  5
   4.  Assumptions  . . . . . . . . . . . . . . . . . . . . . . . . .  7
   5.  Traversal of GaNATs in the absence TLS or IPsec  . . . . . . .  9
     5.1   NSLP-unaware GaNATs  . . . . . . . . . . . . . . . . . . .  9
       5.1.1   NI-side NSLP-unaware GaNATs  . . . . . . . . . . . . .  9
       5.1.2   NR-side NSLP-unaware GaNATs  . . . . . . . . . . . . . 14
     5.2   NSLP-aware GaNATs  . . . . . . . . . . . . . . . . . . . . 17
     5.3   Combination of NSLP-aware and NSLP-unaware GaNATs  . . . . 20
   6.  GaNATs in the presence of TLS or IPSec . . . . . . . . . . . . 22
     6.1   NSLP-unaware GaNATs  . . . . . . . . . . . . . . . . . . . 22
       6.1.1   NI-side NSLP-unaware GaNATs  . . . . . . . . . . . . . 22
       6.1.2   NR-side NSLP-unaware GaNATs  . . . . . . . . . . . . . 26
       6.1.3   Additional GIMPS peer processing . . . . . . . . . . . 28
     6.2   NSLP-aware GaNATs  . . . . . . . . . . . . . . . . . . . . 30
   7.  NSIS-unaware NATs  . . . . . . . . . . . . . . . . . . . . . . 31
   8.  Security Considerations  . . . . . . . . . . . . . . . . . . . 34
     8.1   Service Denial Attacks . . . . . . . . . . . . . . . . . . 34
     8.2   Network Intrusions . . . . . . . . . . . . . . . . . . . . 35
   9.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 37
   10.   IAB Considerations . . . . . . . . . . . . . . . . . . . . . 38
   11.   IANA Considerations  . . . . . . . . . . . . . . . . . . . . 39
   12.   Normative References . . . . . . . . . . . . . . . . . . . . 39
       Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 39
       Intellectual Property and Copyright Statements . . . . . . . . 40























Pashalidis & Tschofenig    Expires January 12, 2006             [Page 2]


Internet-Draft           NAT traversal for GIMPS               July 2005


1.  Introduction

   Network Address Translators (NATs) modify certain fields in the IP
   header of the IP packets that traverse them.  In the context of
   signalling as defined by the NSIS group, this behaviour, if not
   properly addressed, may lead to the installation of inconsistent and
   meaningless state at network nodes with respect to the actual traffic
   that traverses these nodes.

   This document proposes a collection of algorithms that have to be
   implemented in order to enable GIMPS signalling, and the data flows
   to which this signalling refers, to traverse NATs in a way that
   preserves the consistency of state that is installed in the network,
   and in a manner transparent to signalling applications.  The document
   is organised as follows.  The next section introduces the terminology
   that is used throughout this document.  Section 3 provides a detailed
   discussion of the problems that are addressed by this document.
   Section 4 list the assumptions on which the proposed mechanisms are
   based.  Section 5 presents the proposed mechanisms for the case where
   no TLS or IPsec protection is required for the signalling traffic
   between two NSLP peers, and Section 6 presents the proposed
   mechanisms where such protection is required.





























Pashalidis & Tschofenig    Expires January 12, 2006             [Page 3]


Internet-Draft           NAT traversal for GIMPS               July 2005


2.  Terminology

   The terminology, abbreviations and notational conventions that are
   used throughout the document are as follows.

   o  DR:             Data Responder, as defined in [1]

   o  DS:             Data Sender, as defined in [1]

   o  GaNAT:          GIMPS-aware NAT - A GaNAT may implement a number
      of NSLPs, but does not implement the NATFW NSLP.

   o  GIMPS:          General Internet Messaging Protocol for Signalling
      [1]

   o  NAT:            Network Address Translator

   o  NI:             NSIS Initiator, as defined in [1]

   o  NR:             NSIS Responder, as defined in [1]

   o  NSIS:           Next Steps in Signalling, as defined in [1]

   o  NSIS-aware:     Implements GIMPS and zero or more NSLPs.

   o  NSIS-unaware:   GIMPS-unaware, does not implement any NSLP.

   o  NSLP:           NSIS Signalling Layer Protocol, as defined in [1]

   o  downstream:     as defined in [1]

   o  upstream:       as defined in [1]

   o  MRI:            Message Routing Information, as defined in [1]

   o  NLI.IA:         Interface Address field of the Network Layer
      Information header field, as defined in [1]

   o  <- :         Assignment operator.  The quantity to the right of
      the operator is assigned to the variable to its left.

   o  A.B:            Element B of structure A. Example: [IP
      header].SourceIPAddress denotes the source IP address of an IP
      header.

   o  [data item]:    This notation indicates that "data item" is a
      single identifier of a data structure.  (Square brackets do not
      denote optional arguments in this document.)



Pashalidis & Tschofenig    Expires January 12, 2006             [Page 4]


Internet-Draft           NAT traversal for GIMPS               July 2005


3.  Problem Statement

   According to [1], all GIMPS messages carry IP addresses in order to
   define the data flow to which the signalling refers.  Moreover,
   certain GIMPS messages also carry the IP address of the sending peer,
   in order to enable the receiving peer to address subsequent traffic
   to the sender.  Packets that cross an addressing boundary, say from
   addressing space S1 to S2, have the IP addresses in the IP header
   translated from space S1 to S2 by the NAT; if GIMPS payloads are not
   translated in a consistent manner, the MRI in a GIMPS packet that
   crosses the boundary, e.g. from address space S1 to S2, refers to a
   flow that does not exist in S2.  In fact, the flow is invalid in S2
   because at least one of the involved IP addresses belongs to S1.
   Moreover, the IP address of the sending peer may also be invalid in
   the addressing space of the receiving peer.  The purpose of this
   document is to describe a way for GIMPS messages to be translated in
   a way consistent with the translation that NATs apply to the IP
   headers of both signalling and data traffic.

   A NAT may either be NSIS-unaware or NSIS-aware.  The case of NSIS-
   unaware NATs is discussed in Section 7.  If the NAT is NSIS-aware, it
   is typically also able to support at least one NSLP.  Note that there
   exists an NSLP, namely the NATFW NSLP [2], that specifically
   addresses NAT traversal for data flows.  Inevitably, the NATFW NSLP
   also provides the necessary mechanisms for the related signalling to
   traverse the NATs involved.  Therefore, we can further divide NSIS-
   aware NATs into two categories, namely GIMPS-and-NATFW-aware NATs and
   GIMPS-aware-and-NATFW-unaware NATs.  In the sequel, we call the
   latter simply GIMPS-aware NATs (GaNATs).  A GIMPS-and-NATFW-aware NAT
   performs NAT traversal according to the NATFW NSLP; the case of NAT
   traversal in the presence of such NATs is therefore beyond the scope
   of this document.

   As is natural, a NATFW-aware NAT only translates the relevant fields
   for the NATFW signalling traffic in a way consistent with the
   relevant data flow.  Consequently, GIMPS signalling in the presence
   of NATFW-unaware NATs and for NSLPs other than the NATFW NSLP remains
   an open problem.  This document precisely addresses this problem, by
   proposing mechanisms that operate at the GIMPS layer.

   In general, a given data flow between a data sender (DS) and a data
   receiver (DR) may have to traverse a number of NATs, some of which
   may be GIMPS-and-NATFW-aware, some may be GIMPS-aware, and some may
   be NSIS-unaware.  Additionally, NSLP signalling for such a data flow
   may be required to traverse through a subset of those NATs.  Whether
   or not the routing inftrastructure and state of the network causes
   the signalling for such a data flow to traverse the same NATs as the
   flow depends, among other things, on the signalling application.



Pashalidis & Tschofenig    Expires January 12, 2006             [Page 5]


Internet-Draft           NAT traversal for GIMPS               July 2005


   While signalling of a QoS NSLP, for example, might not traverse any
   of the NATs that are traversed by the data flow, the signalling of
   the NATFW NSLP traverses at least those NATs that implement the NATFW
   NSLP (otherwise the signalling path would no longer be coupled to the
   data path, as this coupling is defined by the GIMPS QUERY/RESPONSE
   discovery mechanism).  It is desirable for every possible combination
   of NATs, either on the data or the signalling path, to be functional
   and secure.

   Due to the GIMPS QUERY/RESPONSE discovery mechanism (according to
   which QUERY messages are simply forwarded if the current node does
   not support the required NSLP), two GIMPS nodes identify themselves
   as NSLP peers only if they both implement the same NSLP, say NSLP X.
   This means that, if one or more X-unaware NATs are between them, then
   the two X peers are not able to discover each other at all.  This is
   because, even in the unlikely event that the bindings necessary for
   the GIMPS traffic to traverse the in-between NAT(s) exist, the NLI.IA
   Object included in the RESPONSE message sent by the downstream
   X-aware peer will be invalid (i.e. the IP address will be
   unreachable) in the address space of the upstream X peer.  In order
   to overcome this limitation, either the two X peers need to cope with
   the in-between NAT(s), or, if the NAT(s) are GaNATs, they (the
   GaNATs) need to apply additional processing in order to transparently
   create and maintain the required consistency.  Additionally, if
   X-aware NATs are on the data path (where X is any NSLP except NATFW),
   then these NATs should process X traffic in a way the preserves
   consistency after address translation.  This processing deviates from
   the processing of X-aware non-NAT nodes.  In the following sections
   we propose certain processing rules that aim to overcome the
   limitation of two adjacent X peers not being able to execute X in the
   presence of in-between NAT(s).  We do not consider the case where
   X=NATFW and all NAT(s) on the path are NATFW-aware.  This case is
   handled by the NATFW NSLP.

   Note that we have to deal with a number of different situations,
   depending on whether X is supported by the GaNATs.  Thus, we have the
   following three subcases.

   o  all GaNAT(s) are X-unaware

   o  all GaNAT(s) are X-aware (and X is not the NATFW NSLP)

   o  a combination of X-aware and X-unaware GaNATs are between to X
      peers.

   In the following sections, we discuss the three cases separately.





Pashalidis & Tschofenig    Expires January 12, 2006             [Page 6]


Internet-Draft           NAT traversal for GIMPS               July 2005


4.  Assumptions

   The discussion in this document is based on the following
   assumptions.  Note that X denotes a fixed NSLP, other than the NATFW
   NSLP.

   1.  No IP addresses and port numbers are carried in the payloads of
       X.

   2.  The path taken by the signalling traffic between those X peers
       that have GaNATs in between is such that the responses to packets
       that a GaNAT sends on given interface arrive on the same
       interface (if such responses are sent at all).

   3.  The path taken by signalling traffic remains fixed between the
       two X peers, as far as the in-between GaNATs are concerned.  That
       is, we assume that signalling traffic traverses the same GaNAT(s)
       until at least one of the following conditions is met.

       *  The NSIS state that is installed at the two X peers expires.

       *  The NSIS state that is installed at the two X peers is
          refreshed using a GIMPS QUERY.

       *  A new GIMPS QUERY/RESPONSE exchange takes place due to other
          reasons, e.g. a detected route change.

       Note that this assumption is not necessarily met by "normal" data
       path coupled signalling.  This is because, under "normal" data
       path coupled signalling, the signalling traffic is "coupled" to
       the data traffic at nodes that implement X. Thus, under "normal"
       path coupled signalling, it is not an error condition (e.g. a
       "route change"), for example, if the set of on-path (non-X) GIMPS
       nodes changes, as long as adjacent X peers remain the same.

   4.  The data flow traverses the same set of GaNATs as the signalling
       traffic.  By assumption 3, this set of GaNATs is fixed until the
       next GIMPS QUERY/RESPONSE procedure is executed.













Pashalidis & Tschofenig    Expires January 12, 2006             [Page 7]


Internet-Draft           NAT traversal for GIMPS               July 2005


                           +-----+
                      +----+GaNAT|-----+
                      |    |  A  |     |
                      |    +-----+     |
        +------+  +------+          +--+---+  +------+
   +--+ |X NSLP|  |  IP  |          |  IP  |  |X NSLP| +--+
   |DS+-+peer  +--+router|          |router+--+peer 2+-+DR|
   +--+ +------+  +---+--+          +--+---+  +------+ +--+
                      |    +-----+     |
                      |    |GaNAT|     |
                      +----+  B  +-----+
                           +-----+

    Figure 1: Network with more than one NAT at an addressing boundary

   Figure 1 illustrates the importance of assumptions (3) and (4).  With
   regard to that figure, suppose that a (D-mode) signalling session has
   been setup between the two adjacent X NSLP peers 1 and 2 and that
   both signalling and data traffic follows the path X NSLP peer 1 -> IP
   router -> GaNAT A -> IP router -> X NSLP peer 2.  Suppose now that,
   after some time, X peer 1 decides to set up a C-mode connection with
   peer 2.  Suppose moreover that the left IP router decides to forward
   the C-mode signalling traffic on the link towards GaNAT B. Thus,
   signalling traffic now follows the alternative path X NSLP peer 1 ->
   IP router -> GaNAT B -> IP router -> X NSLP peer 2.  Note that this
   change in forwarding between the two adjacent X NSLP peers does not
   trigger a "route change" at the GIMPS layer because (a) it does not
   destroy the adjacency of peer 1 and 2 and (b) it does not destroy the
   coupling of the path taken by signalling traffic to that taken by
   data traffic (at X-aware nodes).  Nevertheless, assumptions (3) and
   (4) mandate that this situation does not occur.  However, even if
   such a situation occurs, the proposals in this document still work.

   If assumption (1) does not hold, X has to provide additional
   mechanisms for the traversal of (Ga)NATs.  These mechanisms must be
   compatible with the mechanisms described in this document.
   Assumptions (2), (3) and (4) hold if, at an addressing boundary, only
   one NAT exists.  Due to security and management reasons, this is
   likely to be the case in many settings.












Pashalidis & Tschofenig    Expires January 12, 2006             [Page 8]


Internet-Draft           NAT traversal for GIMPS               July 2005


5.  Traversal of GaNATs in the absence TLS or IPsec

   This section describes the operation of GIMPS-aware NATs when no
   cryptographic protection of signalling data is requested by two NSLP
   peers.  The situation when such protection is required is discussed
   in Section 6.

   Recall that by GaNAT we mean a NAT that implements GIMPS but does not
   implement the NATFW NSLP.  In this section we discuss the possibility
   of two NSIS peers that implement a given NSLP, denoted as X, to
   discover each other and subsequently exchange signalling messages in
   the presence of one or more GaNATs in between.  Note that X may be
   any NSLP including the NATFW NSLP (however, if X=NATFW we do not
   consider X-aware GaNATs).

   Note that we have to deal with three subcases, namely (a) the case
   where all GaNAT(s) are X-unaware, (b) the case where all GaNAT(s) are
   X-aware (and X is not the NATFW NSLP), and (c) the case where a
   combination of X-aware and X-unaware GaNATs are between to X peers.
   We discuss the three cases separately.

5.1  NSLP-unaware GaNATs

   This section describes the algorithm that an X-unaware GaNAT must
   execute in order to enable the signalling traffic of two X peers to
   traverse the GaNAT in a transparent (for the two peers) manner.  The
   notation A.B denotes the field B of data structure A.

   Note that we have to deal with two types of GaNATs, namely those that
   are located at the NSIS initiator (NI-side), and those that are
   located at the NSIS responder (NR-side).  This distinction arises due
   to the fact that NI-side and NR-side GaNATs obtain the destination IP
   address for forwarded packets in different ways.

5.1.1  NI-side NSLP-unaware GaNATs

   For every arriving IP packet P, an NSLP-unaware, NI-side GaNAT
   executes the following algorithm.

   1.  If P has a RAO followed by the GIMPS header with an NSLP ID that
       is not supported, it is identified as a GIMPS QUERY.  In this
       case the GaNAT performs the following.

       1.  We denote P as GQ.  It looks at the stack proposal ST in GQ.
           If it indicates that cryptographic protection is required,
           the algorithm that is executed is the one described in
           Section 6.




Pashalidis & Tschofenig    Expires January 12, 2006             [Page 9]


Internet-Draft           NAT traversal for GIMPS               July 2005


       2.  The GaNAT remembers GQ along with the interface on which it
           arrived.  We call this interface the "upstream link".

       3.  It searches its table of existing NAT bindings against
           entries that match the GQ.MRI.  A matching entry means that
           the data flow, to which the signalling refers, already
           exists.

           1.  If a matching entry is found, the GaNAT looks at which
               link the packets of the data flow are forwarded; we call
               this link the "downstream" link.  Further, the GaNAT
               checks how the headers of the data flow (IP addresses,
               port numbers, etc) are translated according to this NAT
               binding.  We denote [IP header].SourceIPAddress used on
               the downstream link as IPGaNATds, and the source port
               number used to forward the data traffic as SPNDTGaNATds.
               The NAT may also use a different source port number when
               forwarding signalling traffic.  This port number is
               denoted as SPNSTGaNATds.

           2.  If no matching entry is found, the GaNAT determines,
               based on its routing table, the link on which packets
               that match GQ.MRI (excluding GQ.MRI.SourceIPAddress)
               would be forwarded.  We call this link the "downstream
               link".  Then, the GaNAT acquires an IP address for itself
               on the downstream link.  (This address could be dynamic
               or static.)  This address will be used to forward both
               signalling and data traffic on the downstream link.  If
               it also performs port translation, the GaNAT also
               acquires a source port number for the data traffic on the
               downstream link.  This will be used with the NAT binding,
               if such a binding will be established for the data
               traffic at a later stage, and is denoted as SPNDTGaNATds
               .  The signalling traffic packets may also be forwarded
               using the a different source port number as the incoming
               packets.  We denote the acquired IP address as IPGaNATds
               and the source port number for the signalling traffic as
               SPNSTGaNATds.

               Issues: The reason why the GaNAT may also assign a
               different source port number to the signalling traffic,
               is to enable the GaNAT to demultiplex (i.e. forward to
               the correct internal address) the signalling responses
               that arrive from downstream.  Of course, a GaNAT does not
               need to actually change the source port of signalling
               traffic; it can always use SPNSTGaNATds the same port as
               in the incoming packet.  Such a GaNAT may use the GIMPS
               session id in order to demultiplex the traffic that



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 10]


Internet-Draft           NAT traversal for GIMPS               July 2005


               arrives from the downstream direction.  It is unclear
               which of the two approaches is preferable.

       4.  It creates a new GIMPS QUERY packet GQ', as follows.

           1.  GQ' <- GQ

           2.  GQ'.MRI.SourceIPAddress <- IPGaNATds

           3.  GQ'.MRI.SourcePortNumber <- SPNDTGaNATds

           4.  GQ'.[IP header].SourceIPAddress <- IPGaNATds

           5.  GQ'.[TRANSPORT_LAYER_HEADER].SourcePort <- SPNSTGaNATds

           6.  GQ'.NLI.IA <- IPGaNATds

           7.  GQ'.S <- true

       5.  It remembers GQ and GQ', the fact that they are associated,
           and the associated upstream and downstream links.  (Note: The
           GaNAT does not have to remember the entire packets; for
           simplicity of exposition, however, we assume it does.  An
           implementation SHOULD discard at this point all information
           that is not used later.)

       6.  It forwards GQ' on the downstream link.

   2.  Otherwise, if P carries a [IP header].DestinationIPAddress that
       belongs to the GaNAT, and if it is identified as a GIMPS response
       in D-mode with an NSLP ID that is not supported, the GaNAT does
       the following (P is denoted as GR).

       1.  It searches for a matching GQ' in its buffer.  A GR is said
           to match a GQ' if they carry the same cookie value.  If none
           is found, GR is discarded.  Otherwise, the GaNAT may also
           perform further consistency checks on a matching GR/GQ' pair,
           such as checking that they contain the same session IDs,
           MRIs, NSLP IDs.  If consistency checks succeed, the GaNAT
           constructs a new GIMPS response GR', as follows.

           1.  GR' <- GR

           2.  GR'.MRI <- GQ.MRI, where GQ is the packet associated with
               GQ'(as remembered previously), and GQ' is the packet that
               matches the received GR.





Pashalidis & Tschofenig    Expires January 12, 2006            [Page 11]


Internet-Draft           NAT traversal for GIMPS               July 2005


           3.  GR'.[IP header].SourceIPAddress <- IPGaNATus, where
               IPGaNATus = GQ.[IP header].DestinationIPAddress.

           4.  GR'.[IP header].DestinationIPAddress <- GQ.NLI.IA

           5.  GP'.S <- true.

           6.  It inspects the stack proposals in GR' and the
               corresponding GQ' to see if the upstream X peer has a
               choice of more than one possible stack.  If such choice
               exists, the GaNAT removes as many stack proposals from
               GR' as necessary, until only one stack can be chosen by
               the upstream peer for the messaging association.  We
               denote this stack as ST.  The GaNAT remembers this ST and
               its association with GQ, GQ', GR, GR'.  We say that, in
               this case, the GaNAT "installs" the ST.

       2.  It forwards GR' on the upstream link.

       3.  If no NAT binding for the data traffic was found in step
           1.3.2, the GaNAT now installs a NAT binding (for the
           unidirectional data traffic) which says that "a packet K that
           arrives on the upstream link and for which it holds that

           +  K.[IP
              header].DestinationIPAddress=GQ.MRI.DestinationIPAddress,

           +  K.[IP header].Protocol=GQ.MRI.Protocol, and

           +  K.[TCP/UDP header].SourcePort=GQ.MRI.SourcePort

           should be forwarded on the downstream link, with [IP
           header].SourceIPAddress = IPGaNATds.

           Issues: there is a question of whether this NAT binding
           should also enable data traffic in the opposite direction to
           traverse the NAT; in order to be able to demultiplex upstream
           traffic that carries data that belongs to different flows,
           the GaNAT should keep the necessary per-flow state.  From a
           signalling point of view, however, upstream data traffic that
           corresponds (on the application level) to the downstream flow
           to which this GIMPS session refers, is a separate flow for
           which, dependent on the application, there may or there may
           not exist a signalling session.  If such a signalling session
           exists, then the GaNAT acts as an NR-side GaNAT for this
           session.  Thus, during the processing of this signalling care
           has to be taken not to establish a NAT binding for a flow for
           which a NAT binding already exists.  Finally, security issues



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 12]


Internet-Draft           NAT traversal for GIMPS               July 2005


           arise when traffic, for which no signalling exists, is
           allowed to traverse a GaNAT.

           Another issue is about refreshing the NAT binding.  A NAT
           binding that was established as a result of GIMPS signalling
           should remain in place as long as the associated GIMPS state
           in the GaNAT remains valid.  If GIMPS signalling refers to a
           NAT binding that already exists, then the timeout of the NAT
           binding should occur according to the NAT policy, in a manner
           independing from GIMPS processing.  (If signalling persists
           after the deletion of a NAT binding, then the NAT binding may
           be re-installed and then timeout together with GIMPS state).

   3.  Otherwise, if P.[IP header].DestinationIPAddress belongs to the
       GaNAT, and if P is a GIMPS packet (either in D-mode or C-mode),
       the GaNAT does the following.  If P does not match an existing
       installed ST, P is silently discarded.  (A packet P is said to
       "match" an installed ST, if it carries the transport protocol and
       port numbers indicated by ST.)  Otherwise, if P has not arrived
       on either the downstream or upstream link of some ST, it is
       silently discarded.  Otherwise, P has arrived either on the
       upstream or the downstream of some ST.  The GaNAT constructs an
       outgoing packet P' as follows (the variables used below refer to
       those stored together with the ST in question).

       1.  P' <- P

       2.  If P has arrived on the upstream link, then

           1.  P'.[IP header].SourceIPAddress <- IPGaNATds

           2.  P'.MRI <- GQ'.MRI

           3.  P'.NLI.IA <- IPGaNATus

           4.  The GaNAT forwards P' on the downstream link.

       3.  else (if P has arrived on the downstream link)

           1.  P'.[IP header].SourceIPAddress <- IPGaNATus

           2.  P'.MRI <- GQ.MRI

           3.  P'.NLI.IA <- IPGaNATus

           4.  The GaNAT forwards P' on the upstream link.





Pashalidis & Tschofenig    Expires January 12, 2006            [Page 13]


Internet-Draft           NAT traversal for GIMPS               July 2005


           Note: the above step will fail if ST indicates security.
           That is, if traffic is encrypted, then the GaNAT cannot
           construct P', and if traffic is integrity-protected,
           performing this step will cause an error at the receiving X
           peer.  However, recall that, in this section, we only discuss
           the scenario where such cryptographic protection is not
           required.

   4.  Otherwise, if P matches a (data) NAT binding, the GaNAT applies
       normal NAT processing and forwards the packet on the
       corresponding link.

   5.  Otherwise, P is silently discarded.

   Brief discussion of the algorithm: The fact that the GaNAT replaces
   the X peer's NLI.IA with its own IP address (in both directions),
   causes the peers to send subsequent signalling messages to the GaNAT,
   in the belief that they talk to the their adjacent X peer.  The GaNAT
   transparently forwards the signalling traffic and appropriately
   translates the fields in the GIMPS header, by making use of the state
   it creates bindings.

   Due to the presence of the GaNATs, no data traffic can be sent from
   DS to DR until all necessary bindings are in place.  The MRI that the
   NR sees includes as destination address the IP address of the DR (as
   expected), but as source address the IPGaNATds of the GaNAT that is
   closest to the NR.

5.1.2  NR-side NSLP-unaware GaNATs

   The case of NR-side GaNATs is more subtle, since, in this setting,
   the DS does not learn the IP address of the DR (which is assumed to
   be on the same side of the GaNATs as the NR) and the NI does not
   learn the address of the NR.  In this setting we assume that each NR-
   side GaNAT that is in between two X peers, a priori knows the IP
   address of the downstream GaNAT.  The last GaNAT of this chain is
   assumed to know the IP address of the DR.  In order to clarify this
   assumption, see, for example, Figure 2.  In this figure, GaNAT A is
   assumed to know the IP address of GaNAT B, GaNAT B is assumed to know
   the IP address of GaNAT C, and GaNAT C is assumed to know the IP
   address of the DR.  A given GaNAT that knows such an address, in
   effect anticipates to receive a signalling message from the upstream
   direction that refers to a data flow that terminates in a downstream
   node.  In other words, such a GaNAT may typically have already a NAT
   binding in place for the data traffic.  We call the IP address of the
   next downstream GaNAT (or, if the GaNAT is the last in the chain, the
   DR) the "pending" IP address.  In the following description it is
   denoted by IPNext.  How IPNext is made known to each GaNAT (e.g. how



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 14]


Internet-Draft           NAT traversal for GIMPS               July 2005


   the NAT binding for the data traffic is installed in the GaNAT) is
   outside the scope of this document.



   +--+  +------+   +-----+   +-----+   +-----+   +------+  +--+  +--+
   +NI+--+X NSLP+---+GaNAT+---+GaNAT+---+GaNAT+---+X NSLP+--+NR+--+DR|
   +--+  |peer 1|   |  A  |   |  B  |   |  C  |   |peer 2|  +--+  +--+
         +------+   +-----+   +-----+   +-----+   +------+

   Figure 2: Network with NR-side GaNATs (the public Internet is assumed
                    to be between NI and X NSLP peer 1)

   For every arriving IP packet P, an X-unaware, NR-side GaNAT executes
   the following algorithm.

   1.  If P has a RAO followed by the GIMPS header with NSLP ID = X, it
       is identified as a GIMPS QUERY.  In this case the GaNAT does the
       following.

       1.  We denote P as GQ.  The GaNAT looks at the stack proposal ST
           in GQ.  If it indicates that cryptographic protection is
           required, the algorithm that is executed is the one described
           in section Section 6 below.

       2.  The GaNAT remembers GQ along with the link on which it
           arrived.  We call this link the "upstream" link.

       3.  The GaNAT determines whether or not this GIMPS QUERY is
           anticipated, i.e. if a pending IPNext exists.  If no IPNext
           is pending, P is discarded (it is a question whether or not
           an error message should be sent).  Otherwise, additional
           checks may be performed (e.g. a DSInfo object may have to be
           checked against the GQ).  If these checks fail, P is
           discarded.  Otherwise, the GaNAT performs the following.

       4.  It searches its table of existing NAT bindings against
           entries that match the GQ.MRI.  A matching entry means that
           the data flow, to which the signalling refers, already
           exists.

           +  If a matching entry is found, the GaNAT looks at which
              link the packets of the data flow are forwarded; we call
              this link the "downstream" link.  Further, the GaNAT
              checks how the headers of the data flow (IP addresses,
              port numbers, etc) are translated according to this NAT
              binding.  We denote [IP header].SourceIPAddress used on
              the downstream link as IPGaNATds, and the source port



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 15]


Internet-Draft           NAT traversal for GIMPS               July 2005


              number as SPNDTGaNATds.  Note that the [IP
              header].DestinationIPAddress of this NAT binding should be
              equal to IPNext.  If it is not, this should be handled as
              an auditive error condition.  The GaNAT may also assign a
              new source port number to signalling traffic, which is
              denoted as SPNSTGaNATds.

           +  If no matching entry is found, the GaNAT determines, based
              on its routing table, the link on which packets that match
              GQ.MRI (excluding GQ.MRI.SourceIPAddress and where
              GQ.MRI.DestinationIPAddress is replaced with IPNext) would
              be forwarded.  We call this link the "downstream" link.
              Then, the GaNAT acquires an IP address for itself on the
              downstream link.  (This address could be dynamic or
              static.)  Depending on its type, the GaNAT may also
              acquire source port numbers for the translation of data
              traffic.  We denote the acquired IP address as IPGaNATds
              and the source port numbers for data and signalling
              traffic as SPNDTGaNATds and SPNSTGaNATds respectively.

       5.  It creates a new GIMPS QUERY packet GQ', as follows.

           1.  GQ' <- GQ

           2.  GQ'.MRI.SourceIPAddress <- IPGaNATds

           3.  GQ'.MRI.DestinationIPAddress <- IPNext.

           4.  GQ'.MRI.SourcePort <- SPNDTGaNATds.

           5.  GQ'.[IP header].SourceIPAddress <- IPGaNATds

           6.  GQ'.[TRANSPORT_LAYER_HEADER].SourcePort <- SPNSTGaNATds

           7.  GQ'.[IP header].Destination_IP_Address <- IPNext

           8.  GQ'.NLI.IA <- IPGaNATds.

           9.  GQ'.S <- true

       6.  It remembers GQ, GQ' the fact that they are associated, and
           the associated upstream and downstream links (interfaces).

       7.  It forwards GQ' on the downstream link.

   Steps 2,3, 4 and 5 of the algorithm are analogous to the
   corresponding steps of the algorithm executed by X-unaware, NI-side
   GaNATs, which was described in Section 5.1.1



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 16]


Internet-Draft           NAT traversal for GIMPS               July 2005


5.2  NSLP-aware GaNATs

   Recall that X may be any NSLP except NATFW.  The difference of
   X-aware GaNATs and X-unaware GaNATs is that the former perform X
   processing in addition to the processing of the X-unaware GaNATs.
   Another way to see this is by observing that X-aware GaNATs should
   provide an "MRI translation service" (MRITS) in addition to normal
   GIMPS and X processing.  The motivation behind the MRITS is for GIMPS
   to hide from the NSLP that signalling messages traverse an addressing
   boundary.  In other words, the purpose of the MRITS it to make X
   believe that it is operating in a single IP addressing space.  When
   and how the MRITS is invoked for a particular packet depends on (i)
   the direction of the packet (i.e. downstream or upstream) and (ii)
   the location of the GaNAT (i.e.  NI-side or NR-side).  It should also
   be noted that certain NSLP layer tasks must be carried out in
   consistency with the placement of the MRITS.  This is to prevent
   events triggered by X to cause installation of inconsistent state.
   In order to clarify this, consider the scenario of the QoS NSLP
   running in a GaNAT that operates according to the mechanisms
   described in this section.  Since the GaNAT only presents a single
   addressing space to the NSLP (say, the internal addressing space),
   the packet classifier of the GaNAT's QoS provisioning subsystem
   should classify packets based on internal addresses only (i.e. it
   should first translate packets that carry external addresses and then
   classify them).  Whether the MRITS presents internal-only or
   external-only addresses to the NSLP is not significant, as long as
   NSLP layer operations are carried out consistently.  In the remainder
   of this section we present the case where internal addresses are
   presented to the NSLP.

   The MRITS is obviously invoked only on GIMPS packets that carry NSLP
   identifier = X. (For other GIMPS packets the GaNAT may adopt the role
   of an X-unaware GaNAT.  Also, for non-GIMPS packets, normal NAT
   behaviour applies - whatever "normal" may mean.)  Although the MRITS
   is part of GIMPS processing, in order to clarify our discussion, we
   view it as a somewhat separate processing step (i.e. like a
   subroutine).  For NI-side, X-aware GaNATs, it holds that

   o  if a GIMPS/X packet is to be forwarded on the downstream link of
      an NI-side GaNAT, the MRITS is invoked after the packet has been
      processed by X and before it is given to GIMPS, and

   o  if a GIMPS/X packet is received on the downstream link, then the
      MRITS is invoked after GIMPS processing and before the packet is
      given to X.

   The converse holds for NR-side X-aware GaNATs.  In particular,




Pashalidis & Tschofenig    Expires January 12, 2006            [Page 17]


Internet-Draft           NAT traversal for GIMPS               July 2005


   o  if a GIMPS/X packet is to be forwarded on the upstream link of an
      NI-side GaNAT, the PTS is invoked after the packet has been
      processed by X and before it is given to GIMPS, and

   o  if a GIMPS/X packet is received on the upstream link, then the PTS
      is invoked after GIMPS processing and before X processing.

   Figure 3 illustrates this idea.


        +----------------+               +----------------+
        |  +------+      |               |     +------+   |
        |  |NSLP X|      |               |     |NSLP X|   |
        |  +-+---++      |               |     +-+--+-+   |
        |    |   |       |               |       |  |     |
        |    | +-+---+   |               |  +----++ |     |
        |    | |MRITS|   |               |  |MRITS| |     |
        |    | +---+-+   |               |  ++----+ |     |
        |    |     |     |               |   |      |     |
        |  +-+-----+-+   |               |  ++------+-+   |
        |  |  GIMPS  |   |               |  |   GIMPS |   |
    u/s |  +-+-----+-+   | d/s       u/s |  ++------+-+   | d/s
   -----+----+     +-----+-----     -----+---+      +-----+-----
   link +----------------+ link     link +----------------+ link
              NI-side                          NR-side
              X-aware                          X-aware
               GaNAT                            GaNAT


            Figure 3: Operation of the MRI Translation Service

   The reason for this construction is to give X the impression that it
   works only with flows that originate and terminate in the internal
   address space.  We now describe the operation of the MRITS and GIMPS
   in X-aware GaNATs.  An NI-side X-aware GaNAT operates according to
   the following rules.

   1.  When X asks for a message to be sent towards the downstream X
       peer, the MRITS does the following (IPGaNATds and SPNDTGaNATds
       are obtained similarly to the case of an NSLP-unaware GaNAT).

       1.  MRI.SourceIPAddress <- IPGaNATds

       2.  MRI.SourcePort <- SPNDTGaNATds

   2.  Additionally, GIMPS performs the following on the resulting
       packet before it is forwarded on the downstream link
       (SPNSTGaNATds is obtained similarly to the case of an NSLP-



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 18]


Internet-Draft           NAT traversal for GIMPS               July 2005


       unaware GaNAT).

       1.  [IP header].SourceIPAddress <- IPGaNATds

       2.  [UDP/TCP header].SourcePort <- SPNSTGaNATds

       3.  NLI.IA < IPGaNATds

       4.  S <- true

   3.  If a message is received on the downstream link, the MRITS does
       the following before X is invoked.

       1.  MRI.SourceIPAddress <- IPflow

       2.  MRI.SourcePort <- SPNDTGaNATus, where IPflow is the IP
           address of the DS (as seen by the GaNAT) and SPNDTGaNATus is
           the destination port number used in the original MRI.

   4.  If, after X processing, a message is to be forwarded on the
       upstream link, GIMPS performs the following processing (note that
       no MRITS processing takes place in this case).

       1.  [IP header].SourceIPAddress <- IPGaNATus

       2.  [IP header].DestinationIPAddress <-  IPpeer

       3.  NLI.IA <- IPGaNATus

       4.  S <- true, where IPGaNATus is the GaNATs IP address for the
           upstream link, IPpeer is the IPaddress of the NI (or the next
           GaNAT in the upstream direction), and IPflow is the IP
           address of the DS (as seen by the GaNAT).  The GaNAT is
           assumed to determine the correct IPGaNATus and IPpeer from
           previous communications and in cooperation with GIMPS.
           [Issue: how exactly should IPGaNATus, IPpeer and IPflow be
           resolved; i.e. what exactly should the GaNAT remember?]

   An NR-side X-aware GaNAT operates according to the following rules.

   1.  If the packet is received on the upstream link, the MRITS does
       the following, before X is notified.

       1.  P.MRI.SourceIPAddress <- IPGaNATds

       2.  P.MRI.DestinationIPAddress <- IPNext, where IPGaNATds is the
           GaNAT's IP address for the downstream link and IPNext is the
           address of the DR.  IPNext is obtained in a way similar to



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 19]


Internet-Draft           NAT traversal for GIMPS               July 2005


           the case of an NSLP-unaware GaNAT.

   2.  If, after X processing, a message is to be forwarded on the
       downstream link, GIMPS performs the following processing (note
       that no MRITS processing takes place in this case).

       1.  [IP header].SourceIPAddress <- IPGaNATds

       2.  [IP header].DestinationIPAddress <- IPNext

       3.  NLI.IA <- IPGaNATds

       4.  S <- true, where IPGaNATds is the GaNATs IP address for the
           downstream link, IPNext is the IP address of the DR (or the
           next GaNAT in the downstream direction).  The GaNAT is
           assumed to determine the correct IPNext in a way similar to
           the case of an NSLP-unaware GaNAT.

   3.  When X asks for a message to be sent towards the upstream X peer,
       the MRITS does the following.

       1.  MRI.SourceIPAddress <- IPflow

       2.  MRI.Destination_IP_Address <- IPGaNATus

   4.  Additionally, GIMPS performs the following on the resulting
       packet before it is forwarded on the downstream link.

       1.  [IP header].SourceIPAddress <- IPGaNATus

       2.  [IP header].DestinationIPAddress <- IPpeer

       3.  NLI.IA <- IPGaNATus

       4.  S <- true, where IPGaNATus is the GaNATs IP address for the
           upstream link, IPpeer is the IP_address of the NI (or the
           next GaNAT in the upstream direction), and IPflow is the IP
           address of the DS.  The GaNAT is assumed to determine the
           correct IPGaNATus and IPpeer fields from previous
           communications and in cooperation with GIMPS. [question: how
           exactly should IPGaNATus and IPpeer be resolved; i.e. what
           exactly should the GaNAT remember]?


5.3  Combination of NSLP-aware and NSLP-unaware GaNATs

   In the absence of an adversary, a combination of NSLP-aware and NSLP-
   unaware GaNATs should work without further specification.  However,



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 20]


Internet-Draft           NAT traversal for GIMPS               July 2005


   in the presence of an adversary, additional security issues may arise
   from the combination.  These issues may introduce opportunities for
   attack that do not exist in setting where the on-path GaNATs are
   either all X-aware or all X-unaware.















































Pashalidis & Tschofenig    Expires January 12, 2006            [Page 21]


Internet-Draft           NAT traversal for GIMPS               July 2005


6.  GaNATs in the presence of TLS or IPSec

   This section discusses GaNAT traversal for GIMPS in the case where
   two peers that run a particular NSLP, say NSLP X, require
   cryptographic protection of the signalling traffic they exchange.  As
   with the case where no cryptographic protection of signalling traffic
   is required, the case of the in-between GaNAT(s) being X-unaware is
   different from the case of them being X-aware.

6.1  NSLP-unaware GaNATs

   If the two X peers require a C-mode protocol stack that indicates
   cryptographic protection, then, after the stack has been agreed by
   both peers and the underlying cryptographic protection is applied to
   messages, the GaNAT will be unable to translate the GIMPS header
   fields, in a way similar to the way described in Section 5.1.1.  An
   approach to cope with this, is to inform the X peers about the
   presence of the NAT during discovery.  This information will enable
   the X peers, rather than the GaNAT(s) to perform the translation of
   the fields involved, after the necessary cryptographic operations
   have been completed.  In this scenario, the burden imposed on the
   GaNAT is considerably less, as the only type of GIMPS messages that
   it needs to process in a special way, are the GIMPS QUERY and GIMPS
   RESPONSE messages.

   In order to support the scenario of X-unaware GaNATs, a new GIMPS
   payload type has to be defined that encodes the aforementioned
   information.  We call this payload type the "NAT Traversal Object"
   (NTO).  The NTO is an optional payload in the GIMPS header of a GIMPS
   QUERY, and is added, and processed, by the GaNAT(s) through which the
   QUERY traverses.  The information in the NTO must enable the two X
   peers to locally translate the MRI in the same way as it would have
   been translated by the in-between GaNAT(s) if no cryptographic
   protection was applied to the signalling traffic.  Note that there
   may be more than one GaNAT between the two X peers.  We now describe
   the algorithm that an X-unaware GaNAT must execute in order to enable
   the two X peers to reach this goal.

   The two types of GaNATs, namely those at the NSIS initiator (NI)
   side, and those at the NSIS responder (NR) side, follow different
   algorithms.

6.1.1  NI-side NSLP-unaware GaNATs

   For every arriving IP packet P, an X-unaware, NI-side GaNAT executes
   the following algorithm.





Pashalidis & Tschofenig    Expires January 12, 2006            [Page 22]


Internet-Draft           NAT traversal for GIMPS               July 2005


   1.  If P has a RAO followed by the GIMPS header with an NSLP ID that
       is not supported, it is identified as a GIMPS QUERY.  In this
       case the GaNAT does the following.

       1.  We denote P as GQ.  The GaNAT looks at the stack proposal ST
           in GQ.  If it does not indicate that cryptographic protection
           is required, the algorithm that is executed is the one
           described in Section 5.1.1 above.

       2.  The GaNAT remembers GQ along with the link on which it
           arrived.  We call this link the "upstream" link.

       3.  The GaNAT searches its table of existing NAT bindings against
           entries that match the GQ.MRI.  A matching entry means that
           the data flow, to which the signalling refers, already
           exists.

           +  If a matching entry is found, the GaNAT looks at which
              link the packets of the data flow are forwarded; we call
              this link the "downstream" link.  Further, the GaNAT
              checks how the headers of the data flow (IP addresses,
              source port number, etc) are translated according to this
              NAT binding.

           +  If no matching entry is found, the GaNAT determines, based
              on its routing table, the link on which packets that match
              GQ.MRI (excluding GQ.MRI.SourceIPAddress) would be
              forwarded.  We call this link the "downstream" link.
              Then, the GaNAT acquires an IP address for itself on the
              downstream link.  (This address could be dynamic or
              static.)

       4.  We denote [IP header].SourceIPAddress used on the downstream
           link as IPGaNATds, and the source port number for the data
           and signalling traffic as SPNDTGaNATds and SPNSTGaNATds
           respectively.

       5.  It creates a new GIMPS QUERY packet GQ', as follows (note
           that the new packet contains the same MRI as GQ).

           1.  GQ' <- GQ

           2.  GQ'.[IP header].SourceIPAddress <- IPGaNATds.

           3.  GQ'.[UDP].SourcePort <- SPNSTGaNATds.

           4.  GQ'.S <- true




Pashalidis & Tschofenig    Expires January 12, 2006            [Page 23]


Internet-Draft           NAT traversal for GIMPS               July 2005


           5.  It checks whether or not a NTO is included in the GQ.

               -  If none is included, it adds a new one to GQ' such
                  that GQ'.NTO=[ IPGaNATds || SPNDTGaNATds]

               -  If one is included, it replaces it as GQ'.NTO=[
                  IPGaNATds || SPNDTGaNATds]

           6.  It remembers GQ, GQ' the fact that they are associated,
               and the associated upstream and downstream links.

           7.  It forwards GQ' on the downstream link.

   2.  Otherwise, if P carries a [IP header].DestinationIPAddress that
       belongs to the GaNAT, and if it is identified as a GIMPS response
       in D-mode with an NSLP ID that is not supported, the GaNAT does
       the following (P is denoted as GR).

       1.  It searches for a matching GQ' in its buffer.  A GQ' is said
           to be matching if it carries the same cookie value.  If none
           is found, GR is discarded.  Otherwise, the GaNAT should also
           make sure that the session ID in GR is the same as in GQ' and
           that the NSLP IDs match.  If these consistency checks fail,
           GR should be discarded.  Otherwise, the GaNAT constructs a
           new GIMPS response GR', as follows (note that no changes are
           made to the MRI).

           1.  GR' <- GR

           2.  GR'.[IP header].SourceIPAddress <- IPGaNATus, where
               IPGaNATus = GQ.[IP header].DestinationIPAddress.

           3.  GR'.[IP header].DestinationIPAddress <- GQ.NLI.IA

           4.  GP'.S <- true.

           5.  It checks whether or not a NTO is included in the GQ.

               -  If none is included, it adds a new one to GQ' such
                  that GQ'.NTO=[ IPGaNATus || PNGaNATus]

               -  If one is included, it replaces it such that GQ'.NTO=[
                  IPGaNATus || PNGaNATus]

           6.  It remembers GQ, GQ' the fact that they are associated,
               and the associated upstream and downstream links.





Pashalidis & Tschofenig    Expires January 12, 2006            [Page 24]


Internet-Draft           NAT traversal for GIMPS               July 2005


           7.  It forwards GQ' on the downstream link.

       2.  It forwards GR' on the upstream link.

       3.  If no NAT binding for the data traffic was found in step
           1.3.2, the GaNAT now installs a NAT binding (for the
           unidirectional data traffic) which says that "a packet K that
           arrives on the upstream link and for which it holds that

           +  K.[IP
              header].DestinationIPAddress=GQ.MRI.DestinationIPAddress,

           +  K.[IP header].Protocol=GQ.MRI.Protocol, and

           +  K.[TCP/UDP header].PortNumbers=GQ.MRI.PortNumbers

           should be forwarded on the upstream link, with [IP
           header].SourceIPAddress = IPGaNATus.

           Issues: there is a question of whether this NAT binding
           should also enable data traffic in the opposite direction to
           traverse the NAT; in order to be able to demultiplex upstream
           traffic that carries data that belongs to different flows,
           the GaNAT should keep the necessary per-flow state.  From a
           signalling point of view, however, upstream data traffic that
           corresponds (on the application level) to the downstream flow
           to which this GIMPS session refers, is a separate flow for
           which, dependent on the application, there may or there may
           not exist a signalling session.  If such a signalling session
           exists, then the GaNAT acts as an NR-side GaNAT for this
           session.  Thus, during the processing of this signalling care
           has to be taken not to establish a NAT binding for a flow for
           which a NAT binding already exists.  Finally, security issues
           arise when traffic, for which no signalling exists, is
           allowed to traverse a GaNAT.

   3.  Otherwise, if P carries a [IP header].DestinationIPAddress that
       belongs to the GaNAT, and if it is identified as a GIMPS CONFIRM
       in D-mode with an NSLP ID that is not supported, the GaNAT does
       the following (P is denoted as GC).

       1.  It creates a new GIMPS CONFIRM packet GC', as follows (note
           that the variables below refer to the variables that were
           used in the translation of the GIMPS QUERY that corresponds
           to GC.

           1.  GC' <- GC




Pashalidis & Tschofenig    Expires January 12, 2006            [Page 25]


Internet-Draft           NAT traversal for GIMPS               July 2005


           2.  GC'.[IP header].SourceIPAddress <- IPGaNATds.

           3.  GC'.NLI.IA <- IPGaNATds

           4.  GC'.S <- true

           5.  It checks whether or not a NTO is included in the GC.

               -  If none is included, it adds a new one to GC' such
                  that GC'.NTO=[ IPGaNATds || SPNDTGaNATds]

               -  If one is included, it replaces it as GC'.NTO=[
                  IPGaNATds || SPNDTGaNATds]

           6.  It forwards GC' on the downstream link.

   4.  Otherwise, if P matches an existing NAT binding, normal NAT
       processing is applied.

   5.  Otherwise, P is silently discarded.


6.1.2  NR-side NSLP-unaware GaNATs

   As is the case with NR-side NSLP-unaware GaNATs without security, an
   NR-side NSLP-unaware GaNAT must know a "pending" IP address, as
   described in Section 5.1.2.  This IP address is denoted as IPNext.

   For every arriving IP packet P, an NSLP-unaware, NR-side GaNAT
   executes the following algorithm.

   1.  If P has a RAO followed by the GIMPS header with an unsupported
       NSLPID, it is identified as a GIMPS QUERY.  In this case the
       GaNAT does the following.

       1.  We denote P as GQ.  The GaNAT looks at the stack proposal ST
           in GQ.  If it indicates that no cryptographic protection is
           required, the algorithm that is executed is the one described
           in Section 5.1.2 above.

       2.  The GaNAT remembers GQ along with the link on which it
           arrived.  We call this link the "upstream" link.

       3.  The GaNAT determines whether or not this GIMPS QUERY is
           anticipated, i.e. if a pending IPNext exists.  If no IPNext
           is pending, GQ is discarded (it is a question whether or not
           an error message should be sent).  Otherwise, additional
           checks may be performed (e.g. a DSInfo object may have to be



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 26]


Internet-Draft           NAT traversal for GIMPS               July 2005


           checked against the GQ).  If these checks fail, GQ is
           discarded.  Otherwise, the GaNAT performs the following.

       4.  It searches its table of existing NAT bindings against
           entries that match the GQ.MRI.  A matching entry means that
           the data flow, to which the signalling refers, already
           exists.

           +  If a matching entry is found, the GaNAT looks at which
              link the packets of the data flow are forwarded; we call
              this link the "downstream" link.  Further, the GaNAT
              checks how the headers of the data flow (IP addresses,
              port numbers, etc) are translated according to this NAT
              binding.  We denote [IP header].SourceIPAddress used on
              the downstream link as IPGaNATds, and the port numbers as
              PNGaNATds.  Note that the [IP header].DestinationIPAddress
              of this NAT binding should be equal to IPNext.  If it is
              not, this should be handled as an auditive error
              condition.  (This check is done as a consistency check.)

           +  If no matching entry is found, the GaNAT determines, based
              on its routing table, the link on which packets that match
              GQ.MRI (excluding GQ.MRI.SourceIPAddress and where
              GQ.MRI.DestinationIPAddress is replaced with IPNext) would
              be forwarded.  We call this link the "downstream" link.
              Then, the GaNAT acquires an IP address for itself on the
              downstream link.  (This address could be dynamic or
              static.)  Depending on its type, the GaNAT may also
              acquire (UDP) port numbers for the translation of GQ.  We
              denote the acquired IP address as IPGaNATds and the
              associated port numbers as PNGaNATds.

       5.  It creates a new GIMPS QUERY packet GQ', as follows (note
           that the new packet contains the same MRI as GQ).

           1.  GQ' <- GQ

           2.  GQ'.[IP header].SourceIPAddress <- IPGaNATds.

           3.  GQ'.S <- true

           4.  It checks whether or not a NTO is included in the GQ.

               -  If none is included, it adds a new one to GQ' such
                  that GQ'.NTO=[ IPGaNATds || SPNDTGaNATds]

               -  If one is included, it replaces it as GQ'.NTO=[
                  IPGaNATds || SPNDTGaNATds]



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 27]


Internet-Draft           NAT traversal for GIMPS               July 2005


           5.  It remembers GQ, GQ' the fact that they are associated,
               and the associated upstream and downstream links.

           6.  It forwards GQ' on the downstream link.

   The remaining steps of the algorithm are analogous to the algorithm
   of NSLP-unaware, NI-side GaNATs, which was described in the previous
   section.

6.1.3  Additional GIMPS peer processing

   In the presence of GaNATs on the signalling path between two NSLP
   peers, and if cryptographic protection of the signalling traffic
   between these two peers is required, the translation of the GIMPS
   header fields that need to be translated for consistency, must be
   carried out by the X peers.  The GIMPS processing that performs this
   task, is described next.  Note that this processing is in addition to
   the processing described in [1] and that we assume that the in-
   between GaNATs adopt the behaviour described in the two preceding
   sections.

   A GIMPS peer that receives a GIMPS packet that carries (a) an NSLPID
   for a supported NSLP, and (b) an NTO in its header, executes the
   following algorithm, before the processing described in [1] takes
   place.

   1.  If the packet is a GIMPS QUERY or CONFIRM in D-mode, denoted G,
       the peer constructs a new packet, denoted G', as follows.

       1.  G' <- G

       2.  G'.MRI.Source_IP_Address <- G.NTO.IPGaNATds

       3.  G'.MRI.SourcePort        <- G.NTO.SPNDTGaNATds

       4.  G'.NLI.IA                <- G.NTO.IPGaNATds

       5.  G'.NTO is removed.

       and forwards G' to GIMPS for further processing.  If G is a GIMPS
       QUERY and local policy demands the installation of state without
       the reception of a GIMPS CONFIRM message, then the peer must
       store the NTO carried by G together with the routing state
       information about the sending GIMPS peer.  If G is a GIMPS
       CONFIRM and local policy demands the installation of state only
       after reception of a valid CONFIRM, then the peer stores, after
       validating the cookie in the CONFIRM, the NTO carried by G
       together with the routing state information about the sending



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 28]


Internet-Draft           NAT traversal for GIMPS               July 2005


       GIMPS peer.

   2.  Otherwise, if the packet is a GIMPS RESPONSE in D-mode, denoted
       GR, the peer constructs a new packet, denoted GR', as follows.

       1.  GR' <- G

       2.  GR'.MRI.Source_IP_Address <- GR.NTO.IPGaNATus

       3.  GR'.MRI.SourcePort        <- GR.NTO.PNGaNATus

       4.  GR'.NLI.IA                <- GR.NTO.IPGaNATus

       5.  GR'.NTO is removed.

       and forwards GR' to GIMPS for further processing.  If the cookie
       in GR' is verified sucessfully, the peer stores the NTO carried
       by GR together with the routing state information about the
       sending GIMPS peer.

   A peer that receives a GIMPS packet P (in this case, the packet will
   be a cryptographically protected GIMPS packet) the peer does the
   following substitutions after the cryptographic processing is
   (successfully) completed and before the processing described in [1]
   takes place.

   1.  P.MRI.SourceIPAddress <- P.NTO.IPGaNATds

   2.  P.MRI.SourcePort      <- P.NTO.SPNDTGaNATds

   3.  P.NLI.IA              <- P.NTO.IPGaNATds

   4.  P.NTO is removed.

   A peer that intends to send a GIMPS packet (in this case,
   cryptographic protection will be required for the packet), the peer
   does the following after the processing described in [1] and before
   the packet is passed to the process that applies the cryptographic
   protection.  Note that the NTO refers to the NTO that is stored
   together with the routing state information of the peer that is to
   receive the packet.

   1.  P.MRI.Source_IP_Address <- NTO.IPGaNATds

   2.  P.MRI.SourcePort        <- NTO.PNGaNATds

   3.  P.NLI.IA                <- NTO.IPGaNATds




Pashalidis & Tschofenig    Expires January 12, 2006            [Page 29]


Internet-Draft           NAT traversal for GIMPS               July 2005


6.2  NSLP-aware GaNATs

   The cryptographic protection applies to of signalling messages
   terminates at NSLP-aware GaNATs.  The processing performed by such
   GaNATs is therefore identical to the processing described in
   Section 5.2, with the exception that the GaNATs additionally perform
   cryptographic operations.  In this case, there is no requirement for
   the NSLP to perform any translation for the purposes of NAT
   traversal.










































Pashalidis & Tschofenig    Expires January 12, 2006            [Page 30]


Internet-Draft           NAT traversal for GIMPS               July 2005


7.  NSIS-unaware NATs

   The following may serve as indications for the existence of an NSIS-
   unaware NAT between two GIMPS peers.  These indications can only be
   detected by the receiver of a GIMPS message.  The first occasion
   these indications may be detected is with the reception of a GIMPS
   QUERY, typically by the downstream peer.  (Note that != denotes
   inequality).

   o  The MRI.SourceIPAddress does not belong to the addressing space of
      the receiving peer.

   o  The MRI.DestinationIPAddress does not belong to the addressing
      space of the receiving peer.

   o  The IP address in the NLI.IA object does not belong to the
      addressing space of the receiving peer.

   o  The D flag of a received GIMPS packet denotes downstream direction
      and the S flag is not set and [IP header].SourceIPAddress !=
      MRI.SourceIPAddress.

   o  The D flag of a received GIMPS packet denotes upstream direction
      and the S flag is not set and [IP header].SourceIPAddress !=
      MRI.DestinationIPAddress.

   o  This is a GIMPS QUERY and [IP header].DestinationIPAddress !=
      MRI.DestinationIPAddress.

   Note that these are only indications.  In the presence of an
   adversary, a GIMPS peer may be tricked into believing that an NSIS-
   unaware NAT exists between itself and one of its neighbouring peers,
   while in reality this may not be the case.

   When a downstream GIMPS peer detects such an indication, it may
   notify the upstream peer about the error.  It may include additional
   information that enables the upstream peer to construct a GIMPS
   packet in such a way that, after it traverses the NSIS-unaware NAT,
   the IP addresses in the MRI field and the NLI.IA object are
   consistent with those in the IP header (which match the addressing
   space of the receiving peer).  However, this requires the
   specification of new data structures and formats, processing rules,
   and requires the peers to maintain additional state.

   Unfortunately, this approach is likely to fail in many circumstances.
   In order to see this, consider the behaviour of an NSIS-unaware NAT
   when it receives an IP packet.  The packet either




Pashalidis & Tschofenig    Expires January 12, 2006            [Page 31]


Internet-Draft           NAT traversal for GIMPS               July 2005


   1.  matches an existing NAT binding in which case its IP header is
       translated and the packet it is forwarded on another link, or

   2.  matches an existing policy rule which causes a new binding to be
       established and then (1) happens, or

   3.  is discarded because neither (1) nor (2) applies.

   With NSIS-unaware NATs it is a matter of local policy (i.e. the rules
   that exist in case (2) above) whether or not traffic will be allowed
   to traverse the NAT.  This obviously applies to both signalling and
   data traffic, as an NSIS-unaware NAT is unable to distinguish the two
   types of traffic.  It may be the case that GIMPS node A is unable to
   contact GIMPS node B which is "behind" a NAT, even if communication
   in from B to A may be possible because such communication would match
   a policy rule; typically, in a scenarios where A is towards the NI
   and B is towards the NR, the NAT would have this behaviour.

   Another approach to deal with NSIS-unaware NATs is similar to the NAT
   traversal approach taken by IKEv2, i.e. by encapsulating GIMPS
   messages into UDP datagrams, rather than directly into IP datagrams.
   This technique requires the inclusion of additional fields into a
   GIMPS QUERY, as follows.  The sender adds (a hash of) its own IP
   address and the IP address of what it believes to be the DR into the
   GIMPS payload.  The receiver of this GIMPS messages compares these
   addresses to the [IP header].SourceIPAddress and the [IP
   header].DestinationIPAddress respectively.  If at least one of them
   is unequal, the receiver deduces that a NAT is between sender and
   receiver.  After the detection of a NAT, the remainder of the
   communication is encapsulated into UDP datagrams that are addressed
   to a specified port.

   Unfortunately, the IKEv2 NAT traversal mechanism cannot be used "as
   is" for NAT traversal in GIMPS.  This is because of a number of
   reasons, including the following.

   o  The NAT may use an IP address for the forwarding of data traffic
      that is different from the IP address it uses to forward GIMPS
      traffic.  Since the NAT is NSIS-unaware it cannot update the MRI
      in the GIMPS messages such that it matches the translation applies
      to the data traffic.  Moreover, neither the GIMPS sending, nor the
      GIMPS receiving peer can perform this update; the sending peer
      cannot predict the translation that the NAT will apply, and the
      receiving peer does not have enough information to associate data
      flows to signalling messages.

   o  It is unclear whether or not the IKEv2 NAT traversal mechanism
      supports cascades of NATs.



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 32]


Internet-Draft           NAT traversal for GIMPS               July 2005


   o  It seems to be inappropriate to use UDP encapsulation for certain
      C-mode scenarios.  For example, using UDP encapsulation for TCP
      C-mode would result in GIMPS to appear in TCP over UDP over IP.
















































Pashalidis & Tschofenig    Expires January 12, 2006            [Page 33]


Internet-Draft           NAT traversal for GIMPS               July 2005


8.  Security Considerations

   The mechanisms proposed in this document give rise to a number of
   threats that must be considered.  In the following, a subset of these
   threats is mentioned.

8.1  Service Denial Attacks

   As described in Section 5.1 and Section 6.1, NSLP-unaware GaNATs
   create some state whenever they receive a GIMPS QUERY message.  This
   state is necessary in order for the GaNAT to be able to map a GIMPS
   RESPONSE that arrives from the downstream direction to the
   corresponding GIMPS QUERY and thereby to perform the required
   translation.

   The threat here is an attacker flooding the GaNAT with maliciously
   constructed GIMPS QUERIES with the aim of exhausting the GaNAT's
   memory.  The attacker might use a variety of methods to construct
   such GIMPS QUERIES, including the following.

   1.  Use as [IP header].SourceIPAddress the address of some other node
       or an unallocated IP address.  This method is also known as IP
       spoofing.

   2.  Use an invalid NSLPID, in order to make sure that all on-path
       GaNAT(s) will behave like NSLP-unaware GaNATs.

   3.  For each packet, use a different value for the cookie field.

   4.  For each packet, use a different value for the session ID field.

   5.  Combinations of the above.

   How vulnerable a GaNAT is to the above service denial attack depends
   on a variaty of factors, including the following.

   o  The amount of state allocated at the receipt of a GIMPS QUERY.
      This amount may vary depending on whether or not the data flow to
      which the signalling refers, already exists (i.e. whether or not
      the GaNAT already maintains a NAT binding for it).

   o  The mechanism that the GaNAT uses to map RESPONSEs to QUERIEs.

   o  Whether or not the GaNAT acriques dynamic IP addresses and ports
      for the downstream link.

   In order to decrease the exposure of a GaNAT to service denial
   attacks, the following recommendations are made.



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 34]


Internet-Draft           NAT traversal for GIMPS               July 2005


   o  The GaNAT should perform ingress filtering.  This limits the
      amount of locations from which an attacker can perform IP spoofing
      without being detected.

   o  The GaNAT should allocate the minimum amount of state required at
      the reception of a GIMPS QUERY.

   o  All state allocated by the GaNAT should timeout according to a
      local policy.  If the GaNAT detects heavy loads (which may
      indicate a service denial attack in progress), the GaNAT should
      timeout the state allocated as a result of a received GIMPS QUERY
      quicker, proportionally to the experienced load.

   o  The installation of a NAT binding for the data traffic (if such a
      binding does not exist prior to signalling) should be postponed
      until the correct GIMPS REPONSE traverses the NAT.

   The service denial threats mentioned in this section do not apply to
   an NSLP-aware GaNAT, as such a GaNAT is required, in accordance with
   its local policy, to verify the validity of the cookie(s) before
   allocating any state, including the state required by the mechanisms
   in this document.

8.2  Network Intrusions

   Although the primary goal of a NAT is to perform address translation
   between two addressing spaces, NATs are sometimes also used to
   provide a security service similar to the security service provided
   by firewalls.  That is, a NAT can be configured so that it does not
   forward packets from the external into the internal network, unless
   it determines that the packets belong to a communication session that
   was originally initiated from an internal node and are, as such,
   solicited.

   If an NSLP-unaware GaNAT performs the above security-relevant
   function in addition to address translation, then the presence of
   GIMPS signalling and, in particular the mechanisms described in this
   document, might allow an adversary cause the installation of NAT
   bindings in the GaNAT using these mechansisms.  These NAT bindings
   would then enable the adversary to inject unsolicited traffic into
   the internal network, a capability that it may not have in the
   absence of the mechanisms described in this document.

   The administrator of an NSLP-unaware GaNAT should therefore make
   security-concious decisions regarding the operation of the GaNAT.  An
   NSLP-aware GaNAT, on the other hand, follows an NSLP policy which
   indicates the required security mechanisms.  This policy should
   account for the fact that this NSLP-aware node performs also NAT and



Pashalidis & Tschofenig    Expires January 12, 2006            [Page 35]


Internet-Draft           NAT traversal for GIMPS               July 2005


   the associated packet filtering.


















































Pashalidis & Tschofenig    Expires January 12, 2006            [Page 36]


Internet-Draft           NAT traversal for GIMPS               July 2005


9.  Acknowledgments

   The authors would like to thank Robert Hancock, Cedric Aoun and
   Martin Stiemerling for their feedback.  Furthermore, we would like to
   mention that this document builds on top of a previous document
   regarding migration scenarios.













































Pashalidis & Tschofenig    Expires January 12, 2006            [Page 37]


Internet-Draft           NAT traversal for GIMPS               July 2005


10.  IAB Considerations

   [Editor's Note: A future version of this document will provide
   information regarding IAB considerations.















































Pashalidis & Tschofenig    Expires January 12, 2006            [Page 38]


Internet-Draft           NAT traversal for GIMPS               July 2005


11.  IANA Considerations

   This document does not require actions by the IANA.

12.  Normative References

   [1]  Schulzrinne, H. and R. Handcock, "GIMPS:  General Internet
        Messaging Protocol for Signalling", draft-ietf-nsis-ntlp-06
        (work in progress), May 2005.

   [2]  Stiemerling, M., Tschofenig, H., and C. Aoun, "NAT/Firewall NSIS
        Signaling Layer Protocol (NSLP)", draft-ietf-nsis-nslp-natfw-06
        (work in progress), May 2005.


Authors' Addresses

   Andreas Pashalidis
   Siemens
   Otto-Hahn-Ring 6
   Munich, Bavaria  81739
   Germany

   Email: Andreas.Pashalidis@siemens.com


   Hannes Tschofenig
   Siemens
   Otto-Hahn-Ring 6
   Munich, Bavaria  81739
   Germany

   Email: Hannes.Tschofenig@siemens.com


















Pashalidis & Tschofenig    Expires January 12, 2006            [Page 39]


Internet-Draft           NAT traversal for GIMPS               July 2005


Intellectual Property Statement

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.


Disclaimer of Validity

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Copyright Statement

   Copyright (C) The Internet Society (2005).  This document is subject
   to the rights, licenses and restrictions contained in BCP 78, and
   except as set forth therein, the authors retain all their rights.


Acknowledgment

   Funding for the RFC Editor function is currently provided by the
   Internet Society.




Pashalidis & Tschofenig    Expires January 12, 2006            [Page 40]