[Docs] [txt|pdf] [Tracker] [Email] [Diff1] [Diff2] [Nits] [IPR]

Versions: 00 01

  INTERNET-DRAFT                                             A. Huttunen, J. Sierwald
  Expires September 2001                                         F-Secure Corporation
  Category: Informational                                        W. Dixon, B. Swander
                                                                            Microsoft
                                                                             V. Volpe
                                                                        Cisco Systems
                                                                           L. DiBurro
                                                                      Nortel Networks
                                                                           March 2001


                    IPsec ESP Encapsulation in UDP for NAT Traversal
                        <draft-huttunen-ipsec-esp-in-udp-01.txt>

  Status of this Memo

     This document is an Internet-Draft and is in full conformance with all provisions
     of Section 10 of RFC2026.

     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 September 2001

  1. Abstract

     NAT is widely used for Internet "connection sharing" and ships as a standard
     feature in every router and edge device.  Cable and DSL deployments have been
     known to install NAT in embedded devices resident inside the home.  Additionally
     most hotel Internet connections are using NAT.  Many airport & wireless services
     in public areas use NAT to connect to the Internet.  Some Internet Service
     Providers use a centralized NAT to connect their clients to the Internet.

     Without a solution to the problem, the L2TP/IPSec VPN client and an IPSec tunnel
     mode VPN client can not connect from home or from business sites which use NAT to
     connect to the Internet.  Likewise, transport TCP and UPD traffic that is
     protected by IPSec transport mode can not be exchanged between peer to peer or
     server-to-server applications.

     Without an IETF standard solution for IPSec over NAT, vendor products will not
     interoperate, and will be forced to support multiple methods.

     This proposal allows ESP to pass through NAT if the NAT allows UDP traffic.  It
     does not require the NAT to be aware of IPSec and IKE negotiation.  The technique
     is used only if the initiator and the responder support it.  And it is only used
     when necessary, because the initiator imbeds information that tells the responder
     how the packet addressing was formatted when it was originally sent.

     This technique allows L2TP protected by IPSec transport mode using the most
     popular and default encryption format (IPSec ESP) to go through existing NATs
     which do either port and address translation of UDP packets or pure-address
     translation.

     It also allows IPSec tunnel mode to go through the same type of NATs, a
     requirement for many in the industry which implement IKECFG, XAUTH extensions to
     IPSec tunnel mode for remote access. Address assignment can also use the standards
     track DHCP over IPSec method.

     Note however that when IPSec tunneling through a NAT between an end system
     (static internal & external IP) and a gateway, or between two gateways - the
     internal addresses used by packets inside the IPSec tunnel can not be changed,
     even though the external address is changed so the internal packet will retain a
     potentially invalid address on the destination network. To handle this case, we
     can do one of the following:

     - In the gateway-to-gateway case, perform a second NAT function either before the
       tunnel ingress or after the tunnel egress to handle address space transitions.
         -In the case where traffic inside the tunnel is clear text TCP & UDP
            traffic, this is normal NAT and not affected by the IPSec tunnel (through
            which that traffic passed) being NATed itself.
         -In the case where traffic inside the IPSec tunnel is IPSec transport
            traffic, this spec provides the mechanism for the IPSec transport peers to
            detect this second NAT and pass it accordingly.
     - Not use the RFC method of negotiating an IPSec tunnel, instead use address
       assignment inside IKE (with or without IKECFG/XAUTH) for end-system to gateway
       IPSec tunnels.
     - Keep the internal address as is, and configure the destination network to be
       able to handle it.

     This method should be able to be used in all scales where NAT is deployed today to
     do simple pure address-to-address, or address and port translation.  However, it
     will not be able to be used where the NAT would otherwise perform packet
     inspection and replacement of address or port information inside the packet (e.g.
     modifying the FTP PORT command packet).  Thus UDP encapsulated IPSec transport and
     tunnel traffic will be successful if the communications model is that the client
     initiates TCP connections & UDP sessions from itself out through the NAT.

     This protocol does not involve the client communicating directly with the NAT for
     the purpose of opening ports to receive inbound connections.  If required, another
     method such as RSIP may be used by the application first to communicate with the
     NAT.

     IKE & IPSec issues with NAT are documented in this draft
     (http://search.ietf.org/internet-drafts/draft-aboba-nat-ipsec-02.txt ) [2]. This
     proposal provides a solution to all issues identified when using IKE Identity
     Protect Mode (Main Mode), Aggressive Mode or Quick Mode.  Other extensions such as
     ISAKMP Config Mode (IKECFG) and XAUTH may be present. Address assignment can also
     use the standards track DHCP over IPSec method.

     Most importantly, this proposal does not require change to the NAT device itself,
     which is seen as practically too difficult, and presents a problem on the order of
     magnitude similar to deployment of IPv6 where all end-systems, and at least 1
     intermediate point (the NAT) must change.  We expect the technique described here
     to be used in the interim to pass IPv4 addressed traffic only and will become, one
     hopes, outdated as IPv6 is deployed, enabling true end-to-end secure IPSec
     communication without address translation.


  2. Conventions used in this document

     In examples, "C:" and "S:" indicate lines sent by the client and server
     respectively.

     The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
     "SHOULD NOT", "RECOMMENDED",  "MAY", and "OPTIONAL" in this document are to be
     interpreted as described in RFC-2119 [1].


  3. Design Overview and Rationale

     The IETF standard for NAT traversal by IPSec should be unencumbered from
     intellectual property claims to ensure rapid adoption by the IPSec vendor
     community.

     We propose to UDP encapsulate the ESP traffic, thereby allowing it through the
     NAT.

     During design several different criteria needed to be balanced
     -Encapsulation using UDP port 500 was chosen so as to enable easy deployment
       without the need to change firewall rules used by corporations.
     -The chosen method allows only ESP traffic to be encapsulated in UDP. This
       ensures that the most widely needed traffic protection method is supported,
       while ensuring that the method is as simple as possible, mainly in terms of
       implementation effort.
     -Encapsulation using UDP port 500 makes each packet 8 bytes larger than
       encapsulation using a different port, this is however balanced by the reduced
       need to have keepalive packets.
     -UDP encapsulation can break some of the current HW offload products.

  3.1 NAT Scenarios

     All below scenarios may support an IPSec transport/tunnel SA for all possible
     traffic, where 1 or more TCP or UDP sessions may be protected by the single IPSec
     transport/tunnel SA pair.  There may be multiple transport/tunnel SAs of finer
     granularity as well.

     A. One or more clients behind a NAT connecting simultaneously to a destination IP

     Client1 private IP <-> NAT Internet IP <---------> Internet IP Server
     Client2 private IP <->


     NAT is doing pure address translation 1:1, or doing address and port translation
     many:1


     B. One or more clients behind NAT1 connecting simultaneously to the same dest IP
     address which is behind NAT2

     client1 private IP <-> NAT1 Internet IP <-> Internet IP NAT2 <-> private IP
     server
     Client2 private IP <->

     NAT1 is performing many:1 port address translation, NAT2 is performing 1:1 address
     translation (into DMZ)

     C. One or more clients through 2 or more outbound NATs to destination Internet IP
     address

     Client1 private IP <-> NAT1 private IP <-> NAT2 Internet IP <-> Internet IP
     Server
     Client2 private IP <->

     NAT1, NAT2 are performing many:1 port address translation.

     D. Internet client connecting to server behind NAT.

     Client1 Internet IP <------------> Internet IP NAT <--> private IP Server1
                                                        <--> private IP Server2

     NAT would most likely be doing 1:1 address translation.

     E. Multiple clients identifically configured (i.e. Client1 and Client2 have the
     same private network IP address assigned to them, like 10.1.2.3), each behind
     their own NAT, connected to same Internet IP.

     Client1 private IP <-> NAT1 Internet IP <-> Internet IP Server
     Client2 private IP <-> NAT2 Internet IP <->

     F. One or more clients inside a GW, comprising a remote worker's home LAN,
     connecting to the corporation's LAN protected by the corporation GW. Both home LAN
     and corporation LAN are using IP addresses from the same private address pool.

     Client1 private IP (corp) <-> GW private IP (isp) <-> NAT1 Internet IP <-> GW <->
     private IP (corp) <-> server

     F1. an IPSec tunnel SA for all traffic, where 1 or more TCP or UDP sessions may be
     protected by the single IPSec tunnel SA pair, between the two GWs.


  3.2 Encapsulation Scheme and Keeping NAT mappings alive

     We SHOULD provide a solution to keep alive the NAT port flow mapping - otherwise
     rekey from the responder will fail - same issue for stateful FWs opening a hole
     for corresponding inbound ports when it sees outbound src & dst port.  See a
     section below for the specifics on constructing and using a NAT keepalive packet.

     This draft uses the well-known IKE UDP port 500 to encapsulate both IKE control
     traffic and ESP data traffic. To distinguish these from one another, ESP traffic
     contains 8 bytes of zero after the UDP header. Normal IKE packets would contain
     the initiator cookie in this field which is never = 0.

                 ESP inside UDP encapsulation
           ------------------------------------------------------------
     IPv4  |orig IP hdr  | UDP | 8 bytes 0 |ESP        | Data         |
           |(any options)| Hdr |           |Header     |              |
           ------------------------------------------------------------
                                                       |<- encrypted->|
                                           |<- authenticated -------->|

                 IKE control inside UDP encapsulation
           ----------------------------------------------------------
     IPv4  |orig IP hdr  | UDP | Initiator | Responder|Rest of IKE  |
           |(any options)| Hdr | Cookie    | Cookie   |Header Fields|
           ----------------------------------------------------------

     Initiator cookies is 8 bytes, but non zero.  Responder cookie is 8 bytes and may
     be zero.  Implementations must be resilient to modification of this 8 byte 0
     field, making it non-zero and thus get received by IKE where it would attempt to
     parse invalid data.

     This approach allows for:

     1. a single well known port over which ESP UDP encapsulation would be done.  The
     IKE port is already assigned, and well-known for IPSec so firewalls needn't
     change, too.

     2. minimization of keep-alive/heartbeats for both IKE & ESP - as long as there was
     traffic flowing middle devices like stateful FWs & NATs would keep the mapping
     alive

     3.  maintenance of alignment boundaries.


     MTU reductions must be adjusted appropriated to account for 8 bytes + UDP header
     for ESP payloads.

     This approach doesn't support AH.

  4. Implementation Details

  4.1 IKE Main Mode exchange

     IKE MM initiator SA payload
      - Sends from IKE Src S, Dest 500.  S is usually 500.  This is not required, and
        the initiator may choose to float its source port.

      - Sends a VendorId payload of MD5("ESPThruNAT")


     IKE MM responder SA payload
      - Receive on UDP port 500.  It may also be the case that implementations support
        receiving on a non-500 destination port.  We say this is a well-known-to-the-
        client destination port in this case.

      - If Vendor ID payload for ESPThruNAT present UDP encapsulation capability is
        supported, the responder MUST construct and send the NAT Discovery payload of
        MD5(Initiator IP addr, I port, Responder IP addr, R port). The IP addresses
        and ports must be in network byte-order before calculating the hash.

      - The port value 0 MUST NOT be used in the hash.  If the internal representation
        of the port is 0, 500 must be used for generating this hash.

      - If the Initiator source port is not 500, store it for future use.  In
        scenarios A, B, and C, the source port is not likely to be 500.

      - Reply back to initiator's source port

                            1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       ! Next Payload  !   RESERVED    !         Payload Length        !
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       !                                                               !
       ~                       NAT Discovery                           ~
       !                                                               !
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


                  Figure 17:  NAT Discovery Payload Format

     The NAT Discovery Payload fields are defined as follows:

      o  Next Payload (1 octet) - Identifier for the payload type of the
         next payload in the message.  If the current payload is the last
         in the message, then this field will be 0.

      o  RESERVED (1 octet) - Unused, set to 0.

      o  Payload Length (2 octets) - Length in octets of the current
         payload, including the generic payload header.

     . NAT Discovery data (16 octets) - MD5 Hash = MD5(initiator IKE IP address,
       initiator IKE port, responder IKE IP address, responder IKE port). For an IKE
       packet constructed by the initiator:
          o The initiator IP address is the source address of the packet.  4 octets
            for V4 address, in network order.  16 octets for V6 address, in network
            byte-order.
          o The initiator port is the source port of the packet.  2 octets, network
            byte-order.
          o The responder IP address is the destination address of the packet. 4
            octets for V4 address, in network order.  16 octets for V6 address, in
            network byte-order.
          o The responder port is the destination port of the packet.  2 octets,
            network byte-order.

     The payload type for the NAT Discovery Payload is one hundred thirty (130).


     IKE MM Initiator KE payload
     Upon receiving NAT Discovery payload, compute the equivalent MD5 hash locally and
     compare with the received MD5 hash. If they differ, NAT is present.  Send Vendor
     Id payload of MD5("ESPThruNAT") and the locally generated NAT Discovery payload to
     responder, so responder knows also whether NAT exists.  If UDP encapsulation is
     supported, the NAT Discovery payload MUST be sent.


     IKE_MM_ID payload
     If NAT Discovery payloads have determined that NAT is present, then IP addresses
     SHOULD NOT be sent in the ID payload.  Since the NAT may be changing the IP
     addresses, sending an IP address that is incorrect as your ID is not recommended.
     It is up to each peer's policy how to handle this scenario.  The recommended
     approach is to send fully qualified DNS name (FQDN) or some other sort of name-
     based identity, such as the DN of the subject name in the certificate when using
     RSA signature authentication.  Since reverse DNS lookups may fail, it is again up
     to local policy if/how to verify this identity.   If a peer can determine that its
     address is not going to be translated, i.e. the address is a 'real' address, then
     this valid IP address can be sent as the MM Id.

  4.2 Aggressive Mode

     The rules for constructing the VID and the NAT Discovery Payload are the same as
     for Main Mode.
     In addition to normal aggressive mode:

     IKE AM Initiator
      - Send Vendor ID for ESPThruNAT

     IKE_AM_Responder
      - If Nat traversal is supported, the responder MUST send the Vendor ID for
        ESPThruNAT and the Nat Discovery payload as defined above.

     IKE AM Initiator 3rd message
     - Send Nat Discovery payload.

     Since Aggressive Mode sends the initiator's identity in the first payload, before
     NAT Discovery Payloads are exchanged, the initiator cannot select a different
     identity based on the result. If IP address based identity is used by the
     initiator and NAT is detected to exist, a warning SHOULD be issued.
     The Aggressive Mode negotiation MUST NOT be aborted for this reason, however.


  4.3 Identity Protect Mode Phase 2 (Quick Mode)

     IKE QM Initiator
     If policy allows UDP encapsulation, construct a proposal to negotiate UDP
     encapsulation.  This will be encoded as the encapsulation attribute.  Two new
     values will be added, UDP-TRANSPORT (61441), and UDP-TUNNEL (61440).  Any non-UDP
     encapsulated offers MAY be rejected by the peer, depending on policy.

     Initiator Proxy ID.  The recommended proxy id is hostname FQDN in place of the
     source address (scenario A, C) and destination address (scenario B, D) for
     transport mode, with the same recommendations as the MM IDs.  IP address MAY be
     used as a proxy ID if that IP address is a 'real' address. For tunnel mode, this
     ID can be the private address or net being protected.

     Initiator
     SA, ProxyID initiator,     ProxyID Responder   ----------->
         [src addr, src port]   [dest addr, dest port]


     IKE_QM_Responder
      - Receives offers, rejects all that are not NAT Encapsulated based on policy
      - Local policy decision how to verify the proxy IDs.  In transport mode, easiest
        is to ignore it, and simply use the Main Mode address.

  4.4 IPSec formats

     This encapsulation method has the benefit of no additional IKE complexity, and NAT
     keep alives are aggregated.  However, the expense is an extra 8 bytes in the
     header for each data packet.

     IKE tells IPSec:
      - inbound SA = ESPUDP protocol - normal ESP parameters
      - outbound SA = ESPUDP protocol - normal ESP parameters
      - which ports to use.  In scenarios A & C, initiator machine inside NAT will use
        src port S, dst port 500; Machine outside of NAT will use src port 500, dest
        port NAT mapped port.  S is usually 500, but may be floated.

     IPSec formats IPSec packets as:

                 ESP inside UDP encapsulation
           ------------------------------------------------------------
     IPv4  |orig IP hdr  | UDP | 8 bytes 0 | ESP       |Data          |
           |(any options)| Hdr |           | Header    |              |
           ------------------------------------------------------------
                                                       |<- encrypted->|
                                           |<--authenticated -------->|


                 IKE control inside UDP encapsulation
           ----------------------------------------------------------
     IPv4  |orig IP hdr  | UDP | Initiator | Responder|Rest of IKE  |
           |(any options)| Hdr | Cookie    | Cookie   |Header Fields|
           ----------------------------------------------------------



     ESP over NAT packet format receiving:
     - IPSec aware of new format inspects initiator cookie 8 bytes field -
     decrypts if dword= 0.
     - IPSec inspects initiator cookie - passes up UDP packet with initiator cookie set
     <> 0
     - Otherwise, IPSec strips UDP header, verifies that the UDP ports are the expected
     values, and processes the ESP payload


     ESP over NAT packet format outbound:
     - IPSec transforms original packet into ESP
     - IPSec takes constructs UDP encapsulation header with ports received from IKE, and
       the rest of the ESP as usual.



     As an example:

     C   <->   NAT   <->    X

     C sends srcport=500, dstport=500 (src 500,dst 500)
     NAT modifies to (1000,500). X replies with (500,1000).  NAT modifies to (500,500).
     C gets (500,500).  This is the same for both IKE and IPSec traffic.

     Now if C is sending from a different source port than 500:
     C sends (1111,500).  NAT modifies to (2222,500).  X replies to (500,2222).  NAT
     modifies to (500,1111).  C gets (500,1111).
     Since C's IPSec driver is going to need to determine this is an encapsulated
     packet, it will need to know to look at dest port 1111 for all packets.   Thus,
     the IPSec subsystem MAY listen on well-known ports other than 500 for IPSec
     traffic if mutually agreed upon by the peers.

  4.3 NAT Keepalives

     The keepalives will be sent by the Phase I initiator.  The purpose of the
     keepalives is only to keep up the NAT mapping, and not to keep alive any IKE or
     IPSec or other state.  Thus, the keepalive format is simply a UDP packet with the
     correct source and destination ports and addresses.  The packet contains a single
     data octet of 0xff.   This packet is sent as often as the initiator deems
     necessary, and SHOULD be silently discarded by the receiving IPSec driver.  The
     keep alives SHOULD only be sent if traffic (either IKE of IPSec) is not already
     present in the desired interval.  In addition, in order to allow the peer outside
     the NAT to initiate a rekey after the Main Mode has been torn down, the keep
     alives SHOULD be continued for some configurable period after all MMs and QMs are
     torn down.  The default time for the extra keep alives SHOULD be 5 minutes.  The
     packet SHOULD be silently discarded.  Since the NAT can fix-up the checksum of
     this packet and this packet has no IPSec hashing to verify integrity, checksum
     computation SHOULD be enabled for the keep alive packets.

               NAT keepalive packet
           ----------------------------
     IPv4  |orig IP hdr  | UDP | 0xFF |
           |(any options)| Hdr |      |
           ----------------------------

     See also ref [3].


  5. IPSec over NAT Operation


     A: 10.1.1.1         10.1.1.11 NAT 172.1.1.1        X: 172.0.0.2
     B: 10.1.1.2

     We have machines A,B in the private address space, talking to the external machine
     on the internet X.   A initiates a MM to X.  A sends the IKE packet with src IP =
     10.1.1.1, dst IP= 172.0.0.2, src port = 500, dst port = 500.  This packet hits the
     NAT, which translates it to src IP = 172.1.1.1, src port = 6666.  X gets the
     packet, and remembers that it came from src port 6666, and sends IKE reply to src
     IP 172.0.0.2, dst IP 172.1.1.1, src port 500, dst port 6666.  The NAT will
     translate this to 10.1.1.1, dst port 500, and send to A.  The MM exchange
     continues.  At the end, A has a MM [10.1.1.1 (host FQDN),172.0.0.2, src 500, dst
     500], and X has the MM [172.0.0.2, 172.1.1.1 (host FQDN), src 500, dst 6666].  If
     we are doing preshared key authentication in MM, then machine A would send the
     xxxxx as its IKE ID payload.

     Now, for QM, A proposes the QM proxy IDs as [src host FQDN, dst host FQDN, proto,
     src port, dest port] = [proxy source, proxy destination, protocol, src & dest
     ports], and transform ID ESPNAT in the SA payload.  The QM succeeds when source
     port is ignored.  When A plumbs the QM SAs into the driver (and possibly filters
     to match it), it uses its real addresses.

     Client A's QMs in driver:
     A->X:  [10.1.1.1,172.0.0.2, proto, src port, dst port]; UDP src 500, dst 500
     X->A:  [172.0.0.2,10.1.1.1, proto, src port, dst port]; UDP src *, dst 500

     Gateway X's QMs in driver:
     A->X:  [172.1.1.1,172.0.0.2, proto, src port, dst port]; UDP src 6666, dst 500
     X->A:  [172.0.0.2,172.1.1.1, proto, src port, dst port]; UDP src 500, dst 6666

     Now, the data packet is sent on A to 172.0.0.2.  It matches the drivers outbound
     filter, its outbound SA, and the driver encrypts it.  It is sent out with IP src
     10.1.1.1, dst 172.0.0.2, UDP src 500, dst 500.  It hits the NAT, and the NAT
     translates the src address, and source portcreates an entry for the SPI.   When
     the reply comes back from X, the NAT maps the SPI from X with the SPI send from A.
     Now the NAT knows which internal host to send the packet to, and A gets it.

     Multiple private network clients

     Now B wants to connect to X.  When B sends to X, the NAT will translate to
     172.1.1.1, src port 7777.  Thus, the NAT will be able to correctly multiplex X's
     response.  X will end up with 2 main modes, 1 to A and 1 to B.
     To A:  [172.0.0.2, 172.1.1.1, src 500, dst 6666]
     To B:  [172.0.0.2, 172.1.1.1, src 500, dst 7777]
     Multiple private clients are handled by having the external machine add the
     local/peer IKE ports to its SA key.

     IKE Rekey

     If the gateway X initiates a MM or QM rekey, it must do so from the same src (500)
     to the same destination (6666).  The NAT will have maintained the mapping
     (assuming keep-alive scheme is present either in IKE or in layers above IPSec).
     If the client A initiates a MM rekey, we just begin the above process over again.


     TCP, UDP checksum in IPSec transport

     We need to handle the tcp and udp checksum when IPSec ESP transport is used.  The
     IPSeced packet will look like (from RFC 2406):

                      AFTER APPLYING ESP
                 ---------------------------------------------------------------
           IPv4  |orig IP hdr  |UDP |8 bytes | ESP |     |      |   ESP   | ESP|
                 |(any options)|Hdr | 0      | Hdr | TCP | Data | Trailer |Auth|
                 ---------------------------------------------------------------
                                                   |<----- encrypted --------->|
                                             |<-- authenticated -------------->|

     Notice that none of the IP header is protected, so the NAT is free to modify the
     addresses.  When the NAT modifies the address in the IP header, it can recalculate
     the IP checksum, which is also unprotected.  However, in the TCP (or UDP) portion,
     is the TCP (or UDP) header, which contains its own checksum.  This checksum is
     over the pseudoheader, which contains the src and dst addresses in the IP header.
     Thus, if the NAT changes an address in the IP header, it cannot recomputed the TCP
     (or UDP) checksum since that portion of the packet is encrypted.

     There are 2 ways around this problem.  One is disabling checksum checking on both
     peers for packets on the SAs in question.  The other option is to compute the TCP
     (or UDP) checksum correctly before sending the packet, or after receiving the
     packet.  If done before sending the packet, it would require that the client know
     its external address, which is not an assumption in this specification.  If done
     after decrypting the IPSec packet, but would be unnecessary CPU cycles if the
     stack accepted the value of zero for checksum or using some other implementation
     specific method.  So the choice for performance reasons is to disable UDP & TCP
     checksum by the stack when possible.

     Disabling host OS UDP & TCP checksums loses very little functionality since nearly
     the entire packet is protected by the hash from the ESP.  This hash will verify
     the integrity in transit of all fields protected by the TCP (or UDP) checksums
     except for those fields in the pseudoheader.  Of these fields (src, dst ip
     address, protocol, length) src and dst address are generally the most important,
     and verification of them is insured by possession of the session keys for the
     IPSec session.  For large TCP segments that result in multiple IP packets (initial
     plus IP fragments), the TCP segment can only be reconstituted using individually
     properly reassembled and authenticated IPSec packet.  So there is no value in re-
     checking TCP checksum.

     Therefore, TCP checksum MUST not be checked when the packet arrives secured by a
     SA using NAT encapsulation.  UDP packets SHOULD have their xsum field set to 0 on
     sending into an SA using NAT encapsulation.  UDP check sums MUST not be checked on
     receiving a packet in an SA using NAT encapsulation.




  6. Justification of design

     Other methods were carefully considered, and discarded.


  6.1 Floated IKE port
     First, there is the option of floating IKE to a different well-known port during
     the negotiation, and the using this new port number as a demultiplexer.   This
     would allow the encapsulated packet format to be:

                 ESP inside UDP floated port encapsulation
           --------------------------------------------------
     IPv4  |orig IP hdr  | UDP |Type  | ESP | Data          |
           |(any options)| Hdr |      | Hdr |               |
           --------------------------------------------------
                                            |<-- encrypted->|
                               |<-- authenticated --------->|


     The IKE format on the floated port is:

                 IKE control inside UDP encapsulation
           ----------------------------------------------------------------
     IPv4  |orig IP hdr  | UDP | Type |Initiator | Responder|Rest of IKE  |
           |(any options)| Hdr |      |Cookie    | Cookie   |Header Fields|
           ----------------------------------------------------------------

     This would allow the 4 octet type field to give the type of the data following.
     We can modify these formats in this way because the floated port distinguished
     between the normal IKE format on port 500, and this format on the new port.

     This method was discarded because it is very difficult to float IKE to a new port.
     The biggest difficulty is resolving the conflict between floating the port,
     preferably before any quick modes are negotiated, yet negotiating in quick mode
     the encapsulation attribute.  Thus, we'd have to always float IKE to a new port if
     NAT were detected, even if that NAT is known to be IPSec aware, and that UDP
     encapsulation, and therefore IKE floating is unneeded.  However, even though IKE
     would need to be floated always, actual ESP traffic could be either encapsulated
     in UDP or not, as defined by policy and as negotiated by QM.

     In addition, firewalls will need to open another UDP hole, which will meet with
     strong opposition.

  6.2 Using two UDP ports

     This approach left IKE on 500, and encapsulates the IPSec traffic using a
     different well-known port.  The biggest problem with this is that 2 sets of keep-
     alives must be sent to keep the NAT mappings alive.  This will be expensive for
     the IKE mapping, since IKE traffic is usually infrequent.  For wireless, this is
     extremely expensive. The second problem is that the IPSec subsystem doesn't get
     the encapsulation information (the ports) from IKE, but must create that state
     upon receiving the first encapsulated packet.  This is more prone to denial of
     service.  It is possible to fail the connection if the attacker grabs the first
     encapsulated packet, and modifies the unprotected encapsulation header before the
     receiving IPSec subsystem gets it.   This would cause the receiving IPSec
     subsystem to create state based upon an incorrect mapping, and traffic would fail.
     The proposed approach is more immune to these first packet manipulations, since an
     attacker who modified the ports in the UDP header of the initial IKE packet would
     only cause multiple Main Modes state entries to be created on the responder, but
     wouldn't necessarily scuttle the connection.

     This method will also make firewalls open an additional UDP hole.

  7. Security Considerations


     The authors do not think this method exposes any security vulnerabilities into
     otherwise sound IPSec implementation. However, the following issues need to be
     addressed by implementers.

      When using IPsec tunnel mode, clients connecting to the gateway may be using the
      same IP address in the inner IP header. One scenario where this is likely to
      happen is when the clients are using in the inner IP header their local private
      network address, and they are in different private networks. The GW MUST ensure
      that traffic destined towards the clients is sent only to the correct recipient.

      When using IPsec tunnel mode, a client connecting to a gateway may be trying to
      steal an IP address from the network protected by the gateway. The QM initiated
      by the client MUST only be allowed by the gateway if:
      - The QM IP address identities match the static policy defined at the gateway.
      - The QM IP source address matches the address assigned to the client by the
        gateway.
      - The gateway is configured to do further NAT to the packets, ensuring that
        whatever IP address the client is using, this cannot be used to steal local
        network IP addresses.
      Any of these ensures that attacker is not possible to steal local network IP
      addresses.



  8. References


     1  Bradner, S., "Key words for use in RFCs to Indicate Requirement
        Levels", BCP 14, RFC 2119, March 1997

     2  Aboba, B., "NAT and IPSEC", Internet draft (work in progress),
        draft-aboba-nat-ipsec-02.txt, July 2000

     3  Huitema, C., "Short term NAT requirements for UDP based peer-to-peer
        applications", Internet draft (work in progress),
        draft-huitema-natreq4udp-00.txt, February 2001

   The following IETF WGs have work which has fed into this specification and could
   be the one to pursue standardizing a solution:
   NAT Working Group: http://www.ietf.org/html.charters/nat-charter.html
   IPSec Working Group:  http://www.ietf.org/html.charters/ipsec-charter.html
   IPSec Remote Access Working Group: http://www.ietf.org/html.charters/ipsra-
   charter.html

   IKE & IPSec issues with NAT are documented in these drafts.

   http://search.ietf.org/internet-drafts/draft-aboba-nat-ipsec-02.txt
   http://www.ietf.org/internet-drafts/draft-ietf-nat-protocol-complications-04.txt

   Lucent has published an information RFC to describe how IPSec tunnels can pass
   through NATs.
   http://www.ietf.org/rfc/rfc2709.txt

   Lucent has documented the VPN Masquerade method of IPSec over NAT, where the NAT
   is aware of IKE and ESP traffic specifically and takes steps to estimate how to
   pass the traffic.
   http://search.ietf.org/internet-drafts/draft-brustoloni-vma-00.txt

   3Com and others have documented a method for IPSec traversal of NATs where the NAT
   is changed to support communication with the IPSec peer:
   http://search.ietf.org/internet-drafts/draft-ietf-nat-rsip-ipsec-04.txt

   SSH Communications Security is known to have intellectual property on some parts
   of their design documented in the link below.  This design we believe avoids what
   we guess is the intellectual property.
   http://search.ietf.org/internet-drafts/draft-stenberg-ipsec-nat-traversal-01.txt




0.  Acknowledgments

   Tamir Zegman of CheckPoint provided helpful advice for producing the รป00 version
   of this draft.


   Many people engaged in discussion which lead to this proposal.  In particular,
   engineers at Microsoft, Cisco Systems, Checkpoint, F-Secure, SSH Communications
   Security, Inc.


1. Author's Addresses

   Ari Huttunen
   F-Secure Corporation
   Phone: +358-9-2520 0700
   E-Mail: Ari.Huttunen@F-Secure.com

   Joern Sierwald
   F-Secure Corporation
   E-Mail: Joern@F-Secure.com

   William Dixon, Brian Swander
   Microsoft
   One Microsoft Way, Redmond WA 98052
   Phone: 425-703-8729
   Email: wdixon@microsoft.com

   Victor Volpe
   Cisco Systems
   Email: vvolpe@cisco.com

   Larry DiBurro
   Nortel Networks
   Phone: 978-264-7171
   ldiburro@nortelnetworks


Html markup produced by rfcmarkup 1.129c, available from https://tools.ietf.org/tools/rfcmarkup/