| < draft-ietf-ipsecme-tcp-encaps-01.txt | draft-ietf-ipsecme-tcp-encaps-02.txt > | |||
|---|---|---|---|---|
| Network T. Pauly | Network T. Pauly | |||
| Internet-Draft Apple Inc. | Internet-Draft Apple Inc. | |||
| Intended status: Standards Track S. Touati | Intended status: Standards Track S. Touati | |||
| Expires: January 8, 2017 Ericsson | Expires: February 18, 2017 Ericsson | |||
| R. Mantha | R. Mantha | |||
| Cisco Systems | Cisco Systems | |||
| July 7, 2016 | August 17, 2016 | |||
| TCP Encapsulation of IKE and IPSec Packets | TCP Encapsulation of IKE and IPsec Packets | |||
| draft-ietf-ipsecme-tcp-encaps-01 | draft-ietf-ipsecme-tcp-encaps-02 | |||
| Abstract | Abstract | |||
| This document describes a method to transport IKE and IPSec packets | This document describes a method to transport IKE and IPsec packets | |||
| over a TCP connection for traversing network middleboxes that may | over a TCP connection for traversing network middleboxes that may | |||
| block IKE negotiation over UDP. This method, referred to as TCP | block IKE negotiation over UDP. This method, referred to as TCP | |||
| encapsulation, involves sending all packets for tunnel establishment | encapsulation, involves sending both IKE packets for tunnel | |||
| as well as tunneled packets over a TCP connection. This method is | establishment as well as tunneled packets using ESP over a TCP | |||
| intended to be used as a fallback option when IKE cannot be | connection. This method is intended to be used as a fallback option | |||
| negotiated over UDP. | when IKE cannot be negotiated over UDP. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 8, 2017. | This Internet-Draft will expire on February 18, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 34 ¶ | skipping to change at page 2, line 34 ¶ | |||
| 9. Using IKE Message Fragmentation with TCP encapsulation . . . 9 | 9. Using IKE Message Fragmentation with TCP encapsulation . . . 9 | |||
| 10. Considerations for Keep-alives and DPD . . . . . . . . . . . 9 | 10. Considerations for Keep-alives and DPD . . . . . . . . . . . 9 | |||
| 11. Middlebox Considerations . . . . . . . . . . . . . . . . . . 10 | 11. Middlebox Considerations . . . . . . . . . . . . . . . . . . 10 | |||
| 12. Performance Considerations . . . . . . . . . . . . . . . . . 10 | 12. Performance Considerations . . . . . . . . . . . . . . . . . 10 | |||
| 12.1. TCP-in-TCP . . . . . . . . . . . . . . . . . . . . . . . 10 | 12.1. TCP-in-TCP . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 12.2. Added Reliability for Unreliable Protocols . . . . . . . 11 | 12.2. Added Reliability for Unreliable Protocols . . . . . . . 11 | |||
| 12.3. Quality of Service Markings . . . . . . . . . . . . . . 11 | 12.3. Quality of Service Markings . . . . . . . . . . . . . . 11 | |||
| 12.4. Maximum Segment Size . . . . . . . . . . . . . . . . . . 11 | 12.4. Maximum Segment Size . . . . . . . . . . . . . . . . . . 11 | |||
| 13. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 13. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
| 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 15. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 11 | 15. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 16.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 16.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
| 16.2. Informative References . . . . . . . . . . . . . . . . . 12 | 16.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
| Appendix A. Using TCP encapsulation with TLS . . . . . . . . . . 13 | Appendix A. Using TCP encapsulation with TLS . . . . . . . . . . 13 | |||
| Appendix B. Example exchanges of TCP Encapsulation with TLS . . 14 | Appendix B. Example exchanges of TCP Encapsulation with TLS . . 14 | |||
| B.1. Establishing an IKE session . . . . . . . . . . . . . . . 14 | B.1. Establishing an IKE session . . . . . . . . . . . . . . . 14 | |||
| B.2. Deleting an IKE session . . . . . . . . . . . . . . . . . 16 | B.2. Deleting an IKE session . . . . . . . . . . . . . . . . . 16 | |||
| B.3. Re-establishing an IKE session . . . . . . . . . . . . . 17 | B.3. Re-establishing an IKE session . . . . . . . . . . . . . 17 | |||
| B.4. Using MOBIKE between UDP and TCP Encapsulation . . . . . 18 | B.4. Using MOBIKE between UDP and TCP Encapsulation . . . . . 18 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 1. Introduction | 1. Introduction | |||
| IKEv2 [RFC7296] is a protocol for establishing IPSec tunnels, using | IKEv2 [RFC7296] is a protocol for establishing IPsec tunnels, using | |||
| IKE messages over UDP for control traffic, and using Encapsulating | IKE messages over UDP for control traffic, and using Encapsulating | |||
| Security Payload (ESP) messages for tunneled data traffic. Many | Security Payload (ESP) messages for tunneled data traffic. Many | |||
| network middleboxes that filter traffic on public hotspots block all | network middleboxes that filter traffic on public hotspots block all | |||
| UDP traffic, including IKE and IPSec, but allow TCP connections | UDP traffic, including IKE and IPsec, but allow TCP connections | |||
| through since they appear to be web traffic. Devices on these | through since they appear to be web traffic. Devices on these | |||
| networks that need to use IPSec (to access private enterprise | networks that need to use IPsec (to access private enterprise | |||
| networks, to route voice-over-IP calls to carrier networks, or | networks, to route voice-over-IP calls to carrier networks, or | |||
| because of security policies) are unable to establish IPSec tunnels. | because of security policies) are unable to establish IPsec tunnels. | |||
| This document defines a method for encapsulating both the IKE control | This document defines a method for encapsulating both the IKE control | |||
| messages as well as the IPSec data messages within a TCP connection. | messages as well as the IPsec data messages within a TCP connection. | |||
| Using TCP as a transport for IPSec packets adds a third option to the | Using TCP as a transport for IPsec packets adds a third option to the | |||
| list of traditional IPSec transports: | list of traditional IPsec transports: | |||
| 1. Direct. Currently, IKE negotiations begin over UDP port 500. | 1. Direct. Currently, IKE negotiations begin over UDP port 500. | |||
| If no NAT is detected between the initiator and the receiver, | If no NAT is detected between the initiator and the receiver, | |||
| then subsequent IKE packets are sent over UDP port 500 and | then subsequent IKE packets are sent over UDP port 500 and | |||
| IPSec data packets are sent using ESP [RFC4303]. | IPsec data packets are sent using ESP [RFC4303]. | |||
| 2. UDP Encapsulation [RFC3948]. If a NAT is detected between the | 2. UDP Encapsulation [RFC3948]. If a NAT is detected between the | |||
| initiator and the receiver, then subsequent IKE packets are | initiator and the receiver, then subsequent IKE packets are | |||
| sent over UDP port 4500 with four bytes of zero at the start of | sent over UDP port 4500 with four bytes of zero at the start of | |||
| the UDP payload and ESP packets are sent out over UDP port | the UDP payload and ESP packets are sent out over UDP port | |||
| 4500. Some peers default to using UDP encapsulation even when | 4500. Some peers default to using UDP encapsulation even when | |||
| no NAT are detected on the path as some middleboxes do not | no NAT are detected on the path as some middleboxes do not | |||
| support IP protocols other than TCP and UDP. | support IP protocols other than TCP and UDP. | |||
| 3. TCP Encapsulation. If both of the other two methods are not | 3. TCP Encapsulation. If both of the other two methods are not | |||
| available or appropriate, both IKE negotiation packets as well | available or appropriate, both IKE negotiation packets as well | |||
| as ESP packets can be sent over a single TCP connection to the | as ESP packets can be sent over a single TCP connection to the | |||
| peer. | peer. | |||
| Direct use of ESP or UDP Encapsulation should be preferred by IKE | Direct use of ESP or UDP Encapsulation should be preferred by IKE | |||
| implementations due to performance concerns when using TCP | implementations due to performance concerns when using TCP | |||
| Encapsulation Section 12. Most implementations should use TCP | Encapsulation [Section 12]. Most implementations should use TCP | |||
| Encapsulation only on networks where negotiation over UDP has been | Encapsulation only on networks where negotiation over UDP has been | |||
| attempted without receiving responses from the peer, or if a network | attempted without receiving responses from the peer, or if a network | |||
| is known to not support UDP. | is known to not support UDP. | |||
| 1.1. Prior Work and Motivation | 1.1. Prior Work and Motivation | |||
| Encapsulating IKE connections within TCP streams is a common approach | Encapsulating IKE connections within TCP streams is a common approach | |||
| to solve the problem of UDP packets being blocked by network | to solve the problem of UDP packets being blocked by network | |||
| middleboxes. The goal of this document is to promote | middleboxes. The goal of this document is to promote | |||
| interoperability by providing a standard method of framing IKE and | interoperability by providing a standard method of framing IKE and | |||
| ESP message within streams, and to provide guidelines for how to | ESP message within streams, and to provide guidelines for how to | |||
| configure and use TCP encapsulation. | configure and use TCP encapsulation. | |||
| Some previous solutions include: | Some previous alternatives include: | |||
| Cellular Network Access Interworking Wireless LAN (IWLAN) uses IKEv2 | Cellular Network Access Interworking Wireless LAN (IWLAN) uses IKEv2 | |||
| to create secure connections to cellular carrier networks for | to create secure connections to cellular carrier networks for | |||
| making voice calls and accessing other network services over | making voice calls and accessing other network services over | |||
| Wi-Fi networks. 3GPP has recommended that IKEv2 and ESP packets | Wi-Fi networks. 3GPP has recommended that IKEv2 and ESP packets | |||
| be sent within a TLS connection to be able to establish | be sent within a TLS connection to be able to establish | |||
| connections on restrictive networks. | connections on restrictive networks. | |||
| ISAKMP over TCP Various non-standard extensions to ISAKMP have been | ISAKMP over TCP Various non-standard extensions to ISAKMP have been | |||
| deployed that send IPSec traffic over TCP or TCP-like packets. | deployed that send IPsec traffic over TCP or TCP-like packets. | |||
| SSL VPNs Many proprietary VPN solutions use a combination of TLS and | SSL VPNs Many proprietary VPN solutions use a combination of TLS and | |||
| IPSec in order to provide reliability. | IPsec in order to provide reliability. | |||
| IKEv2 over TCP IKEv2 over TCP as described in | IKEv2 over TCP IKEv2 over TCP as described in | |||
| [I-D.nir-ipsecme-ike-tcp] is used to avoid UDP fragmentation. | [I-D.nir-ipsecme-ike-tcp] is used to avoid UDP fragmentation. | |||
| The goal of this specification is to provide a standardized method | ||||
| for using TCP streams to transport IPsec that is compatible with the | ||||
| current IKE standard, and avoids the overhead of other alternatives | ||||
| that always rely on TCP or TLS. | ||||
| 1.2. Requirements Language | 1.2. Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
| 2. Configuration | 2. Configuration | |||
| One of the main reasons to use TCP encapsulation is that UDP traffic | One of the main reasons to use TCP encapsulation is that UDP traffic | |||
| may be entirely blocked on a network. Because of this, support for | may be entirely blocked on a network. Because of this, support for | |||
| TCP encapsulation is not specifically negotiated in the IKE exchange. | TCP encapsulation is not specifically negotiated in the IKE exchange. | |||
| Instead, support for TCP encapsulation must be pre-configured on both | Instead, support for TCP encapsulation must be pre-configured on both | |||
| the initiator and the responder. | the initiator and the responder. | |||
| The configuration defined on each peer should include the following | The configuration defined on each peer should include the following | |||
| parameters: | parameters: | |||
| o One or more TCP ports on which the responder will listen for | o One or more TCP ports on which the responder will listen for | |||
| incoming connections. Note that the initiator may initiate TCP | incoming connections. Note that the initiator may initiate TCP | |||
| connections to the responder from any local port. | connections to the responder from any local port. The ports on | |||
| which the responder listens will likey be based on the ports | ||||
| commonly allowed on restricted networks. | ||||
| o Optionally, an extra framing protocol to use on top of TCP to | o Optionally, an extra framing protocol to use on top of TCP to | |||
| further encapsulate the stream of IKE and IPSec packets. See | further encapsulate the stream of IKE and IPsec packets. See | |||
| Appendix A for a detailed discussion. | Appendix A for a detailed discussion. | |||
| This document leaves the selection of TCP ports up to | This document leaves the selection of TCP ports up to | |||
| implementations. It is suggested to use TCP port 4500, which is | implementations. It is suggested to use TCP port 4500, which is | |||
| allocated for IPSec NAT Traversal. | allocated for IPsec NAT Traversal. | |||
| Since TCP encapsulation of IKE and IPSec packets adds overhead and | Since TCP encapsulation of IKE and IPsec packets adds overhead and | |||
| has potential performance trade-offs compared to direct or UDP- | has potential performance trade-offs compared to direct or UDP- | |||
| encapsulated tunnels (as described in Performance Considerations, | encapsulated tunnels (as described in Performance Considerations, | |||
| Section 12), implementations SHOULD prefer ESP direct or UDP | Section 12), implementations SHOULD prefer ESP direct or UDP | |||
| encapsulated tunnels over TCP encapsulated tunnels when possible. | encapsulated tunnels over TCP encapsulated tunnels when possible. | |||
| 3. TCP-Encapsulated Header Formats | 3. TCP-Encapsulated Header Formats | |||
| In order to encapsulate IKE and ESP messages within a TCP stream, a | Like UDP encapsulation, TCP encapsulation uses the first four bytes | |||
| 16-bit length field precedes every message. If the first 32-bits of | of a message to differentiate IKE and ESP messages. TCP | |||
| the message are zeros (a Non-ESP Marker), then the contents comprise | encapsulation also adds a length field to define the boundaries of | |||
| an IKE message. Otherwise, the contents comprise an ESP message. | messages within a stream. The message length is sent in a 16-bit | |||
| field that precedes every message. If the first 32-bits of the | ||||
| message are zeros (a Non-ESP Marker), then the contents comprise an | ||||
| IKE message. Otherwise, the contents comprise an ESP message. | ||||
| Authentication Header (AH) messages are not supported for TCP | Authentication Header (AH) messages are not supported for TCP | |||
| encapsulation. | encapsulation. | |||
| Although a TCP stream may be able to send very long messages, | Although a TCP stream may be able to send very long messages, | |||
| implementations SHOULD limit message lengths to typical UDP datagram | implementations SHOULD limit message lengths to typical UDP datagram | |||
| ESP payload lengths. The maximum message length is used as the | ESP payload lengths. The maximum message length is used as the | |||
| effective MTU for connections that are being encrypted using ESP, so | effective MTU for connections that are being encrypted using ESP, so | |||
| the maximum message length will influence characteristics of inner | the maximum message length will influence characteristics of inner | |||
| connections, such as the TCP Maximum Segment Size (MSS). | connections, such as the TCP Maximum Segment Size (MSS). | |||
| skipping to change at page 5, line 40 ¶ | skipping to change at page 5, line 51 ¶ | |||
| | Non-ESP Marker | | | Non-ESP Marker | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| ~ IKE header [RFC7296] ~ | ~ IKE header [RFC7296] ~ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 1 | Figure 1 | |||
| The IKE header is preceded by a 16-bit length field in network byte | The IKE header is preceded by a 16-bit length field in network byte | |||
| order that specifies the length of the IKE packet within the TCP | order that specifies the length of the IKE message (including the | |||
| stream. As with IKE over UDP port 4500, a zeroed 32-bit Non-ESP | Non-ESP marker) within the TCP stream. As with IKE over UDP port | |||
| Marker is inserted before the start of the IKE header in order to | 4500, a zeroed 32-bit Non-ESP Marker is inserted before the start of | |||
| differentiate the traffic from ESP traffic between the same addresses | the IKE header in order to differentiate the traffic from ESP traffic | |||
| and ports. | between the same addresses and ports. | |||
| o Length (2 octets, unsigned integer) - Length of the IKE packet | o Length (2 octets, unsigned integer) - Length of the IKE packet | |||
| including the Length Field and Non-ESP Marker. | including the Length Field and Non-ESP Marker. | |||
| 3.2. TCP-Encapsulated ESP Header Format | 3.2. TCP-Encapsulated ESP Header Format | |||
| 1 2 3 | 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 | 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Length | | | Length | | |||
| skipping to change at page 6, line 30 ¶ | skipping to change at page 6, line 36 ¶ | |||
| order that specifies the length of the ESP packet within the TCP | order that specifies the length of the ESP packet within the TCP | |||
| stream. | stream. | |||
| The SPI field in the ESP header MUST NOT be a zero value. | The SPI field in the ESP header MUST NOT be a zero value. | |||
| o Length (2 octets, unsigned integer) - Length of the ESP packet | o Length (2 octets, unsigned integer) - Length of the ESP packet | |||
| including the Length Field. | including the Length Field. | |||
| 4. TCP-Encapsulated Stream Prefix | 4. TCP-Encapsulated Stream Prefix | |||
| Each stream of bytes used for IKE and IPSec encapsulation MUST begin | Each stream of bytes used for IKE and IPsec encapsulation MUST begin | |||
| with a fixed sequence of six bytes as a magic value, containing the | with a fixed sequence of six bytes as a magic value, containing the | |||
| characters "IKETCP" as ASCII values. This allows peers to | characters "IKETCP" as ASCII values. This allows peers to | |||
| differentiate this protocol from other protocols that may be run over | differentiate this protocol from other protocols that may be run over | |||
| TCP streams, since the bytes do not overlap with the valid start of | the same TCP port. Since TCP encapsulated IPsec is not assigned to a | |||
| any other known stream protocol. This value is only sent once, by | specific port, responders may be able to receive multiple protocols | |||
| the Initiator only, at the beginning of any stream of IKE and ESP | on the same port. The bytes of the stream prefix do not overlap with | |||
| messages. | the valid start of any other known stream protocol. This value is | |||
| only sent once, by the Initiator only, at the beginning of any stream | ||||
| of IKE and ESP messages. | ||||
| If other framing protocols are used within TCP to further encapsulate | If other framing protocols are used within TCP to further encapsulate | |||
| or encrypt the stream of IKE and ESP messages, the Stream Prefix must | or encrypt the stream of IKE and ESP messages, the Stream Prefix must | |||
| be at the start of the Initiator's IKE and ESP message stream within | be at the start of the Initiator's IKE and ESP message stream within | |||
| the added protocol layer [Appendix A]. | the added protocol layer [Appendix A]. Although some framing | |||
| protocols do support negotiating inner protocols, the stream prefix | ||||
| should always be used in order for implementations to be as generic | ||||
| as possible and not rely on other framing protocols on top of TCP. | ||||
| 0 1 2 3 4 5 | 0 1 2 3 4 5 | |||
| +------+------+------+------+------+------+ | +------+------+------+------+------+------+ | |||
| | 0x49 | 0x4b | 0x45 | 0x54 | 0x43 | 0x50 | | | 0x49 | 0x4b | 0x45 | 0x54 | 0x43 | 0x50 | | |||
| +------+------+------+------+------+------+ | +------+------+------+------+------+------+ | |||
| Figure 3 | Figure 3 | |||
| 5. Applicability | 5. Applicability | |||
| skipping to change at page 7, line 25 ¶ | skipping to change at page 7, line 34 ¶ | |||
| Since the support of TCP encapsulation is a configured property, not | Since the support of TCP encapsulation is a configured property, not | |||
| a negotiated one, it is recommended that if there are multiple IKE | a negotiated one, it is recommended that if there are multiple IKE | |||
| endpoints representing a single peer (such as multiple machines with | endpoints representing a single peer (such as multiple machines with | |||
| different IP addresses when connecting by Fully-Qualified Domain | different IP addresses when connecting by Fully-Qualified Domain | |||
| Name, or endpoints used with IKE redirection), all of the endpoints | Name, or endpoints used with IKE redirection), all of the endpoints | |||
| equally support TCP encapsulation. | equally support TCP encapsulation. | |||
| If TCP encapsulation is being used for a specific IKE SA, all | If TCP encapsulation is being used for a specific IKE SA, all | |||
| messages for that IKE SA and its Child SAs MUST be sent over a TCP | messages for that IKE SA and its Child SAs MUST be sent over a TCP | |||
| connection until the SA is deleted or MOBIKE is used to change the SA | connection until the SA is deleted or MOBIKE is used to change the SA | |||
| endpoints and/or encapsulation protocol. No packets should be sent | endpoints and/or encapsulation protocol. See Section 8 for more | |||
| over UDP or direct ESP for the IKE SA or its Child SAs while using | details on using MOBIKE to transition between encapsulation modes. | |||
| TCP encapsulation. | ||||
| 6. Connection Establishment and Teardown | 6. Connection Establishment and Teardown | |||
| When the IKE initiator uses TCP encapsulation for its negotiation, it | When the IKE initiator uses TCP encapsulation for its negotiation, it | |||
| will initiate a TCP connection to the responder using the configured | will initiate a TCP connection to the responder using the configured | |||
| TCP port. The first bytes sent on the stream MUST be the stream | TCP port. The first bytes sent on the stream MUST be the stream | |||
| prefix value [Section 4]. After this prefix, encapsulated IKE | prefix value [Section 4]. After this prefix, encapsulated IKE | |||
| messages will negotiate the IKE SA and initial Child SA [RFC7296]. | messages will negotiate the IKE SA and initial Child SA [RFC7296]. | |||
| After this point, both encapsulated IKE Figure 1 and ESP Figure 2 | After this point, both encapsulated IKE Figure 1 and ESP Figure 2 | |||
| messages will be sent over the TCP connection. | messages will be sent over the TCP connection. | |||
| skipping to change at page 8, line 36 ¶ | skipping to change at page 8, line 45 ¶ | |||
| availability model. It is also possible to negotiate multiple IKE | availability model. It is also possible to negotiate multiple IKE | |||
| SAs over the same TCP connection. | SAs over the same TCP connection. | |||
| The processing of the TCP packets is the same whether its within a | The processing of the TCP packets is the same whether its within a | |||
| single or multiple TCP connections. | single or multiple TCP connections. | |||
| 7. Interaction with NAT Detection Payloads | 7. Interaction with NAT Detection Payloads | |||
| When negotiating over UDP port 500, IKE_SA_INIT packets include | When negotiating over UDP port 500, IKE_SA_INIT packets include | |||
| NAT_DETECTION_SOURCE_IP and NAT_DETECTION_DESTINATION_IP payloads to | NAT_DETECTION_SOURCE_IP and NAT_DETECTION_DESTINATION_IP payloads to | |||
| determine if UDP encapsulation of IPSec packets should be used. | determine if UDP encapsulation of IPsec packets should be used. | |||
| These payloads contain SHA-1 digests of the SPIs, IP addresses, and | These payloads contain SHA-1 digests of the SPIs, IP addresses, and | |||
| ports. IKE_SA_INIT packets sent on a TCP connection SHOULD include | ports. IKE_SA_INIT packets sent on a TCP connection SHOULD include | |||
| these payloads, and SHOULD use the applicable TCP ports when creating | these payloads, and SHOULD use the applicable TCP ports when creating | |||
| and checking the SHA-1 digests. | and checking the SHA-1 digests. | |||
| If a NAT is detected due to the SHA-1 digests not matching the | If a NAT is detected due to the SHA-1 digests not matching the | |||
| expected values, no change should be made for encapsulation of | expected values, no change should be made for encapsulation of | |||
| subsequent IKE or ESP packets, since TCP encapsulation inherently | subsequent IKE or ESP packets, since TCP encapsulation inherently | |||
| supports NAT traversal. Implementations MAY use the information that | supports NAT traversal. Implementations MAY use the information that | |||
| a NAT is present to influence keep-alive timer values. | a NAT is present to influence keep-alive timer values. | |||
| 8. Using MOBIKE with TCP encapsulation | 8. Using MOBIKE with TCP encapsulation | |||
| When an IKE session is transitioned between networks using MOBIKE | When an IKE session is transitioned between networks using MOBIKE | |||
| [RFC4555], the initiator of the transition may switch between using | [RFC4555], the initiator of the transition may switch between using | |||
| TCP encapsulation, UDP encapsulation, or no encapsulation. | TCP encapsulation, UDP encapsulation, or no encapsulation. | |||
| Implementations that implement both MOBIKE and TCP encapsulation MUST | Implementations that implement both MOBIKE and TCP encapsulation MUST | |||
| support dynamically enabling and disabling TCP encapsulation as | support dynamically enabling and disabling TCP encapsulation as | |||
| interfaces change. | interfaces change. | |||
| The encapsulation method of ESP packets MUST always match the | When a MOBIKE-enabled initiator changes networks, the | |||
| encapsulation method of the IKE negotiation, which may be different | UPDATE_SA_ADDRESSES notification SHOULD be sent out first over UDP | |||
| when an IKE endpoint changes networks. When a MOBIKE-enabled | before attempting over TCP. If there is a response to the | |||
| initiator changes networks, the UPDATE_SA_ADDRESSES notification | UPDATE_SA_ADDRESSES notification sent over UDP, then the ESP packets | |||
| SHOULD be sent out first over UDP before attempting over TCP. If | should be sent directly over IP or over UDP port 4500 (depending on | |||
| there is a response to the UPDATE_SA_ADDRESSES notification sent over | if a NAT was detected), regardless of if a connection on a previous | |||
| UDP, then the ESP packets should be sent directly over IP or over UDP | network was using TCP encapsulation. Similarly, if the responder | |||
| port 4500 (depending on if a NAT was detected), regardless of if a | only responds to the UPDATE_SA_ADDRESSES notification over TCP, then | |||
| connection on a previous network was using TCP encapsulation. | the ESP packets should be sent over the TCP connection, regardless of | |||
| Similarly, if the responder only responds to the UPDATE_SA_ADDRESSES | if a connection on a previous network did not use TCP encapsulation. | |||
| notification over TCP, then the ESP packets should be sent over the | ||||
| TCP connection, regardless of if a connection on a previous network | ||||
| did not use TCP encapsulation. | ||||
| 9. Using IKE Message Fragmentation with TCP encapsulation | 9. Using IKE Message Fragmentation with TCP encapsulation | |||
| IKE Message Fragmentation [RFC7383] is not required when using TCP | IKE Message Fragmentation [RFC7383] is not required when using TCP | |||
| encapsulation, since a TCP stream already handles the fragmentation | encapsulation, since a TCP stream already handles the fragmentation | |||
| of its contents across packets. Since fragmentation is redundant in | of its contents across packets. Since fragmentation is redundant in | |||
| this case, implementations might choose to not negotiate IKE | this case, implementations might choose to not negotiate IKE | |||
| fragmentation. Even if fragmentation is negotiated, an | fragmentation. Even if fragmentation is negotiated, an | |||
| implementation MAY choose to not fragment when going over a TCP | implementation MAY choose to not fragment when going over a TCP | |||
| connection. | connection. | |||
| If an implementation supports both MOBIKE and IKE fragmentation, it | If an implementation supports both MOBIKE and IKE fragmentation, it | |||
| SHOULD negotiate IKE fragmentation over a TCP encapsulated session in | SHOULD negotiate IKE fragmentation over a TCP encapsulated session in | |||
| case the session switches to UDP encapsulation on another network. | case the session switches to UDP encapsulation on another network. | |||
| 10. Considerations for Keep-alives and DPD | 10. Considerations for Keep-alives and DPD | |||
| Encapsulating IKE and IPSec inside of a TCP connection can impact the | Encapsulating IKE and IPsec inside of a TCP connection can impact the | |||
| strategy that implementations use to detect peer liveness and to | strategy that implementations use to detect peer liveness and to | |||
| maintain middlebox port mappings. Peer liveness should be checked | maintain middlebox port mappings. Peer liveness should be checked | |||
| using IKE Informational packets [RFC7296]. | using IKE Informational packets [RFC7296]. | |||
| In general, TCP port mappings are maintained by NATs longers than UDP | In general, TCP port mappings are maintained by NATs longers than UDP | |||
| port mappings, so IPSec ESP NAT keep-alives [RFC3948] SHOULD NOT be | port mappings, so IPsec ESP NAT keep-alives [RFC3948] SHOULD NOT be | |||
| sent when using TCP encapsulation. Any implementation using TCP | sent when using TCP encapsulation. Any implementation using TCP | |||
| encapsulation MUST silently drop incoming NAT keep-alive packets, and | encapsulation MUST silently drop incoming NAT keep-alive packets, and | |||
| not treat them as errors. NAT keep-alive packets over a TCP | not treat them as errors. NAT keep-alive packets over a TCP | |||
| encapsulated IPSec connection will be sent with a length value of 1 | encapsulated IPsec connection will be sent with a length value of 1 | |||
| byte, whose value is 0xFF [Figure 2]. | byte, whose value is 0xFF [Figure 2]. | |||
| Note that depending on the configuration of TCP and TLS on the | Note that depending on the configuration of TCP and TLS on the | |||
| connection, TCP keep-alives [RFC1122] and TLS keep-alives [RFC6520] | connection, TCP keep-alives [RFC1122] and TLS keep-alives [RFC6520] | |||
| may be used. These MUST NOT be used as indications of IKE peer | may be used. These MUST NOT be used as indications of IKE peer | |||
| liveness. | liveness. | |||
| 11. Middlebox Considerations | 11. Middlebox Considerations | |||
| Many security networking devices such as Firewalls or Intrusion | Many security networking devices such as Firewalls or Intrusion | |||
| skipping to change at page 10, line 36 ¶ | skipping to change at page 10, line 37 ¶ | |||
| port 80, if non-HTTP traffic is seen (such as TCP encapsulated IKE), | port 80, if non-HTTP traffic is seen (such as TCP encapsulated IKE), | |||
| this could be dropped by the security device. | this could be dropped by the security device. | |||
| A network device that monitors the transport layer will track the | A network device that monitors the transport layer will track the | |||
| state of TCP sessions, such as TCP sequence numbers. TCP | state of TCP sessions, such as TCP sequence numbers. TCP | |||
| encapsulation of IKE should therefore use standard TCP behaviors to | encapsulation of IKE should therefore use standard TCP behaviors to | |||
| avoid being dropped by middleboxes. | avoid being dropped by middleboxes. | |||
| 12. Performance Considerations | 12. Performance Considerations | |||
| Several aspects of TCP encapsulation for IKE and IPSec packets may | Several aspects of TCP encapsulation for IKE and IPsec packets may | |||
| negatively impact the performance of connections within the tunnel. | negatively impact the performance of connections within the tunnel. | |||
| Implementations should be aware of these and take these into | Implementations should be aware of these and take these into | |||
| consideration when determining when to use TCP encapsulation. | consideration when determining when to use TCP encapsulation. | |||
| 12.1. TCP-in-TCP | 12.1. TCP-in-TCP | |||
| If the outer connection between IKE peers is over TCP, inner TCP | If the outer connection between IKE peers is over TCP, inner TCP | |||
| connections may suffer effects from using TCP within TCP. In | connections may suffer effects from using TCP within TCP. In | |||
| particular, the inner TCP's round-trip-time estimation will be | particular, the inner TCP's round-trip-time estimation will be | |||
| affected by the burstiness of the outer TCP. This will make loss- | affected by the burstiness of the outer TCP. This will make loss- | |||
| skipping to change at page 11, line 35 ¶ | skipping to change at page 11, line 35 ¶ | |||
| maximum segment size (MSS) in order to avoid unnecessary | maximum segment size (MSS) in order to avoid unnecessary | |||
| fragmentation of packets. | fragmentation of packets. | |||
| 13. Security Considerations | 13. Security Considerations | |||
| IKE responders that support TCP encapsulation may become vulnerable | IKE responders that support TCP encapsulation may become vulnerable | |||
| to new Denial-of-Service (DoS) attacks that are specific to TCP, such | to new Denial-of-Service (DoS) attacks that are specific to TCP, such | |||
| as SYN-flooding attacks. Responders should be aware of this | as SYN-flooding attacks. Responders should be aware of this | |||
| additional attack-surface. | additional attack-surface. | |||
| Responders should be careful to ensure that the stream prefix | ||||
| "IKETCP" uniquely identifies streams using the TCP encapsulation | ||||
| protocol. The prefix was chosen to not overlap with the start of any | ||||
| known valid protocol over TCP, but implementations should make sure | ||||
| to validate this assumption in order to avoid unexpected processing | ||||
| of TCP connections. | ||||
| Attackers may be able to disrupt the TCP connection by sending | Attackers may be able to disrupt the TCP connection by sending | |||
| spurious RST packets. Due to this, implementations SHOULD make sure | spurious RST packets. Due to this, implementations SHOULD make sure | |||
| that IKE session state persists even if the underlying TCP connection | that IKE session state persists even if the underlying TCP connection | |||
| is torn down. | is torn down. | |||
| 14. IANA Considerations | 14. IANA Considerations | |||
| This memo includes no request to IANA. | This memo includes no request to IANA. | |||
| TCP port 4500 is already allocated to IPSec. This port MAY be used | TCP port 4500 is already allocated to IPsec. This port MAY be used | |||
| for the protocol described in this document, but implementations MAY | for the protocol described in this document, but implementations MAY | |||
| prefer to use other ports based on local policy. | prefer to use other ports based on local policy. | |||
| 15. Acknowledgments | 15. Acknowledgments | |||
| The authors would like to acknowledge the input and advice of Stuart | The authors would like to acknowledge the input and advice of Stuart | |||
| Cheshire, Delziel Fernandes, Yoav Nir, Christoph Paasch, Yaron | Cheshire, Delziel Fernandes, Yoav Nir, Christoph Paasch, Yaron | |||
| Sheffer, David Schinazi, Graham Bartlett, Byju Pularikkal, March Wu | Sheffer, David Schinazi, Graham Bartlett, Byju Pularikkal, March Wu | |||
| and Kingwel Xie. Special thanks to Eric Kinnear for his | and Kingwel Xie. Special thanks to Eric Kinnear for his | |||
| implementation work. | implementation work. | |||
| skipping to change at page 14, line 4 ¶ | skipping to change at page 14, line 14 ¶ | |||
| The security of the IKE session is entirely derived from the IKE | The security of the IKE session is entirely derived from the IKE | |||
| negotiation and key establishment and not from the TLS session (which | negotiation and key establishment and not from the TLS session (which | |||
| in this context is only used for encapsulation purposes), therefore | in this context is only used for encapsulation purposes), therefore | |||
| when TLS is used on the TCP connection, both the initiator and | when TLS is used on the TCP connection, both the initiator and | |||
| responder SHOULD allow the NULL cipher to be selected for performance | responder SHOULD allow the NULL cipher to be selected for performance | |||
| reasons. | reasons. | |||
| Implementations should be aware that the use of TLS introduces | Implementations should be aware that the use of TLS introduces | |||
| another layer of overhead requiring more bytes to transmit a given | another layer of overhead requiring more bytes to transmit a given | |||
| IKE and IPSec packet. For this reason, direct ESP, UDP | IKE and IPsec packet. For this reason, direct ESP, UDP | |||
| encapsulation, or TCP encapsulation without TLS should be preferred | encapsulation, or TCP encapsulation without TLS should be preferred | |||
| in situations in which TLS is not required in order to traverse | in situations in which TLS is not required in order to traverse | |||
| middle-boxes. | middle-boxes. | |||
| Appendix B. Example exchanges of TCP Encapsulation with TLS | Appendix B. Example exchanges of TCP Encapsulation with TLS | |||
| B.1. Establishing an IKE session | B.1. Establishing an IKE session | |||
| Client Server | Client Server | |||
| ---------- ---------- | ---------- ---------- | |||
| 1) -------------------- TCP Connection ------------------- | 1) -------------------- TCP Connection ------------------- | |||
| End of changes. 38 change blocks. | ||||
| 65 lines changed or deleted | 83 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||