| rfc9028.original | rfc9028.txt | |||
|---|---|---|---|---|
| HIP Working Group A. Keranen | Internet Engineering Task Force (IETF) A. Keränen | |||
| Internet-Draft J. Melen | Request for Comments: 9028 J. Melén | |||
| Intended status: Experimental M. Komu, Ed. | Category: Experimental M. Komu, Ed. | |||
| Expires: February 4, 2021 Ericsson | ISSN: 2070-1721 Ericsson | |||
| August 3, 2020 | June 2021 | |||
| Native NAT Traversal Mode for the Host Identity Protocol | Native NAT Traversal Mode for the Host Identity Protocol | |||
| draft-ietf-hip-native-nat-traversal-33 | ||||
| Abstract | Abstract | |||
| This document specifies a new Network Address Translator (NAT) | This document specifies a new Network Address Translator (NAT) | |||
| traversal mode for the Host Identity Protocol (HIP). The new mode is | traversal mode for the Host Identity Protocol (HIP). The new mode is | |||
| based on the Interactive Connectivity Establishment (ICE) methodology | based on the Interactive Connectivity Establishment (ICE) methodology | |||
| and UDP encapsulation of data and signaling traffic. The main | and UDP encapsulation of data and signaling traffic. The main | |||
| difference from the previously specified modes is the use of HIP | difference from the previously specified modes is the use of HIP | |||
| messages instead of ICE for all NAT traversal procedures due to the | messages instead of ICE for all NAT traversal procedures due to the | |||
| kernel-space dependencies of HIP. | kernel-space dependencies of HIP. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
| provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
| evaluation. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document defines an Experimental Protocol for the Internet | |||
| and may be updated, replaced, or obsoleted by other documents at any | community. This document is a product of the Internet Engineering | |||
| time. It is inappropriate to use Internet-Drafts as reference | Task Force (IETF). It represents the consensus of the IETF | |||
| material or to cite them other than as "work in progress." | community. It has received public review and has been approved for | |||
| publication by the Internet Engineering Steering Group (IESG). Not | ||||
| all documents approved by the IESG are candidates for any level of | ||||
| Internet Standard; see Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on February 4, 2021. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9028. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology | |||
| 3. Overview of Operation . . . . . . . . . . . . . . . . . . . . 8 | 3. Overview of Operation | |||
| 4. Protocol Description . . . . . . . . . . . . . . . . . . . . 10 | 4. Protocol Description | |||
| 4.1. Relay Registration . . . . . . . . . . . . . . . . . . . 10 | 4.1. Relay Registration | |||
| 4.2. Transport Address Candidate Gathering at the Relay Client 13 | 4.2. Transport Address Candidate Gathering at the Relay Client | |||
| 4.3. NAT Traversal Mode Negotiation . . . . . . . . . . . . . 16 | 4.3. NAT Traversal Mode Negotiation | |||
| 4.4. Connectivity Check Pacing Negotiation . . . . . . . . . . 17 | 4.4. Connectivity Check Pacing Negotiation | |||
| 4.5. Base Exchange via Control Relay Server . . . . . . . . . 17 | 4.5. Base Exchange via Control Relay Server | |||
| 4.6. Connectivity Checks . . . . . . . . . . . . . . . . . . . 20 | 4.6. Connectivity Checks | |||
| 4.6.1. Connectivity Check Procedure . . . . . . . . . . . . 21 | 4.6.1. Connectivity Check Procedure | |||
| 4.6.2. Rules for Connectivity Checks . . . . . . . . . . . . 24 | 4.6.2. Rules for Connectivity Checks | |||
| 4.6.3. Rules for Concluding Connectivity Checks . . . . . . 26 | 4.6.3. Rules for Concluding Connectivity Checks | |||
| 4.7. NAT Traversal Optimizations . . . . . . . . . . . . . . . 27 | 4.7. NAT Traversal Optimizations | |||
| 4.7.1. Minimal NAT Traversal Support . . . . . . . . . . . . 27 | 4.7.1. Minimal NAT Traversal Support | |||
| 4.7.2. Base Exchange without Connectivity Checks . . . . . . 27 | 4.7.2. Base Exchange without Connectivity Checks | |||
| 4.7.3. Initiating a Base Exchange both with and without UDP | 4.7.3. Initiating a Base Exchange Both with and without UDP | |||
| Encapsulation . . . . . . . . . . . . . . . . . . . . 29 | Encapsulation | |||
| 4.8. Sending Control Packets after the Base Exchange . . . . . 29 | 4.8. Sending Control Packets after the Base Exchange | |||
| 4.9. Mobility Handover Procedure . . . . . . . . . . . . . . . 30 | 4.9. Mobility Handover Procedure | |||
| 4.10. NAT Keepalives . . . . . . . . . . . . . . . . . . . . . 34 | 4.10. NAT Keepalives | |||
| 4.11. Closing Procedure . . . . . . . . . . . . . . . . . . . . 35 | 4.11. Closing Procedure | |||
| 4.12. Relaying Considerations . . . . . . . . . . . . . . . . . 35 | 4.12. Relaying Considerations | |||
| 4.12.1. Forwarding Rules and Permissions . . . . . . . . . . 35 | 4.12.1. Forwarding Rules and Permissions | |||
| 4.12.2. HIP Data Relay and Relaying of Control Packets . . . 36 | 4.12.2. HIP Data Relay and Relaying of Control Packets | |||
| 4.12.3. Handling Conflicting SPI Values . . . . . . . . . . 37 | 4.12.3. Handling Conflicting SPI Values | |||
| 5. Packet Formats . . . . . . . . . . . . . . . . . . . . . . . 38 | 5. Packet Formats | |||
| 5.1. HIP Control Packets . . . . . . . . . . . . . . . . . . . 38 | 5.1. HIP Control Packets | |||
| 5.2. Connectivity Checks . . . . . . . . . . . . . . . . . . . 40 | 5.2. Connectivity Checks | |||
| 5.3. Keepalives . . . . . . . . . . . . . . . . . . . . . . . 40 | 5.3. Keepalives | |||
| 5.4. NAT Traversal Mode Parameter . . . . . . . . . . . . . . 40 | 5.4. NAT Traversal Mode Parameter | |||
| 5.5. Connectivity Check Transaction Pacing Parameter . . . . . 41 | 5.5. Connectivity Check Transaction Pacing Parameter | |||
| 5.6. Relay and Registration Parameters . . . . . . . . . . . . 42 | 5.6. Relay and Registration Parameters | |||
| 5.7. LOCATOR_SET Parameter . . . . . . . . . . . . . . . . . . 43 | 5.7. LOCATOR_SET Parameter | |||
| 5.8. RELAY_HMAC Parameter . . . . . . . . . . . . . . . . . . 45 | 5.8. RELAY_HMAC Parameter | |||
| 5.9. Registration Types . . . . . . . . . . . . . . . . . . . 45 | 5.9. Registration Types | |||
| 5.10. Notify Packet Types . . . . . . . . . . . . . . . . . . . 45 | 5.10. Notify Packet Types | |||
| 5.11. ESP Data Packets . . . . . . . . . . . . . . . . . . . . 46 | 5.11. ESP Data Packets | |||
| 5.12. RELAYED_ADDRESS and MAPPED_ADDRESS Parameters . . . . . . 46 | 5.12. RELAYED_ADDRESS and MAPPED_ADDRESS Parameters | |||
| 5.13. PEER_PERMISSION Parameter . . . . . . . . . . . . . . . . 47 | 5.13. PEER_PERMISSION Parameter | |||
| 5.14. HIP Connectivity Check Packets . . . . . . . . . . . . . 48 | 5.14. HIP Connectivity Check Packets | |||
| 5.15. NOMINATE parameter . . . . . . . . . . . . . . . . . . . 49 | 5.15. NOMINATE Parameter | |||
| 6. IAB Considerations | ||||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 49 | 7. Security Considerations | |||
| 6.1. Privacy Considerations . . . . . . . . . . . . . . . . . 50 | 7.1. Privacy Considerations | |||
| 6.2. Opportunistic Mode . . . . . . . . . . . . . . . . . . . 50 | 7.2. Opportunistic Mode | |||
| 6.3. Base Exchange Replay Protection for Control Relay Server 50 | 7.3. Base Exchange Replay Protection for Control Relay Server | |||
| 6.4. Demultiplexing Different HIP Associations . . . . . . . . 51 | 7.4. Demultiplexing Different HIP Associations | |||
| 6.5. Reuse of Ports at the Data Relay Server . . . . . . . . . 51 | 7.5. Reuse of Ports at the Data Relay Server | |||
| 6.6. Amplification attacks . . . . . . . . . . . . . . . . . . 51 | 7.6. Amplification Attacks | |||
| 6.7. Attacks against Connectivity Checks and Candidate | 7.7. Attacks against Connectivity Checks and Candidate Gathering | |||
| Gathering . . . . . . . . . . . . . . . . . . . . . . . . 52 | 7.8. Cross-Protocol Attacks | |||
| 6.8. Cross-Protocol Attacks . . . . . . . . . . . . . . . . . 52 | 8. IANA Considerations | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 53 | 9. References | |||
| 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 54 | 9.1. Normative References | |||
| 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 54 | 9.2. Informative References | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 | Appendix A. Selecting a Value for Check Pacing | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 55 | Appendix B. Differences with Respect to ICE | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 57 | Appendix C. Differences to Base Exchange and UPDATE Procedures | |||
| Appendix A. Selecting a Value for Check Pacing . . . . . . . . . 59 | Appendix D. Multihoming Considerations | |||
| Appendix B. Differences with respect to ICE . . . . . . . . . . 59 | Appendix E. DNS Considerations | |||
| Appendix C. Differences to Base Exchange and UPDATE procedures . 62 | Acknowledgments | |||
| Appendix D. Multihoming Considerations . . . . . . . . . . . . . 64 | Contributors | |||
| Appendix E. DNS Considerations . . . . . . . . . . . . . . . . . 65 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 66 | ||||
| 1. Introduction | 1. Introduction | |||
| The Host Identity Protocol (HIP) [RFC7401] is specified to run | The Host Identity Protocol (HIP) [RFC7401] is specified to run | |||
| directly on top of IPv4 or IPv6. However, many middleboxes found in | directly on top of IPv4 or IPv6. However, many middleboxes found in | |||
| the Internet, such as NATs and firewalls, often allow only UDP or TCP | the Internet, such as NATs and firewalls, often allow only UDP or TCP | |||
| traffic to pass [RFC5207]. Also, NATs usually require the host | traffic to pass [RFC5207]. Also, NATs usually require the host | |||
| behind a NAT to create a forwarding state in the NAT before other | behind a NAT to create a forwarding state in the NAT before other | |||
| hosts outside of the NAT can contact the host behind the NAT. To | hosts outside of the NAT can contact the host behind the NAT. To | |||
| overcome this problem, different methods, commonly referred to as NAT | overcome this problem, different methods, commonly referred to as NAT | |||
| traversal techniques, have been developed. | traversal techniques, have been developed. | |||
| As one solution, the HIP experiment report [RFC6538] mentions Teredo- | As one solution, the HIP experiment report [RFC6538] mentions Teredo- | |||
| based NAT traversal for HIP and related ESP traffic (with double | based NAT traversal for HIP and related Encapsulating Security | |||
| tunneling overhead). Another solution is specified in [RFC5770], | Payload (ESP) traffic (with double tunneling overhead). Another | |||
| which will be referred to as "Legacy ICE-HIP" in this document. The | solution is specified in [RFC5770], which will be referred to as | |||
| experimental Legacy ICE-HIP specification combines Interactive | "Legacy ICE-HIP" in this document. The experimental Legacy ICE-HIP | |||
| Connectivity Establishment (ICE) protocol [RFC5245] with HIP, so that | specification combines the Interactive Connectivity Establishment | |||
| basically ICE is responsible for NAT traversal and connectivity | (ICE) protocol (originally [RFC5245]) with HIP so that basically, ICE | |||
| testing, while HIP is responsible for end-host authentication and | is responsible for NAT traversal and connectivity testing, while HIP | |||
| IPsec key management. The resulting protocol uses HIP, STUN and ESP | is responsible for end-host authentication and IPsec key management. | |||
| messages tunneled over a single UDP flow. The benefit of using ICE | The resulting protocol uses HIP, Session Traversal Utilities for NAT | |||
| and its STUN/TURN messaging formats is that one can re-use the NAT | (STUN), and ESP messages tunneled over a single UDP flow. The | |||
| traversal infrastructure already available in the Internet, such as | benefit of using ICE and its STUN / Traversal Using Relays around NAT | |||
| STUN and TURN servers. Also, some middleboxes may be STUN-aware and | (TURN) messaging formats is that one can reuse the NAT traversal | |||
| may be able to do something "smart" when they see STUN being used for | infrastructure already available in the Internet, such as STUN and | |||
| NAT traversal. | TURN servers. Also, some middleboxes may be STUN aware and may be | |||
| able to do something "smart" when they see STUN being used for NAT | ||||
| traversal. | ||||
| HIP poses a unique challenge to using standard ICE, due not only to | HIP poses a unique challenge to using standard ICE, not only due to | |||
| kernel-space dependencies of HIP, but also due to its close | kernel-space dependencies of HIP, but also due to its close | |||
| integration with kernel-space IPSec; and, that while [RFC5770] | integration with kernel-space IPsec; and, while [RFC5770] provides a | |||
| provides a technically workable path, it incurs unacceptable | technically workable path, HIP incurs unacceptable performance | |||
| performance drawbacks for kernel-space implementations. Also, | drawbacks for kernel-space implementations. Also, implementing and | |||
| implementing and integrating a full ICE/STUN/TURN protocol stack as | integrating a full ICE/STUN/TURN protocol stack as specified in | |||
| specified in Legacy ICE-HIP results in a considerable amount of | Legacy ICE-HIP results in a considerable amount of effort and code, | |||
| effort and code which could be avoided by re-using and extending HIP | which could be avoided by reusing and extending HIP messages and | |||
| messages and state machines for the same purpose. Thus, this | state machines for the same purpose. Thus, this document specifies | |||
| document specifies an alternative NAT traversal mode referred as | an alternative NAT traversal mode referred to as "Native ICE-HIP" | |||
| "Native ICE-HIP" that employs HIP messaging format instead of STUN or | that employs the HIP messaging format instead of STUN or TURN for the | |||
| TURN for the connectivity checks, keepalives and data relaying. | connectivity checks, keepalives, and data relaying. Native ICE-HIP | |||
| Native ICE-HIP also specifies how mobility management works in the | also specifies how mobility management works in the context of NAT | |||
| context of NAT traversal, which is missing from the Legacy ICE-HIP | traversal, which is missing from the Legacy ICE-HIP specification. | |||
| specification. The native specification is also based on HIPv2, | The native specification is also based on HIPv2, whereas the legacy | |||
| whereas legacy specification is based on HIPv1. The differences to | specification is based on HIPv1. The differences to Legacy ICE-HIP | |||
| the Legacy ICE-HIP are further elaborated in Appendix B. | are further elaborated in Appendix B. | |||
| Similarly as Legacy ICE-HIP, also this specification builds on the | Similar to Legacy ICE-HIP, this specification builds on the HIP | |||
| HIP registration extensions [RFC8003] and the base exchange procedure | registration extensions [RFC8003] and the base exchange procedure | |||
| [RFC7401] and its closing procedures, so the reader is recommended to | [RFC7401] and its closing procedures; therefore, the reader is | |||
| get familiar with the relevant specifications. In a nutshell, the | recommended to get familiar with the relevant specifications. In a | |||
| registration extensions allow a HIP Initiator (usually a "client" | nutshell, the registration extensions allow a HIP Initiator (usually | |||
| host) to ask for specific services from a HIP Responder (usually a | a "client" host) to ask for specific services from a HIP Responder | |||
| "server" host). The registration parameters are included in a base | (usually a "server" host). The registration parameters are included | |||
| exchange, which is essentially a four-way Diffie-Hellman key exchange | in a base exchange, which is essentially a four-way Diffie-Hellman | |||
| authenticated using the public keys of the end-hosts. When the hosts | key exchange authenticated using the public keys of the end hosts. | |||
| negotiate support for ESP [RFC7402] during the base exchange, they | When the hosts negotiate support for ESP [RFC7402] during the base | |||
| can deliver ESP protected application payload to each other. When | exchange, they can deliver ESP-protected application payload to each | |||
| either of the hosts moves and changes its IP address, the two hosts | other. When either of the hosts moves and changes its IP address, | |||
| re-establish connectivity using the mobility extensions [RFC8046]. | the two hosts re-establish connectivity using the mobility extensions | |||
| The reader is also recommended to get familiar with the mobility | [RFC8046]. The reader is also recommended to get familiar with the | |||
| extensions, but basically it is a three-way procedure, where the | mobility extensions; basically, the process is a three-way procedure | |||
| mobile host first announces its new location to the peer, and then | where the mobile host first announces its new location to the peer; | |||
| the peer tests for connectivity (so called return routability check), | then, the peer tests for connectivity (the so-called return | |||
| for which the mobile hosts must respond in order to activate its new | routability check); and then, the mobile host must respond to the | |||
| location. This specification builds on the mobility procedures, but | announcement in order to activate its new location. This | |||
| modifies it to be compatible with ICE. The differences to the | specification builds on the mobility procedures, but modifies them to | |||
| mobility extensions specified in Appendix C. It is worth noting that | be compatible with ICE. The differences in the mobility extensions | |||
| multihoming support as specified in [RFC8047] is left for further | are specified in Appendix C. It is worth noting that multihoming | |||
| study. | support as specified in [RFC8047] is left for further study. | |||
| This specification builds heavily on the ICE methodology, so it is | This specification builds heavily on the ICE methodology, so it is | |||
| recommended that the reader is familiar with the ICE specification | recommended that the reader is familiar with the ICE specification | |||
| [RFC8445] (especially the overview). However, native ICE-HIP does | [RFC8445] (especially the overview). However, Native ICE-HIP does | |||
| not implement all the features in ICE, and, hence, the different | not implement all the features in ICE; hence, the different features | |||
| features of ICE are cross referenced using [RFC2119] terminology for | of ICE are cross referenced using [RFC2119] terminology for clarity. | |||
| clarity. Appendix B explains the differences to ICE, and it is | Appendix B explains the differences to ICE, and it is recommended | |||
| recommended that the reader would read also this section in addition | that the reader read this section in addition to the ICE | |||
| to the ICE specification. | specification. | |||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This document borrows terminology from [RFC5770], [RFC7401], | This document borrows terminology from [RFC5770], [RFC7401], | |||
| [RFC8046], [I-D.ietf-hip-rfc4423-bis], [RFC8445], and [RFC5389]. The | [RFC8046], [RFC9068], [RFC8445], and [RFC8489]. The following terms | |||
| following terms recur in the text: | recur in the text: | |||
| ICE: | ICE: | |||
| Interactive Connectivity Establishment (ICE) protocol as specified | Interactive Connectivity Establishment (ICE) protocol as specified | |||
| in [RFC8445] | in [RFC8445]. | |||
| Legacy ICE-HIP: | Legacy ICE-HIP: | |||
| Refers to the "Basic Host Identity Protocol (HIP) Extensions for | Refers to the "Basic Host Identity Protocol (HIP) Extensions for | |||
| Traversal of Network Address Translators" as specified in | Traversal of Network Address Translators" as specified in | |||
| [RFC5770]. The protocol specified in this document offers an | [RFC5770]. The protocol specified in this document offers an | |||
| alternative to Legacy ICE-HIP. | alternative to Legacy ICE-HIP. | |||
| Native ICE-HIP: | Native ICE-HIP: | |||
| The protocol specified in this document (Native NAT Traversal Mode | The protocol specified in this document (Native NAT Traversal Mode | |||
| for HIP). | for HIP). | |||
| Initiator: | Initiator: | |||
| The Initiator is the host that initiates the base exchange using | The host that initiates the base exchange using I1 message | |||
| I1 message [RFC7401]. | [RFC7401]. | |||
| Responder: | Responder: | |||
| The Responder is the host that receives the I1 packet from the | The host that receives the I1 packet from the Initiator [RFC7401]. | |||
| Initiator [RFC7401]. | ||||
| Control Relay Server | Control Relay Server | |||
| A registrar host that forwards any kind of HIP control plane | A registrar host that forwards any kind of HIP control plane | |||
| packets between the Initiator and the Responder. This host is | packets between the Initiator and the Responder. This host is | |||
| critical because it relays the locators between the Initiator and | critical because it relays the locators between the Initiator and | |||
| the Responder, so that they can try to establish a direct | the Responder so that they can try to establish a direct | |||
| communication path with each other. This host is used to replace | communication path with each other. This host is used to replace | |||
| HIP rendezvous servers [RFC8004] for hosts operating in private | HIP Rendezvous Servers [RFC8004] for hosts operating in private | |||
| address realms. In the Legacy ICE-HIP specification [RFC5770], | address realms. In the Legacy ICE-HIP specification [RFC5770], | |||
| this host is denoted as "HIP Relay Server". | this host is denoted as "HIP Relay Server". | |||
| Control Relay Client: | Control Relay Client: | |||
| A requester host that registers to a Control Relay Server | A requester host that registers to a Control Relay Server | |||
| requesting it to forward control-plane traffic (i.e. HIP control | requesting it to forward control plane traffic (i.e., HIP control | |||
| messages). In the Legacy ICE-HIP specification [RFC5770], this is | messages). In the Legacy ICE-HIP specification [RFC5770], this is | |||
| denoted as "HIP Relay Client". | denoted as "HIP Relay Client". | |||
| Data Relay Server: | Data Relay Server: | |||
| A new entity introduced in this document; a registrar host that | A new entity introduced in this document; a registrar host that | |||
| forwards HIP related data plane packets, such as Encapsulating | forwards HIP related data plane packets, such as Encapsulating | |||
| Security Payload (ESP) [RFC7402], between two hosts. This host | Security Payload (ESP) [RFC7402], between two hosts. This host | |||
| implements similar functionality as TURN servers. | implements similar functionality as TURN servers. | |||
| Data Relay Client: | Data Relay Client: | |||
| A requester host that registers to a Data Relay Server requesting | A requester host that registers to a Data Relay Server requesting | |||
| it to forward data-plane traffic (e.g. ESP traffic). This | it to forward data plane traffic (e.g. ESP traffic). This | |||
| functionality is a new and introduced in this document. | functionality is a new and introduced in this document. | |||
| Locator: | Locator: | |||
| As defined in [RFC8046]: "A name that controls how the packet is | As defined in [RFC8046]: "A name that controls how the packet is | |||
| routed through the network and demultiplexed by the end-host. It | routed through the network and demultiplexed by the end host. It | |||
| may include a concatenation of traditional network addresses such | may include a concatenation of traditional network addresses such | |||
| as an IPv6 address and end-to-end identifiers such as an ESP | as an IPv6 address and end-to-end identifiers such as an ESP SPI. | |||
| Security Parameter Index (SPI). It may also include transport | It may also include transport port numbers or IPv6 Flow Labels as | |||
| port numbers or IPv6 Flow Labels as demultiplexing context, or it | demultiplexing context, or it may simply be a network address." | |||
| may simply be a network address." | ||||
| LOCATOR_SET (written in capital letters): | LOCATOR_SET (written in capital letters): | |||
| Denotes a HIP control packet parameter that bundles multiple | Denotes a HIP control packet parameter that bundles multiple | |||
| locators together [RFC8046]. | locators together [RFC8046]. | |||
| HIP offer: | HIP offer: | |||
| Before two end-hosts can establish a communication channel using | Before two end hosts can establish a communication channel using | |||
| the NAT traversal procedures defined in this document, they need | the NAT traversal procedures defined in this document, they need | |||
| exchange their locators (i.e. candidates) with each other. In | to exchange their locators (i.e., candidates) with each other. In | |||
| ICE, this procedure is called Candidate Exchange and it does not | ICE, this procedure is called Candidate Exchange; it does not | |||
| specify how the candidates are exchanged but Session Description | specify how the candidates are exchanged, but Session Description | |||
| Protocol (SDP) "offer/answer" is mentioned as an example. In | Protocol (SDP) "offer/answer" is mentioned as an example. In | |||
| contrast, the Candidate Exchange in HIP is the base exchange | contrast, the Candidate Exchange in HIP is the base exchange | |||
| itself or a subsequent UPDATE prodecure occurring after a | itself or a subsequent UPDATE procedure occurring after a | |||
| handover. Following [RFC5770] and SDP related naming conventions | handover. Following [RFC5770] and SDP-related naming conventions | |||
| [RFC3264], "HIP offer" is the the Initiator's LOCATOR_SET | [RFC3264], "HIP offer" is the Initiator's LOCATOR_SET parameter in | |||
| parameter in a HIP I2 or in an UPDATE control packet. | a HIP I2 or in an UPDATE control packet. | |||
| HIP answer: | HIP answer: | |||
| The Responder's LOCATOR_SET parameter in a HIP R2 or UPDATE | The Responder's LOCATOR_SET parameter in a HIP R2 or UPDATE | |||
| control packet. Corresponds to the SDP answer parameter | control packet. The HIP answer corresponds to the SDP answer | |||
| [RFC3264], but is HIP specific. Please refer also to the longer | parameter [RFC3264] but is HIP specific. Please refer also to the | |||
| description of the "HIP offer" term above. | longer description of the "HIP offer" term above. | |||
| HIP connectivity checks: | HIP connectivity checks: | |||
| In order to obtain a direct end-to-end communication path (without | In order to obtain a direct end-to-end communication path (without | |||
| employing a Data Relay Server), two communicating HIP hosts try to | employing a Data Relay Server), two communicating HIP hosts try to | |||
| "punch holes" through their NAT boxes using this mechanism. It is | "punch holes" through their NAT boxes using this mechanism. It is | |||
| similar to the ICE connectivity checks, but implemented using HIP | similar to the ICE connectivity checks but implemented using HIP | |||
| return routability checks. | return routability checks. | |||
| Controlling host: | Controlling host: | |||
| The controlling host [RFC8445] is always the Initiator in the | The controlling host [RFC8445] is always the Initiator in the | |||
| context of this specification. It nominates the candidate pair to | context of this specification. It nominates the candidate pair to | |||
| be used with the controlled host. | be used with the controlled host. | |||
| Controlled host: | Controlled host: | |||
| The controlled host [RFC8445] is always the Responder in the | The controlled host [RFC8445] is always the Responder in the | |||
| context of this specification. It waits for the controlling to | context of this specification. It waits for the controlling host | |||
| nominate an address candidate pair. | to nominate an address candidate pair. | |||
| Checklist: | Checklist: | |||
| A list of address candidate pairs that need to be tested for | A list of address candidate pairs that need to be tested for | |||
| connectivity (same as in [RFC8445]). | connectivity (same as in [RFC8445]). | |||
| Transport address: | Transport address: | |||
| Transport layer port and the corresponding IPv4/v6 address (same | Transport-layer port and the corresponding IPv4/v6 address (same | |||
| as in [RFC8445]). | as in [RFC8445]). | |||
| Candidate: | Candidate: | |||
| A transport address that is a potential point of contact for | A transport address that is a potential point of contact for | |||
| receiving data (same as in [RFC8445]). | receiving data (same as in [RFC8445]). | |||
| Host candidate: | Host candidate: | |||
| A candidate obtained by binding to a specific port from an IP | A candidate obtained by binding to a specific port from an IP | |||
| address on the host (same as in [RFC8445]). | address on the host (same as in [RFC8445]). | |||
| Server reflexive candidate: | Server-reflexive candidate: | |||
| A translated transport address of a host as observed by a Control | A translated transport address of a host as observed by a Control | |||
| or Data Relay Server (same as in [RFC8445]). | or Data Relay Server (same as in [RFC8445]). | |||
| Peer reflexive candidate: | Peer-reflexive candidate: | |||
| A translated transport address of a host as observed by its peer | A translated transport address of a host as observed by its peer | |||
| (same as in [RFC8445]). | (same as in [RFC8445]). | |||
| Relayed candidate: | Relayed candidate: | |||
| A transport address that exists on a Data Relay Server. Packets | A transport address that exists on a Data Relay Server. Packets | |||
| that arrive at this address are relayed towards the Data Relay | that arrive at this address are relayed towards the Data Relay | |||
| Client. The concept is the same as in [RFC8445], but a Data Relay | Client. The concept is the same as in [RFC8445], but a Data Relay | |||
| Server is used instead of a TURN server. | Server is used instead of a TURN server. | |||
| Permission: | Permission: | |||
| In the context of Data Relay Server, permission refers to a | In the context of Data Relay Server, permission refers to a | |||
| concept similar to TURN's ([RFC5766]) channels. Before a host can | concept similar to TURN's [RFC8656] channels. Before a host can | |||
| use a relayed candidate to forward traffic through a Data Relay | use a relayed candidate to forward traffic through a Data Relay | |||
| Server, the host must activate the relayed candidate with a | Server, the host must activate the relayed candidate with a | |||
| specific peer host. | specific peer host. | |||
| Base: | Base: | |||
| Similarly as in [RFC8445], the base of a candidate is the local | Similar to that described in [RFC8445], the base of a candidate is | |||
| source address a host uses to send packets for the associated | the local source address a host uses to send packets for the | |||
| candidate. For example, the base of a server reflexive address is | associated candidate. For example, the base of a server-reflexive | |||
| the local address the host used for registering itself to the | address is the local address the host used for registering itself | |||
| associated Control or Data Relay Server. The base of a host | to the associated Control or Data Relay Server. The base of a | |||
| candidate is equal to the host candidate itself. | host candidate is equal to the host candidate itself. | |||
| 3. Overview of Operation | 3. Overview of Operation | |||
| +--------------+ | +--------------+ | |||
| | Control | | | Control | | |||
| +--------+ | Relay Server | +--------+ | +--------+ | Relay Server | +--------+ | |||
| | Data | +----+-----+---+ | Data | | | Data | +----+-----+---+ | Data | | |||
| | Relay | / \ | Relay | | | Relay | / \ | Relay | | |||
| | Server | / \ | Server | | | Server | / \ | Server | | |||
| +--------+ / \ +--------+ | +--------+ / \ +--------+ | |||
| skipping to change at page 9, line 10 ¶ | skipping to change at line 387 ¶ | |||
| Figure 1: Example Network Configuration | Figure 1: Example Network Configuration | |||
| In the example configuration depicted in Figure 1, both Initiator and | In the example configuration depicted in Figure 1, both Initiator and | |||
| Responder are behind one or more NATs, and both private networks are | Responder are behind one or more NATs, and both private networks are | |||
| connected to the public Internet. To be contacted from behind a NAT, | connected to the public Internet. To be contacted from behind a NAT, | |||
| at least the Responder must be registered with a Control Relay Server | at least the Responder must be registered with a Control Relay Server | |||
| reachable on the public Internet. The Responder may have also | reachable on the public Internet. The Responder may have also | |||
| registered to a Data Relay Server that can forward the data plane in | registered to a Data Relay Server that can forward the data plane in | |||
| case NAT traversal fails. While, strictly speaking, the Initiator | case NAT traversal fails. While, strictly speaking, the Initiator | |||
| does not need a Data Relay Server, it may act in the other role with | does not need a Data Relay Server, it may act in the other role with | |||
| other hosts, and connectivity with the Data Relay Server of the | other hosts; connectivity with the Data Relay Server of the Responder | |||
| Responder may fail, so the Initiator may also need to register to a | may fail, so the Initiator may also need to register to a Control | |||
| Cotrol and/or Data Relay Server. It is worth noting that a Control | and/or Data Relay Server. It is worth noting that a Control and Data | |||
| and Data Relay does not forge the source address of a passing packet, | Relay does not forge the source address of a passing packet but | |||
| but always translates the source address and source port of a packet | always translates the source address and source port of a packet to | |||
| to be forwarded (to its own). | be forwarded (to its own). | |||
| We assume, as a starting point, that the Initiator knows both the | We assume, as a starting point, that the Initiator knows both the | |||
| Responder's Host Identity Tag (HIT) and the address(es) of the | Responder's Host Identity Tag (HIT) and the address(es) of the | |||
| Responder's Control Relay Server(s) (how the Initiator learns of the | Responder's Control Relay Server(s) (how the Initiator learns of the | |||
| Responder's Control Relay Server is outside of the scope of this | Responder's Control Relay Server is outside of the scope of this | |||
| document, but may be through DNS or another name service). The first | document, but it may be learned through DNS or another name service). | |||
| steps are for both the Initiator and Responder to register with a | The first steps are for both the Initiator and Responder to register | |||
| Control Relay Server (need not be the same one) and gather a set of | with a Control Relay Server (need not be the same one) and gather a | |||
| address candidates. The hosts use either Control Relay Servers or | set of address candidates. The hosts use either Control Relay | |||
| Data Relay Servers for gathering the candidates. Next, the HIP base | Servers or Data Relay Servers for gathering the candidates. Next, | |||
| exchange is carried out by encapsulating the HIP control packets in | the HIP base exchange is carried out by encapsulating the HIP control | |||
| UDP datagrams and sending them through the Responder's Control Relay | packets in UDP datagrams and sending them through the Responder's | |||
| Server. As part of the base exchange, each HIP host learns of the | Control Relay Server. As part of the base exchange, each HIP host | |||
| peer's candidate addresses through the HIP offer/answer procedure | learns of the peer's candidate addresses through the HIP offer/answer | |||
| embedded in the base exchange. | procedure embedded in the base exchange. | |||
| Once the base exchange is completed, two HIP hosts have established a | Once the base exchange is completed, two HIP hosts have established a | |||
| working communication session (for signaling) via a Control Relay | working communication session (for signaling) via a Control Relay | |||
| Server, but the hosts still have to find a better path, preferably | Server, but the hosts still have to find a better path, preferably | |||
| without a Data Relay Server, for the ESP data flow. For this, | without a Data Relay Server, for the ESP data flow. For this, | |||
| connectivity checks are carried out until a working pair of addresses | connectivity checks are carried out until a working pair of addresses | |||
| is discovered. At the end of the procedure, if successful, the hosts | is discovered. At the end of the procedure, if successful, the hosts | |||
| will have established a UDP-based tunnel that traverses both NATs, | will have established a UDP-based tunnel that traverses both NATs | |||
| with the data flowing directly from NAT to NAT or via a Data Relay | with the data flowing directly from NAT to NAT or via a Data Relay | |||
| Server. At this point, also the HIP signaling can be sent over the | Server. At this point, the HIP signaling can also be sent over the | |||
| same address/port pair, and is demultiplexed (or, in other words, | same address/port pair, and is demultiplexed (or, in other words, | |||
| separated) from IPsec as described in the UDP encapsulation standard | separated) from IPsec as described in the UDP encapsulation standard | |||
| for IPsec [RFC3948]. Finally, the two hosts send NAT keepalives as | for IPsec [RFC3948]. Finally, the two hosts send NAT keepalives as | |||
| needed in order keep their UDP-tunnel state active in the associated | needed in order keep their UDP-tunnel state active in the associated | |||
| NAT boxes. | NAT boxes. | |||
| If either one of the hosts knows that it is not behind a NAT, hosts | If either one of the hosts knows that it is not behind a NAT, hosts | |||
| can negotiate during the base exchange a different mode of NAT | can negotiate during the base exchange a different mode of NAT | |||
| traversal that does not use HIP connectivity checks, but only UDP | traversal that does not use HIP connectivity checks, but only UDP | |||
| encapsulation of HIP and ESP. Also, it is possible for the Initiator | encapsulation of HIP and ESP. Also, it is possible for the Initiator | |||
| skipping to change at page 10, line 20 ¶ | skipping to change at line 445 ¶ | |||
| This section describes the normative behavior of the "Native ICE-HIP" | This section describes the normative behavior of the "Native ICE-HIP" | |||
| protocol extension. Most of the procedures are similar to what is | protocol extension. Most of the procedures are similar to what is | |||
| defined in [RFC5770] but with different, or additional, parameter | defined in [RFC5770] but with different, or additional, parameter | |||
| types and values. In addition, a new type of relaying server, Data | types and values. In addition, a new type of relaying server, Data | |||
| Relay Server, is specified. Also, it should be noted that HIP | Relay Server, is specified. Also, it should be noted that HIP | |||
| version 2 [RFC7401] MUST be used instead of HIPv1 with this NAT | version 2 [RFC7401] MUST be used instead of HIPv1 with this NAT | |||
| traversal mode. | traversal mode. | |||
| 4.1. Relay Registration | 4.1. Relay Registration | |||
| In order for two hosts to communicate over NATted environments, they | In order for two hosts to communicate over NATed environments, they | |||
| need a reliable way to exchange information. To achieve this, "HIP | need a reliable way to exchange information. To achieve this, "HIP | |||
| Relay Server" is defined in [RFC5770]. It supports relaying of HIP | Relay Server" is defined in [RFC5770]. It supports the relaying of | |||
| control plane traffic over UDP in NATted environments, and forwards | HIP control plane traffic over UDP in NATed environments and forwards | |||
| HIP control packets between the Initiator and the Responder. In this | HIP control packets between the Initiator and the Responder. In this | |||
| document, the HIP Relay Server is denoted as "Control Relay Server" | document, the HIP Relay Server is denoted as "Control Relay Server" | |||
| for better alignment with the rest of the terminology. The | for better alignment with the rest of the terminology. The | |||
| registration to the Control Relay Server can be achieved using | registration to the Control Relay Server can be achieved using the | |||
| RELAY_UDP_HIP parameter as explained later in this section. | RELAY_UDP_HIP parameter as explained later in this section. | |||
| To guarantee also data plane delivery over varying types of NAT | To also guarantee data plane delivery over varying types of NAT | |||
| devices, a host MAY also register for UDP encapsulated ESP relaying | devices, a host MAY also register for UDP-encapsulated ESP relaying | |||
| using Registration Type RELAY_UDP_ESP (value [TBD by IANA: 3]). This | using Registration Type RELAY_UDP_ESP (value 3). This service may be | |||
| service may be coupled with the Control Relay Server or offered | coupled with the Control Relay Server or offered separately on | |||
| separately on another server. If the server supports relaying of UDP | another server. If the server supports relaying of UDP-encapsulated | |||
| encapsulated ESP, the host is allowed to register for a data relaying | ESP, the host is allowed to register for a data-relaying service | |||
| service using the registration extensions in Section 3.3 of | using the registration extensions in Section 3.3 of [RFC8003]. If | |||
| [RFC8003]). If the server has sufficient relaying resources (free | the server has sufficient relaying resources (free port numbers, | |||
| port numbers, bandwidth, etc.) available, it opens a UDP port on one | bandwidth, etc.) available, it opens a UDP port on one of its | |||
| of its addresses and signals the address and port to the registering | addresses and signals the address and port to the registering host | |||
| host using the RELAYED_ADDRESS parameter (as defined in Section 5.12 | using the RELAYED_ADDRESS parameter (as defined in Section 5.12 in | |||
| in this document). If the Data Relay Server would accept the data | this document). If the Data Relay Server would accept the data- | |||
| relaying request but does not currently have enough resources to | relaying request but does not currently have enough resources to | |||
| provide data relaying service, it MUST reject the request with | provide data-relaying service, it MUST reject the request with | |||
| Failure Type "Insufficient resources" [RFC8003]. | Failure Type "Insufficient resources" [RFC8003]. | |||
| The registration process follows the generic registration extensions | The registration process follows the generic registration extensions | |||
| defined in [RFC8003]. The HIP control plane relaying registration | defined in [RFC8003]. The HIP control plane relaying registration | |||
| follows [RFC5770], but the data plane registration is different. It | follows [RFC5770], but the data plane registration is different. It | |||
| is worth noting that if the HIP control and data plane relay services | is worth noting that if the HIP control and data plane relay services | |||
| reside on different hosts, the client has to register separately to | reside on different hosts, the client has to register separately to | |||
| each of them. In the example shown in Figure 2, the two services are | each of them. In the example shown in Figure 2, the two services are | |||
| coupled on a single host. The text uses "Relay Client" and "Relay | coupled on a single host. The text uses "Relay Client" and "Relay | |||
| Server" as a shorthand when the procedures apply both to control and | Server" as a shorthand when the procedures apply both to control and | |||
| skipping to change at page 11, line 33 ¶ | skipping to change at line 506 ¶ | |||
| Figure 2: Example Registration with a HIP Relay | Figure 2: Example Registration with a HIP Relay | |||
| In step 1, the Relay Client (Initiator) starts the registration | In step 1, the Relay Client (Initiator) starts the registration | |||
| procedure by sending an I1 packet over UDP to the Relay Server. It | procedure by sending an I1 packet over UDP to the Relay Server. It | |||
| is RECOMMENDED that the Relay Client select a random source port | is RECOMMENDED that the Relay Client select a random source port | |||
| number from the ephemeral port range 49152-65535 for initiating a | number from the ephemeral port range 49152-65535 for initiating a | |||
| base exchange. Alternatively, a host MAY also use a single fixed | base exchange. Alternatively, a host MAY also use a single fixed | |||
| port for initiating all outgoing connections. However, the allocated | port for initiating all outgoing connections. However, the allocated | |||
| port MUST be maintained until all of the corresponding HIP | port MUST be maintained until all of the corresponding HIP | |||
| Associations are closed. It is RECOMMENDED that the Relay Server | associations are closed. It is RECOMMENDED that the Relay Server | |||
| listen to incoming connections at UDP port 10500. If some other port | listen to incoming connections at UDP port 10500. If some other port | |||
| number is used, it needs to be known by potential Relay Clients. | number is used, it needs to be known by potential Relay Clients. | |||
| In step 2, the Relay Server (Responder) lists the services that it | In step 2, the Relay Server (Responder) lists the services that it | |||
| supports in the R1 packet. The support for HIP control plane over | supports in the R1 packet. The support for HIP control plane over | |||
| UDP relaying is denoted by the Registration Type value RELAY_UDP_HIP | UDP relaying is denoted by the Registration Type value RELAY_UDP_HIP | |||
| (see Section 5.9). If the server supports also relaying of ESP | (see Section 5.9). If the server also supports the relaying of ESP | |||
| traffic over UDP, it includes also Registration type value | traffic over UDP, it also includes the Registration Type value | |||
| RELAY_UDP_ESP. | RELAY_UDP_ESP. | |||
| In step 3, the Relay Client selects the services for which it | In step 3, the Relay Client selects the services for which it | |||
| registers and lists them in the REG_REQ parameter. The Relay Client | registers and lists them in the REG_REQ parameter. The Relay Client | |||
| registers for the Control Relay service by listing the RELAY_UDP_HIP | registers for the Control Relay service by listing the RELAY_UDP_HIP | |||
| value in the request parameter. If the Relay Client requires also | value in the request parameter. If the Relay Client also requires | |||
| ESP relaying over UDP, it lists also RELAY_UDP_ESP. | ESP relaying over UDP, it lists also RELAY_UDP_ESP. | |||
| In step 4, the Relay Server concludes the registration procedure with | In step 4, the Relay Server concludes the registration procedure with | |||
| an R2 packet and acknowledges the registered services in the REG_RES | an R2 packet and acknowledges the registered services in the REG_RES | |||
| parameter. The Relay Server denotes unsuccessful registrations (if | parameter. The Relay Server denotes unsuccessful registrations (if | |||
| any) in the REG_FAILED parameter of R2. The Relay Server also | any) in the REG_FAILED parameter of R2. The Relay Server also | |||
| includes a REG_FROM parameter that contains the transport address of | includes a REG_FROM parameter that contains the transport address of | |||
| the Relay Client as observed by the Relay Server (Server Reflexive | the Relay Client as observed by the Relay Server (server-reflexive | |||
| candidate). If the Relay Client registered to ESP relaying service, | candidate). If the Relay Client registered to ESP-relaying service, | |||
| the Relay Server includes RELAYED_ADDRESS parameter that describes | the Relay Server includes a RELAYED_ADDRESS parameter that describes | |||
| the UDP port allocated to the Relay Client for ESP relaying. It is | the UDP port allocated to the Relay Client for ESP relaying. It is | |||
| worth noting that the Data Relay Client must first activate this UDP | worth noting that the Data Relay Client must first activate this UDP | |||
| port by sending an UPDATE message to the Data Relay Server that | port by sending an UPDATE message to the Data Relay Server that | |||
| includes a PEER_PERMISSION parameter as described in Section 4.12.1 | includes a PEER_PERMISSION parameter as described in Section 4.12.1 | |||
| both after base exchange and handover procedures. Also, the Data | both after base exchange and handover procedures. Also, the Data | |||
| Relay Server should follow the port allocation recommendations in | Relay Server should follow the port allocation recommendations in | |||
| Section 6.5. | Section 7.5. | |||
| After the registration, the Relay Client sends periodically NAT | After the registration, the Relay Client periodically sends NAT | |||
| keepalives to the Relay Server in order to keep the NAT bindings | keepalives to the Relay Server in order to keep the NAT bindings | |||
| between the Relay Client and the relay alive. The keepalive | between the Relay Client and the relay alive. The keepalive | |||
| extensions are described in Section 4.10. | extensions are described in Section 4.10. | |||
| The Data Relay Client MUST maintain an active HIP association with | The Data Relay Client MUST maintain an active HIP association with | |||
| the Data Relay Server as long as it requires the data relaying | the Data Relay Server as long as it requires the data-relaying | |||
| service. When the HIP association is closed (or times out), or the | service. When the HIP association is closed (or times out), or the | |||
| registration lifetime passes without the Data Relay Client refreshing | registration lifetime passes without the Data Relay Client refreshing | |||
| the registration, the Data Relay Server MUST stop relaying packets | the registration, the Data Relay Server MUST stop relaying packets | |||
| for that host and close the corresponding UDP port (unless other Data | for that host and close the corresponding UDP port (unless other Data | |||
| Relay Clients are still using it). | Relay Clients are still using it). | |||
| The Data Relay Server SHOULD offer a different relayed address and | The Data Relay Server SHOULD offer a different relayed address and | |||
| port for each Data Relay Client because not doing so can cause | port for each Data Relay Client because not doing so can cause | |||
| problems with stateful firewalls (see Section 6.5). | problems with stateful firewalls (see Section 7.5). | |||
| When a Control Relay Client sends an UPDATE (e.g., due to host | When a Control Relay Client sends an UPDATE (e.g., due to host | |||
| movement or to renew service registration), the Control Relay Server | movement or to renew service registration), the Control Relay Server | |||
| MUST follow the general guidelines defined in [RFC8003], with the | MUST follow the general guidelines defined in [RFC8003], with the | |||
| difference that all UPDATE messages are delivered on top of UDP. In | difference that all UPDATE messages are delivered on top of UDP. In | |||
| addition to this, the Control Relay Server MUST include the REG_FROM | addition to this, the Control Relay Server MUST include the REG_FROM | |||
| parameter in all UPDATE responses sent to the Control Relay Client. | parameter in all UPDATE responses sent to the Control Relay Client. | |||
| This applies to both renewals of service registration and to host | This applies to both renewals of service registration and to host | |||
| movement. It is especially important for the case of host movement, | movement. It is especially important for the case of host movement, | |||
| as this is the mechanism that allows the Control Relay Client to | as this is the mechanism that allows the Control Relay Client to | |||
| learn its new server reflexive address candidate. | learn its new server-reflexive address candidate. | |||
| A Data Relay Client can request multiple relayed candidates from the | A Data Relay Client can request multiple relayed candidates from the | |||
| Data Relay Server (e.g., for the reasons described in | Data Relay Server (e.g., for the reasons described in | |||
| Section 4.12.3). After the base exchange with registration, the Data | Section 4.12.3). After the base exchange with registration, the Data | |||
| Relay Client can request additional relayed candidates similarly as | Relay Client can request additional relayed candidates similarly as | |||
| during the base exchange. The Data Relay Client sends an UPDATE | during the base exchange. The Data Relay Client sends an UPDATE | |||
| message REG_REQ parameter requesting for the RELAY_UDP_ESP service. | message REG_REQ parameter requesting for the RELAY_UDP_ESP service. | |||
| The UPDATE message MUST also include a SEQ and a ECHO_REQUEST_SIGNED | The UPDATE message MUST also include a SEQ and an ECHO_REQUEST_SIGNED | |||
| parameter. The Data Relay Server MUST respond with an UPDATE message | parameter. The Data Relay Server MUST respond with an UPDATE message | |||
| that includes the corresponding response parameters: REG_RES, ACK and | that includes the corresponding response parameters: REG_RES, ACK and | |||
| ECHO_REQUEST_SIGNED . In case the Data Relay Server allocated a new | ECHO_REQUEST_SIGNED. In case the Data Relay Server allocated a new | |||
| relayed UDP port for the Data Relay Client, the REG_RES parameter | relayed UDP port for the Data Relay Client, the REG_RES parameter | |||
| MUST list RELAY_UDP_ESP as a service and the UPDATE message MUST also | MUST list RELAY_UDP_ESP as a service and the UPDATE message MUST also | |||
| include a RELAYED_ADDRESS parameter describing the relayed UDP port. | include a RELAYED_ADDRESS parameter describing the relayed UDP port. | |||
| The Data Relay Server MUST also include the Server Reflexive | The Data Relay Server MUST also include the server-reflexive | |||
| candidate in a REG_FROM parameter. It is worth mentioning that Data | candidate in a REG_FROM parameter. It is worth mentioning that the | |||
| Relay Client MUST activate the UDP port as described in | Data Relay Client MUST activate the UDP port as described in | |||
| Section 4.12.1 before it can be used for any ESP relaying. | Section 4.12.1 before it can be used for any ESP relaying. | |||
| A Data Relay Client may unregister a relayed candidate in two ways. | A Data Relay Client may unregister a relayed candidate in two ways. | |||
| It can wait for its lifetime to expire or it can explicitly request | It can wait for its lifetime to expire or it can explicitly request | |||
| it with zero lifetime using the UPDATE mechanism. The Data Relay | it with zero lifetime using the UPDATE mechanism. The Data Relay | |||
| Client can send an REG_REQ parameter with zero lifetime to the Data | Client can send a REG_REQ parameter with zero lifetime to the Data | |||
| Relay Server in order to expire all relayed candidates. To expire a | Relay Server in order to expire all relayed candidates. To expire a | |||
| specific relayed candidate, the Data Relay Client MUST also include | specific relayed candidate, the Data Relay Client MUST also include a | |||
| RELAYED_ADDRESS parameter as sent by the server in the UPDATE | RELAYED_ADDRESS parameter as sent by the server in the UPDATE | |||
| message. Upon closing the HIP association (CLOSE-CLOSE-ACK procedure | message. Upon closing the HIP association (CLOSE-CLOSE-ACK procedure | |||
| initiated by either party), the Data Relay Server MUST also expire | initiated by either party), the Data Relay Server MUST also expire | |||
| all relayed candidates. | all relayed candidates. | |||
| Please also refer to Section 6.8 for protection against cross- | Please also refer to Section 7.8 for protection against cross- | |||
| protocol attacks for both Control Relay Client and Server. | protocol attacks for both Control Relay Client and Server. | |||
| 4.2. Transport Address Candidate Gathering at the Relay Client | 4.2. Transport Address Candidate Gathering at the Relay Client | |||
| An Initiator needs to gather a set of address candidates before | An Initiator needs to gather a set of address candidates before | |||
| contacting a (non-relay) Responder. The candidates are needed for | contacting a (non-relay) Responder. The candidates are needed for | |||
| connectivity checks that allow two hosts to discover a direct, non- | connectivity checks that allow two hosts to discover a direct, non- | |||
| relayed path for communicating with each other. One server reflexive | relayed path for communicating with each other. One server-reflexive | |||
| candidate can be discovered during the registration with the Control | candidate can be discovered during the registration with the Control | |||
| Relay Server from the REG_FROM parameter (and another from Data Relay | Relay Server from the REG_FROM parameter (and another from Data Relay | |||
| Server if one is employed). | Server if one is employed). | |||
| The candidate gathering can be done at any time, but it needs to be | The candidate gathering can be done at any time, but it needs to be | |||
| done before sending an I2 or R2 in the base exchange if ICE-HIP-UDP | done before sending an I2 or R2 in the base exchange if ICE-HIP-UDP | |||
| mode is to be used for the connectivity checks. It is RECOMMENDED | mode is to be used for the connectivity checks. It is RECOMMENDED | |||
| that all three types of candidates (host, server reflexive, and | that all three types of candidates (host, server reflexive, and | |||
| relayed) are gathered to maximize the probability of successful NAT | relayed) are gathered to maximize the probability of successful NAT | |||
| traversal. However, if no Data Relay Server is used, and the host | traversal. However, if no Data Relay Server is used, and the host | |||
| has only a single local IP address to use, the host MAY use the local | has only a single local IP address to use, the host MAY use the local | |||
| address as the only host candidate and the address from the REG_FROM | address as the only host candidate and the address from the REG_FROM | |||
| parameter discovered during the Control Relay Server registration as | parameter discovered during the Control Relay Server registration as | |||
| a server reflexive candidate. In this case, no further candidate | a server-reflexive candidate. In this case, no further candidate | |||
| gathering is needed. | gathering is needed. | |||
| A Data Relay Client MAY register only a single relayed candidate that | A Data Relay Client MAY register only a single relayed candidate that | |||
| it uses with multiple other peers. However, it is RECOMMENDED that a | it uses with multiple other peers. However, it is RECOMMENDED that a | |||
| Data Relay Client registers a new server relayed candidate for each | Data Relay Client registers a new server relayed candidate for each | |||
| of its peer for the reasons described in Section 4.12.3. The | of its peers for the reasons described in Section 4.12.3. The | |||
| procedures for registering multiple relayed candidates are described | procedures for registering multiple relayed candidates are described | |||
| in Section 4.1. | in Section 4.1. | |||
| If a Relay Client has more than one network interface, it can | If a Relay Client has more than one network interface, it can | |||
| discover additional server reflexive candidates by sending UPDATE | discover additional server-reflexive candidates by sending UPDATE | |||
| messages from each of its interfaces to the Relay Server. Each such | messages from each of its interfaces to the Relay Server. Each such | |||
| UPDATE message MUST include the following parameters: registration | UPDATE message MUST include the following parameters: the | |||
| request (REG_REQ) parameter with Registration Type | registration request (REG_REQ) parameter with Registration Type | |||
| CANDIDATE_DISCOVERY (value [TBD by IANA: 4]) and ECHO_REQUEST_SIGNED | CANDIDATE_DISCOVERY (value 4) and the ECHO_REQUEST_SIGNED parameter. | |||
| parameter. When a Control Relay Server receives an UPDATE message | When a Control Relay Server receives an UPDATE message with | |||
| with registration request containing a CANDIDATE_DISCOVERY type, it | registration request containing a CANDIDATE_DISCOVERY type, it MUST | |||
| MUST include a REG_FROM parameter, containing the same information as | include a REG_FROM parameter, containing the same information as if | |||
| if this were a Control Relay Server registration, to the response (in | this were a Control Relay Server registration, to the response (in | |||
| addition to the mandatory ECHO_RESPONSE_SIGNED parameter). This | addition to the mandatory ECHO_RESPONSE_SIGNED parameter). This | |||
| request type SHOULD NOT create any state at the Control Relay Server. | request type SHOULD NOT create any state at the Control Relay Server. | |||
| The rules in section 5.1.1 in [RFC8445] for candidate gathering are | The rules in Section 5.1.1 of [RFC8445] for candidate gathering are | |||
| followed here. A number of host candidates (loopback, anycast and | followed here. A number of host candidates (loopback, anycast and | |||
| others) should be excluded as described in section 5.1.1.1 of the ICE | others) should be excluded as described in the ICE specification | |||
| specification [RFC8445]. Relayed candidates SHOULD be gathered in | (Section 5.1.1.1 of [RFC8445]). Relayed candidates SHOULD be | |||
| order to guarantee successful NAT traversal, and implementations | gathered in order to guarantee successful NAT traversal, and | |||
| SHOULD support this functionality even if it will not be used in | implementations SHOULD support this functionality even if it will not | |||
| deployments in order to enable it by software configuration update if | be used in deployments in order to enable it by software | |||
| needed at some point. Similarly as explained in section 5.1.1.2 of | configuration update if needed at some point. Similarly, as | |||
| the ICE specification [RFC8445], if an IPv6-only host is in a network | explained in the ICE specification (Section 5.1.1.2 of [RFC8445]), if | |||
| that utilizes NAT64 [RFC6146] and DNS64 [RFC6147] technologies, it | an IPv6-only host is in a network that utilizes NAT64 [RFC6146] and | |||
| may also gather IPv4 server- reflexive and/or relayed candidates from | DNS64 [RFC6147] technologies, it may also gather IPv4 server- | |||
| IPv4-only Control or Data Relay Servers. IPv6-only hosts SHOULD also | reflexive and/or relayed candidates from IPv4-only Control or Data | |||
| utilize IPv6 prefix discovery [RFC7050] to discover the IPv6 prefix | Relay Servers. IPv6-only hosts SHOULD also utilize IPv6 prefix | |||
| used by NAT64 (if any) and generate server-reflexive candidates for | discovery [RFC7050] to discover the IPv6 prefix used by NAT64 (if | |||
| each IPv6-only interface, accordingly. The NAT64 server-reflexive | any) and generate server-reflexive candidates for each IPv6-only | |||
| candidates are prioritized like IPv4 server-reflexive candidates. | interface, accordingly. The NAT64 server-reflexive candidates are | |||
| prioritized like IPv4 server-reflexive candidates. | ||||
| HIP based connectivity can be utilized by IPv4 applications using | HIP-based connectivity can be utilized by IPv4 applications using | |||
| Local Scope Identifiers (LSIs) and by IPv6 based applications using | Local Scope Identifiers (LSIs) and by IPv6-based applications using | |||
| HITs. The LSIs and HITs of the local virtual interfaces MUST be | HITs. The LSIs and HITs of the local virtual interfaces MUST be | |||
| excluded in the candidate gathering phase as well to avoid creating | excluded in the candidate gathering phase as well to avoid creating | |||
| unnecessary loopback connectivity tests. | unnecessary loopback connectivity tests. | |||
| Gathering of candidates MAY also be performed by other means than | Gathering of candidates MAY also be performed by other means than | |||
| described in this section. For example, the candidates could be | described in this section. For example, the candidates could be | |||
| gathered as specified in Section 4.2 of [RFC5770] if STUN servers are | gathered as specified in Section 4.2 of [RFC5770] if STUN servers are | |||
| available, or if the host has just a single interface and no STUN or | available, or if the host has just a single interface and no STUN or | |||
| Data Relay Server are available. | Data Relay Server are available. | |||
| Each local address candidate MUST be assigned a priority. The | Each local address candidate MUST be assigned a priority. The | |||
| following recommended formula (as described in [RFC8445]) SHOULD be | following recommended formula (as described in [RFC8445]) SHOULD be | |||
| used: | used: | |||
| priority = (2^24)*(type preference) + (2^8)*(local preference) + | priority = (2^24)*(type preference) + (2^8)*(local preference) + | |||
| (2^0)*(256 - component ID) | (2^0)*(256 - component ID) | |||
| In the formula, the type preference follows the ICE specification (as | In the formula, the type preference follows the ICE specification (as | |||
| defined in section 5.1.2.1 in [RFC8445]): the RECOMMENDED values are | defined in Section 5.1.2.1 of [RFC8445]): the RECOMMENDED values are | |||
| 126 for host candidates, 100 for server reflexive candidates, 110 for | 126 for host candidates, 100 for server-reflexive candidates, 110 for | |||
| peer reflexive candidates, and 0 for relayed candidates. The highest | peer-reflexive candidates, and 0 for relayed candidates. The highest | |||
| value is 126 (the most preferred) and lowest is 0 (last resort). For | value is 126 (the most preferred) and lowest is 0 (last resort). For | |||
| all candidates of the same type, the preference type value MUST be | all candidates of the same type, the preference type value MUST be | |||
| identical, and, correspondingly, the value MUST be different for | identical, and, correspondingly, the value MUST be different for | |||
| different types. For peer reflexive values, the type preference | different types. For peer-reflexive values, the type preference | |||
| value MUST be higher than for server reflexive types. It should be | value MUST be higher than for server-reflexive types. It should be | |||
| noted that peer reflexive values are learned later during | noted that peer-reflexive values are learned later during | |||
| connectivity checks, so a host cannot employ it during candidate | connectivity checks. | |||
| gathering stage yet. | ||||
| Following the ICE specification, the local preference MUST be an | Following the ICE specification, the local preference MUST be an | |||
| integer from 0 (lowest preference) to 65535 (highest preference) | integer from 0 (lowest preference) to 65535 (highest preference) | |||
| inclusive. In the case the host has only a single address candidate, | inclusive. In the case the host has only a single address candidate, | |||
| the value SHOULD be 65535. In the case of multiple candidates, each | the value SHOULD be 65535. In the case of multiple candidates, each | |||
| local preference value MUST be unique. Dual-stack considerations for | local preference value MUST be unique. Dual-stack considerations for | |||
| IPv6 apply also here as defined in [RFC8445] in section 5.1.2.2. | IPv6 also apply here as defined in Section 5.1.2.2 of [RFC8445]. | |||
| Unlike with SDP used in conjunction with ICE, this protocol only | Unlike with SDP used in conjunction with ICE, this protocol only | |||
| creates a single UDP flow between the two communicating hosts, so | creates a single UDP flow between the two communicating hosts, so | |||
| only a single component exists. Hence, the component ID value MUST | only a single component exists. Hence, the component ID value MUST | |||
| always be set to 1. | always be set to 1. | |||
| As defined in section 14.3 in [RFC8445], the retransmission timeout | As defined in Section 14.3 of [RFC8445], the retransmission timeout | |||
| (RTO) for address gathering from a Control/Data Relay Server SHOULD | (RTO) for address gathering from a Control/Data Relay Server SHOULD | |||
| be calculated as follows: | be calculated as follows: | |||
| RTO = MAX (1000ms, Ta * (Num-Of-Cands)) | RTO = MAX (1000 ms, Ta * (Num-Of-Cands)) | |||
| where Ta is the value used for the connectivity check pacing and Num- | where Ta is the value used for the connectivity check pacing and Num- | |||
| Of-Cands is the number of server-reflexive and relay candidates. A | Of-Cands is the number of server-reflexive and relay candidates. A | |||
| smaller value than 1000 ms for the RTO MUST NOT be used. | smaller value than 1000 ms for the RTO MUST NOT be used. | |||
| 4.3. NAT Traversal Mode Negotiation | 4.3. NAT Traversal Mode Negotiation | |||
| This section describes the usage of a non-critical parameter type | This section describes the usage of a non-critical parameter type | |||
| called NAT_TRAVERSAL_MODE with a new mode called ICE-HIP-UDP. The | called NAT_TRAVERSAL_MODE with a new mode called ICE-HIP-UDP. The | |||
| presence of the new mode in the NAT_TRAVERSAL_MODE parameter in a HIP | presence of the new mode in the NAT_TRAVERSAL_MODE parameter in a HIP | |||
| base exchange means that the end-host supports NAT traversal | base exchange means that the end host supports NAT traversal | |||
| extensions described in this document. As the parameter is non- | extensions described in this document. As the parameter is non- | |||
| critical (as defined in Section 5.2.1 of [RFC7401]), it can be | critical (as defined in Section 5.2.1 of [RFC7401]), it can be | |||
| ignored by a end-host, which means that the host is not required to | ignored by an end host, which means that the host is not required to | |||
| support it or may decline to use it. | support it or may decline to use it. | |||
| With registration with a Control/Data Relay Server, it is usually | With registration with a Control/Data Relay Server, it is usually | |||
| sufficient to use the UDP-ENCAPSULATION mode of NAT traversal since | sufficient to use the UDP-ENCAPSULATION mode of NAT traversal since | |||
| the Relay Server is assumed to be in public address space. Thus, the | the Relay Server is assumed to be in public address space. Thus, the | |||
| Relay Server SHOULD propose the UDP-ENCAPSULATION mode as the | Relay Server SHOULD propose the UDP-ENCAPSULATION mode as the | |||
| preferred or only mode. The NAT traversal mode negotiation in a HIP | preferred or only mode. The NAT traversal mode negotiation in a HIP | |||
| base exchange is illustrated in Figure 3. It is worth noting that | base exchange is illustrated in Figure 3. It is worth noting that | |||
| the Relay Server could be located between the hosts, but is omitted | the Relay Server could be located between the hosts, but is omitted | |||
| here for simplicity. | here for simplicity. | |||
| skipping to change at page 16, line 41 ¶ | skipping to change at line 748 ¶ | |||
| | | | | | | |||
| | 3. UDP(I2(.., NAT_TRAVERSAL_MODE(ICE-HIP-UDP), ENC(LOC_SET), ..))| | | 3. UDP(I2(.., NAT_TRAVERSAL_MODE(ICE-HIP-UDP), ENC(LOC_SET), ..))| | |||
| +----------------------------------------------------------------->| | +----------------------------------------------------------------->| | |||
| | | | | | | |||
| | 4. UDP(R2(.., ENC(LOC_SET), ..)) | | | 4. UDP(R2(.., ENC(LOC_SET), ..)) | | |||
| |<-----------------------------------------------------------------+ | |<-----------------------------------------------------------------+ | |||
| | | | | | | |||
| Figure 3: Negotiation of NAT Traversal Mode | Figure 3: Negotiation of NAT Traversal Mode | |||
| In step 1, the Initiator sends an I1 to the Responder. In step 2, | In step 1, the Initiator sends an I1 to the Responder. | |||
| the Responder responds with an R1. As specified in [RFC5770], the | ||||
| NAT_TRAVERSAL_MODE parameter in R1 contains a list of NAT traversal | In step 2, the Responder responds with an R1. As specified in | |||
| modes the Responder supports. The mode specified in this document is | [RFC5770], the NAT_TRAVERSAL_MODE parameter in R1 contains a list of | |||
| ICE-HIP-UDP (value [TBD by IANA: 3]). | NAT traversal modes the Responder supports. The mode specified in | |||
| this document is ICE-HIP-UDP (value 3). | ||||
| In step 3, the Initiator sends an I2 that includes a | In step 3, the Initiator sends an I2 that includes a | |||
| NAT_TRAVERSAL_MODE parameter. It contains the mode selected by the | NAT_TRAVERSAL_MODE parameter. It contains the mode selected by the | |||
| Initiator from the list of modes offered by the Responder. If ICE- | Initiator from the list of modes offered by the Responder. If ICE- | |||
| HIP-UDP mode was selected, the I2 also includes the "Transport | HIP-UDP mode was selected, the I2 also includes the "Transport | |||
| address" locators (as defined in Section 5.7) of the Initiator in a | address" locators (as defined in Section 5.7) of the Initiator in a | |||
| LOCATOR_SET parameter (denoted here with LOC_SET). With ICE-HIP-UDP | LOCATOR_SET parameter (denoted here with LOC_SET). With ICE-HIP-UDP | |||
| mode, the LOCATOR_SET parameter MUST be encapsulated within an | mode, the LOCATOR_SET parameter MUST be encapsulated within an | |||
| ENCRYPTED parameter (denoted here with ENC) according to the | ENCRYPTED parameter (denoted here with ENC) according to the | |||
| procedures in sections 5.2.18 and 6.5 in [RFC7401]. The locators in | procedures in Sections 5.2.18 and 6.5 in [RFC7401]. The locators in | |||
| I2 are the "HIP offer". | I2 are the "HIP offer". | |||
| In step 4, the Responder concludes the base exchange with an R2 | In step 4, the Responder concludes the base exchange with an R2 | |||
| packet. If the Initiator chose ICE-HIP-UDP traversal mode, the | packet. If the Initiator chose ICE-HIP-UDP traversal mode, the | |||
| Responder includes a LOCATOR_SET parameter in the R2 packet. With | Responder includes a LOCATOR_SET parameter in the R2 packet. With | |||
| ICE-HIP-UDP mode, the LOCATOR_SET parameter MUST be encapsulated | ICE-HIP-UDP mode, the LOCATOR_SET parameter MUST be encapsulated | |||
| within an ENCRYPTED parameter according to the procedures in sections | within an ENCRYPTED parameter according to the procedures in Sections | |||
| 5.2.18 and 6.5 in [RFC7401]. The locators in R2, encoded like the | 5.2.18 and 6.5 in [RFC7401]. The locators in R2, encoded like the | |||
| locators in I2, are the "ICE answer". If the NAT traversal mode | locators in I2, are the "ICE answer". If the NAT traversal mode | |||
| selected by the Initiator is not supported by the Responder, the | selected by the Initiator is not supported by the Responder, the | |||
| Responder SHOULD reply with a NOTIFY packet with type | Responder SHOULD reply with a NOTIFY packet with type | |||
| NO_VALID_NAT_TRAVERSAL_MODE_PARAMETER and abort the base exchange. | NO_VALID_NAT_TRAVERSAL_MODE_PARAMETER and abort the base exchange. | |||
| 4.4. Connectivity Check Pacing Negotiation | 4.4. Connectivity Check Pacing Negotiation | |||
| As explained in Legacy ICE-HIP [RFC5770], when a NAT traversal mode | As explained in Legacy ICE-HIP [RFC5770], when a NAT traversal mode | |||
| with connectivity checks is used, new transactions should not be | with connectivity checks is used, new transactions should not be | |||
| skipping to change at page 18, line 15 ¶ | skipping to change at line 819 ¶ | |||
| it and SHOULD send a NOTIFY error packet with type | it and SHOULD send a NOTIFY error packet with type | |||
| NO_VALID_NAT_TRAVERSAL_MODE_PARAMETER to the sender of the R1 or I2. | NO_VALID_NAT_TRAVERSAL_MODE_PARAMETER to the sender of the R1 or I2. | |||
| It is RECOMMENDED that the Initiator send an I1 packet encapsulated | It is RECOMMENDED that the Initiator send an I1 packet encapsulated | |||
| in UDP when it is destined to an IP address of the Responder. | in UDP when it is destined to an IP address of the Responder. | |||
| Respectively, the Responder MUST respond to such an I1 packet with a | Respectively, the Responder MUST respond to such an I1 packet with a | |||
| UDP-encapsulated R1 packet, and also the rest of the communication | UDP-encapsulated R1 packet, and also the rest of the communication | |||
| related to the HIP association MUST also use UDP encapsulation. | related to the HIP association MUST also use UDP encapsulation. | |||
| Figure 4 illustrates a base exchange via a Control Relay Server. We | Figure 4 illustrates a base exchange via a Control Relay Server. We | |||
| assume that the Responder (i.e. a Control Relay Client) has already | assume that the Responder (i.e., a Control Relay Client) has already | |||
| registered to the Control Relay Server. The Initiator may have also | registered to the Control Relay Server. The Initiator may have also | |||
| registered to another (or the same Control Relay Server), but the | registered to another (or the same Control Relay Server), but the | |||
| base exchange will traverse always through the Control Relay Server | base exchange will traverse always through the Control Relay Server | |||
| of the Responder. | of the Responder. | |||
| Initiator Control Relay Server Responder | Initiator Control Relay Server Responder | |||
| | 1. UDP(I1) | | | | 1. UDP(I1) | | | |||
| +--------------------------------->| 2. UDP(I1(RELAY_FROM)) | | +--------------------------------->| 2. UDP(I1(RELAY_FROM)) | | |||
| | +------------------------------->| | | +------------------------------->| | |||
| | | | | | | | | |||
| skipping to change at page 18, line 44 ¶ | skipping to change at line 848 ¶ | |||
| +--------------------------------->| 6. UDP(I2(ENC(LOC_SET), | | +--------------------------------->| 6. UDP(I2(ENC(LOC_SET), | | |||
| | | RELAY_FROM, NAT_TM, TA_P))| | | | RELAY_FROM, NAT_TM, TA_P))| | |||
| | +------------------------------->| | | +------------------------------->| | |||
| | | | | | | | | |||
| | | 7. UDP(R2(ENC(LOC_SET), | | | | 7. UDP(R2(ENC(LOC_SET), | | |||
| | 8. UDP(R2(ENC(LOC_SET), | RELAY_TO)) | | | 8. UDP(R2(ENC(LOC_SET), | RELAY_TO)) | | |||
| | RELAY_TO)) |<-------------------------------+ | | RELAY_TO)) |<-------------------------------+ | |||
| |<---------------------------------+ | | |<---------------------------------+ | | |||
| | | | | | | | | |||
| Figure 4: Base Exchange via a HIP Relay Server | Figure 4: Base Exchange via a HIP Relay Server | |||
| In step 1 of Figure 4, the Initiator sends an I1 packet over UDP via | In step 1 of Figure 4, the Initiator sends an I1 packet over UDP via | |||
| the Control Relay Server to the Responder. In the HIP header, the | the Control Relay Server to the Responder. In the HIP header, the | |||
| source HIT belongs to the Initiator and the destination HIT to the | source HIT belongs to the Initiator and the destination HIT to the | |||
| Responder. The initiator sends the I1 packet from its IP address to | Responder. The Initiator sends the I1 packet from its IP address to | |||
| the IP address of the Control Relay Server over UDP. | the IP address of the Control Relay Server over UDP. | |||
| In step 2, the Control Relay Server receives the I1 packet. If the | In step 2, the Control Relay Server receives the I1 packet. If the | |||
| destination HIT belongs to a successfully registered Control Relay | destination HIT belongs to a successfully registered Control Relay | |||
| Client (i.e., the host marked "Responder" in Figure 4), the Control | Client (i.e., the host marked "Responder" in Figure 4), the Control | |||
| Relay Server processes the packet. Otherwise, the Control Relay | Relay Server processes the packet. Otherwise, the Control Relay | |||
| Server MUST drop the packet silently. The Control Relay Server | Server MUST drop the packet silently. The Control Relay Server | |||
| appends a RELAY_FROM parameter to the I1 packet, which contains the | appends a RELAY_FROM parameter to the I1 packet, which contains the | |||
| transport source address and port of the I1 as observed by the | transport source address and port of the I1 as observed by the | |||
| Control Relay Server. The Control Relay Server protects the I1 | Control Relay Server. The Control Relay Server protects the I1 | |||
| skipping to change at page 19, line 26 ¶ | skipping to change at line 877 ¶ | |||
| the values the Responder used when registering to the Control Relay | the values the Responder used when registering to the Control Relay | |||
| Server, i.e., the reverse of the R2 used in the registration. The | Server, i.e., the reverse of the R2 used in the registration. The | |||
| Control Relay Server MUST recalculate the transport checksum and | Control Relay Server MUST recalculate the transport checksum and | |||
| forward the packet to the Responder. | forward the packet to the Responder. | |||
| In step 3, the Responder receives the I1 packet. The Responder | In step 3, the Responder receives the I1 packet. The Responder | |||
| processes it according to the rules in [RFC7401]. In addition, the | processes it according to the rules in [RFC7401]. In addition, the | |||
| Responder validates the RELAY_HMAC according to Section 5.8 and | Responder validates the RELAY_HMAC according to Section 5.8 and | |||
| silently drops the packet if the validation fails. The Responder | silently drops the packet if the validation fails. The Responder | |||
| replies with an R1 packet to which it includes RELAY_TO and NAT | replies with an R1 packet to which it includes RELAY_TO and NAT | |||
| traversal mode parameters. The responder MUST include ICE-HIP-UDP in | traversal mode parameters. The Responder MUST include ICE-HIP-UDP in | |||
| the NAT traversal modes. The RELAY_TO parameter MUST contain the | the NAT traversal modes. The RELAY_TO parameter MUST contain the | |||
| same information as the RELAY_FROM parameter, i.e., the Initiator's | same information as the RELAY_FROM parameter, i.e., the Initiator's | |||
| transport address, but the type of the parameter is different. The | transport address, but the type of the parameter is different. The | |||
| RELAY_TO parameter is not integrity protected by the signature of the | RELAY_TO parameter is not integrity protected by the signature of the | |||
| R1 to allow pre-created R1 packets at the Responder. | R1 to allow pre-created R1 packets at the Responder. | |||
| In step 4, the Control Relay Server receives the R1 packet. The | In step 4, the Control Relay Server receives the R1 packet. The | |||
| Control Relay Server drops the packet silently if the source HIT | Control Relay Server drops the packet silently if the source HIT | |||
| belongs to a Control Relay Client that has not successfully | belongs to a Control Relay Client that has not successfully | |||
| registered. The Control Relay Server MAY verify the signature of the | registered. The Control Relay Server MAY verify the signature of the | |||
| skipping to change at page 20, line 5 ¶ | skipping to change at line 905 ¶ | |||
| according to [RFC7401]. The Initiator MAY use the address in the | according to [RFC7401]. The Initiator MAY use the address in the | |||
| RELAY_TO parameter as a local peer-reflexive candidate for this HIP | RELAY_TO parameter as a local peer-reflexive candidate for this HIP | |||
| association if it is different from all known local candidates. The | association if it is different from all known local candidates. The | |||
| Initiator replies with an I2 packet that uses the destination | Initiator replies with an I2 packet that uses the destination | |||
| transport address of R1 as the source address and port. The I2 | transport address of R1 as the source address and port. The I2 | |||
| packet contains a LOCATOR_SET parameter inside an ENCRYPTED parameter | packet contains a LOCATOR_SET parameter inside an ENCRYPTED parameter | |||
| that lists all the HIP candidates (HIP offer) of the Initiator. The | that lists all the HIP candidates (HIP offer) of the Initiator. The | |||
| candidates are encoded using the format defined in Section 5.7. The | candidates are encoded using the format defined in Section 5.7. The | |||
| I2 packet MUST also contain a NAT traversal mode parameter that | I2 packet MUST also contain a NAT traversal mode parameter that | |||
| includes ICE-HIP-UDP mode. The ENCRYPTED parameter along with its | includes ICE-HIP-UDP mode. The ENCRYPTED parameter along with its | |||
| key material generation are described in detail in sections 5.2.18 | key material generation is described in detail in Sections 5.2.18 and | |||
| and 6.5 in [RFC7401]. | 6.5 in [RFC7401]. | |||
| In step 6, the Control Relay Server receives the I2 packet. The | In step 6, the Control Relay Server receives the I2 packet. The | |||
| Control Relay Server appends a RELAY_FROM and a RELAY_HMAC to the I2 | Control Relay Server appends a RELAY_FROM and a RELAY_HMAC to the I2 | |||
| packet similarly as explained in step 2, and forwards the packet to | packet similar to that explained in step 2, and forwards the packet | |||
| the Responder. | to the Responder. | |||
| In step 7, the Responder receives the I2 packet and processes it | In step 7, the Responder receives the I2 packet and processes it | |||
| according to [RFC7401]. The Responder validates the RELAY_HMAC | according to [RFC7401]. The Responder validates the RELAY_HMAC | |||
| according to Section 5.8 and silently drops the packet if the | according to Section 5.8 and silently drops the packet if the | |||
| validation fails. It replies with an R2 packet and includes a | validation fails. It replies with an R2 packet and includes a | |||
| RELAY_TO parameter as explained in step 3. The R2 packet includes a | RELAY_TO parameter as explained in step 3. The R2 packet includes a | |||
| LOCATOR_SET parameter inside an ENCRYPTED parameter that lists all | LOCATOR_SET parameter inside an ENCRYPTED parameter that lists all | |||
| the HIP candidates (ICE answer) of the Responder. The RELAY_TO | the HIP candidates (ICE answer) of the Responder. The RELAY_TO | |||
| parameter is protected by the HMAC. The ENCRYPTED parameter along | parameter is protected by the Hashed Message Authentication Code | |||
| with its key material generation are described in detail in sections | (HMAC). The ENCRYPTED parameter along with its key material | |||
| 5.2.18 and 6.5 in [RFC7401]. | generation is described in detail in Sections 5.2.18 and 6.5 in | |||
| [RFC7401]. | ||||
| In step 8, the Control Relay Server processes the R2 as described in | In step 8, the Control Relay Server processes the R2 as described in | |||
| step 4. The Control Relay Server forwards the packet to the | step 4. The Control Relay Server forwards the packet to the | |||
| Initiator. After the Initiator has received the R2 and processed it | Initiator. After the Initiator has received the R2 and processed it | |||
| successfully, the base exchange is completed. | successfully, the base exchange is completed. | |||
| Hosts MUST include the address of one or more Control Relay Servers | Hosts MUST include the address of one or more Control Relay Servers | |||
| (including the one that is being used for the initial signaling) in | (including the one that is being used for the initial signaling) in | |||
| the LOCATOR_SET parameter in I2 and R2 messages if they intend to use | the LOCATOR_SET parameter in I2 and R2 messages if they intend to use | |||
| such servers for relaying HIP signaling immediately after the base | such servers for relaying HIP signaling immediately after the base | |||
| skipping to change at page 20, line 50 ¶ | skipping to change at line 951 ¶ | |||
| Server throughout the lifetime of the host association that was used | Server throughout the lifetime of the host association that was used | |||
| for forwarding the base exchange if the Responder includes it in the | for forwarding the base exchange if the Responder includes it in the | |||
| locator parameter of the R2 message. | locator parameter of the R2 message. | |||
| 4.6. Connectivity Checks | 4.6. Connectivity Checks | |||
| When the Initiator and Responder complete the base exchange through | When the Initiator and Responder complete the base exchange through | |||
| the Control Relay Server, both of them employ the IP address of the | the Control Relay Server, both of them employ the IP address of the | |||
| Control Relay Server as the destination address for the packets. The | Control Relay Server as the destination address for the packets. The | |||
| address of the Control Relay Server MUST NOT be used as a destination | address of the Control Relay Server MUST NOT be used as a destination | |||
| for data plane traffic unless the server supports also Data Relay | for data plane traffic unless the server also supports Data Relay | |||
| Server functionality, and the Client has successfully registered to | Server functionality, and the Client has successfully registered to | |||
| use it. When NAT traversal mode with ICE-HIP-UDP was successfully | use it. When NAT traversal mode with ICE-HIP-UDP was successfully | |||
| negotiated and selected, the Initiator and Responder MUST start the | negotiated and selected, the Initiator and Responder MUST start the | |||
| connectivity checks in order to attempt to obtain direct end-to-end | connectivity checks in order to attempt to obtain direct end-to-end | |||
| connectivity through NAT devices. It is worth noting that the | connectivity through NAT devices. It is worth noting that the | |||
| connectivity checks MUST be completed even though no ESP_TRANSFORM | connectivity checks MUST be completed even though no ESP_TRANSFORM | |||
| would be negotiated and selected. | would be negotiated and selected. | |||
| The connectivity checks follow the ICE methodology | The connectivity checks follow the ICE methodology [ICE-NONSIP], but | |||
| [I-D.rosenberg-mmusic-ice-nonsip], but UDP encapsulated HIP control | UDP-encapsulated HIP control messages are used instead of ICE | |||
| messages are used instead of ICE messages. As stated in the ICE | messages. As stated in the ICE specification, the basic procedure | |||
| specification, the basic procedure for connectivity checks has three | for connectivity checks has three phases: sorting the candidate pairs | |||
| phases: sorting the candidate pairs according their priority, sending | according to their priority, sending checks in the prioritized order, | |||
| checks in the prioritized order and acknowledging the checks from the | and acknowledging the checks from the peer host. | |||
| peer host. | ||||
| The Initiator MUST take the role of controlling host and the | The Initiator MUST take the role of controlling host, and the | |||
| Responder acts as the controlled host. The roles MUST persist | Responder acts as the controlled host. The roles MUST persist | |||
| throughout the HIP associate lifetime (to be reused in the possibly | throughout the HIP associate lifetime (to be reused even during | |||
| mobility UPDATE procedures). In the case both communicating nodes | mobility UPDATE procedures). In the case in which both communicating | |||
| are initiating the communications to each other using an I1 packet, | nodes are initiating communication to each other using an I1 packet, | |||
| the conflict is resolved as defined in section 6.7 in [RFC7401]: the | the conflict is resolved as defined in Section 6.7 of [RFC7401]; the | |||
| host with the "larger" HIT changes to its Role to Responder. In such | host with the "larger" HIT changes its role to Responder. In such a | |||
| a case, the host changing its role to Responder MUST also switch to | case, the host changing its role to Responder MUST also switch to the | |||
| controlled role. | controlled role. | |||
| The protocol follows standard HIP UPDATE sending and processing rules | The protocol follows standard HIP UPDATE sending and processing rules | |||
| as defined in section 6.11 and 6.12 in [RFC7401], but some new | as defined in Sections 6.11 and 6.12 in [RFC7401], but some new | |||
| parameters are introduced (CANDIDATE_PRIORITY, MAPPED_ADDRESS and | parameters are introduced (CANDIDATE_PRIORITY, MAPPED_ADDRESS, | |||
| NOMINATE). | NOMINATE, PEER_PERMISSION, and RELAYED_ADDRESS). | |||
| 4.6.1. Connectivity Check Procedure | 4.6.1. Connectivity Check Procedure | |||
| Figure 5 illustrates connectivity checks in a simplified scenario, | Figure 5 illustrates connectivity checks in a simplified scenario | |||
| where the Initiator and Responder have only a single candidate pair | where the Initiator and Responder have only a single candidate pair | |||
| to check. Typically, NATs drop messages until both sides have sent | to check. Typically, NATs drop messages until both sides have sent | |||
| messages using the same port pair. In this scenario, the Responder | messages using the same port pair. In this scenario, the Responder | |||
| sends a connectivity check first but the NAT of the Initiator drops | sends a connectivity check first but the NAT of the Initiator drops | |||
| it. However, the connectivity check from the Initiator reaches the | it. However, the connectivity check from the Initiator reaches the | |||
| Responder because it uses the same port pair as the first message. | Responder because it uses the same port pair as the first message. | |||
| It is worth noting that the message flow in this section is | It is worth noting that the message flow in this section is | |||
| idealistic, and, in practice, more messages would be dropped, | idealistic, and, in practice, more messages would be dropped, | |||
| especially in the beginning. For instance, connectivity tests always | especially in the beginning. For instance, connectivity tests always | |||
| start with the candidates with the highest priority, which would be | start with the candidates with the highest priority, which would be | |||
| skipping to change at page 22, line 43 ¶ | skipping to change at line 1036 ¶ | |||
| +-------------+------------------------------------+--------------->+ | +-------------+------------------------------------+--------------->+ | |||
| | | | | | | | | | | |||
| | 10. ESP data traffic over UDP | | | | 10. ESP data traffic over UDP | | | |||
| +<------------+------------------------------------+--------------->+ | +<------------+------------------------------------+--------------->+ | |||
| | | | | | | | | | | |||
| Figure 5: Connectivity Checks | Figure 5: Connectivity Checks | |||
| In step 1, the Responder sends a connectivity check to the Initiator | In step 1, the Responder sends a connectivity check to the Initiator | |||
| that the NAT of the Initiator drops. The message includes a number | that the NAT of the Initiator drops. The message includes a number | |||
| of parameters. As specified in [RFC7401]), the SEQ parameter | of parameters. As specified in [RFC7401], the SEQ parameter includes | |||
| includes a running sequence identifier for the connectivity check. | a running sequence identifier for the connectivity check. The | |||
| The candidate priority (denoted "CAND_PRIO" in the figure) describes | candidate priority (denoted CAND_PRIO in the figure) describes the | |||
| the priority of the address candidate being tested. The | priority of the address candidate being tested. The | |||
| ECHO_REQUEST_SIGNED (denoted ECHO_REQ_SIGN in the figure) includes a | ECHO_REQUEST_SIGNED (denoted ECHO_REQ_SIGN in the figure) includes a | |||
| nonce that the recipient must sign and echo back as it is. | nonce that the recipient must sign and echo back as it is. | |||
| In step 2, the Initiator sends a connectivity check, using the same | In step 2, the Initiator sends a connectivity check, using the same | |||
| address pair candidate as in the previous step, and the message | address pair candidate as in the previous step, and the message | |||
| traverses successfully the NAT boxes. The message includes the same | successfully traverses the NAT boxes. The message includes the same | |||
| parameters as in the previous step. It should be noted that the | parameters as in the previous step. It should be noted that the | |||
| sequence identifier is locally assigned by the Initiator, so it can | sequence identifier is locally assigned by the Initiator, so it can | |||
| be different than in the previous step. | be different than in the previous step. | |||
| In step 3, the Responder has successfully received the previous | In step 3, the Responder has successfully received the previous | |||
| connectivity check from the Initiator and starts to build a response | connectivity check from the Initiator and starts to build a response | |||
| message. Since the message from the Initiator included a SEQ, the | message. Since the message from the Initiator included a SEQ, the | |||
| Responder must acknowledge it using an ACK parameter. Also, the | Responder must acknowledge it using an ACK parameter. Also, the | |||
| nonce contained in the echo request must be echoed back in an | nonce contained in the echo request must be echoed back in an | |||
| ECHO_RESPONSE_SIGNED (denoted ECHO_RESP_SIGN) parameter. The | ECHO_RESPONSE_SIGNED (denoted ECHO_RESP_SIGN) parameter. The | |||
| Responder includes also a MAPPED_ADDRESS parameter (denoted | Responder also includes a MAPPED_ADDRESS parameter (denoted | |||
| MAPPED_ADDR in the figure) that contains the transport address of the | MAPPED_ADDR in the figure) that contains the transport address of the | |||
| Initiator as observed by the Responder (i.e. peer reflexive | Initiator as observed by the Responder (i.e., peer-reflexive | |||
| candidate). This message is successfully delivered to the Initiator, | candidate). This message is successfully delivered to the Initiator; | |||
| and upon reception the Initiator marks the candidate pair as valid. | upon reception, the Initiator marks the candidate pair as valid. | |||
| In step 4, the Responder retransmits the connectivity check sent in | In step 4, the Responder retransmits the connectivity check sent in | |||
| the first step, since it was not acknowledged yet. | the first step, since it was not acknowledged yet. | |||
| In step 5, the Initiator responds to the previous connectivity check | In step 5, the Initiator responds to the previous connectivity check | |||
| message from the Responder. The Initiator acknowledges the SEQ | message from the Responder. The Initiator acknowledges the SEQ | |||
| parameter from the previous message using ACK parameter and the | parameter from the previous message using an ACK parameter and the | |||
| ECHO_REQUEST_SIGNED parameter with ECHO_RESPONSE_SIGNED. In | ECHO_REQUEST_SIGNED parameter with ECHO_RESPONSE_SIGNED. In | |||
| addition, it includes MAPPED_ADDR parameter that includes the peer | addition, it includes the MAPPED_ADDR parameter that includes the | |||
| reflexive candidate. This response message is successfully delivered | peer-reflexive candidate. This response message is successfully | |||
| to the Responder, and upon reception the Initiator marks the | delivered to the Responder; upon reception, the Initiator marks the | |||
| candidate pair as valid. | candidate pair as valid. | |||
| In step 6, despite the two hosts now having valid address candidates, | In step 6, despite the two hosts now having valid address candidates, | |||
| the hosts still test the remaining address candidates in a similar | the hosts still test the remaining address candidates in a similar | |||
| way as in the previous steps. It should be noted that each | way as in the previous steps. It should be noted that each | |||
| connectivity check has a unique sequence number in the SEQ parameter. | connectivity check has a unique sequence number in the SEQ parameter. | |||
| In step 7, the Initiator has completed testing all address candidates | In step 7, the Initiator has completed testing all address candidates | |||
| and nominates one address candidate to be used. It sends an UPDATE | and nominates one address candidate to be used. It sends an UPDATE | |||
| message using the selected address candidates that includes a number | message using the selected address candidates that includes a number | |||
| of parameters: SEQ, ECHO_REQUEST_SIGNED, CANDIDATE_PRIORITY and the | of parameters: SEQ, ECHO_REQUEST_SIGNED, CANDIDATE_PRIORITY, and the | |||
| NOMINATE parameter. | NOMINATE parameter. | |||
| In step 8, the Responder receives the message with NOMINATE parameter | In step 8, the Responder receives the message with the NOMINATE | |||
| from the Initiator. It sends a response that includes the NOMINATE | parameter from the Initiator. It sends a response that includes the | |||
| parameter in addition to a number of other parameters. The ACK and | NOMINATE parameter in addition to a number of other parameters. The | |||
| ECHO_RESPONSE_SIGNED parameters acknowledge the SEQ and | ACK and ECHO_RESPONSE_SIGNED parameters acknowledge the SEQ and | |||
| ECHO_REQUEST_SIGNED parameters from previous message from the | ECHO_REQUEST_SIGNED parameters from the previous message from the | |||
| Initiator. The Responder includes SEQ and ECHO_REQUEST_SIGNED | Initiator. The Responder includes SEQ and ECHO_REQUEST_SIGNED | |||
| parameters in order to receive an acknowledgment from the Responder. | parameters in order to receive an acknowledgment from the Responder. | |||
| In step 9, the Initiator completes the candidate nomination process | In step 9, the Initiator completes the candidate nomination process | |||
| by confirming the message reception to the Responder. In the | by confirming the message reception to the Responder. In the | |||
| confirmation message, the ACK and ECHO_RESPONSE_SIGNED parameters | confirmation message, the ACK and ECHO_RESPONSE_SIGNED parameters | |||
| correspond to the SEQ and ECHO_REQUEST_SIGNED parameters in the | correspond to the SEQ and ECHO_REQUEST_SIGNED parameters in the | |||
| message sent by the Responder in the previous step. | message sent by the Responder in the previous step. | |||
| In step 10, the Initiator and Responder can start sending application | In step 10, the Initiator and Responder can start sending application | |||
| payload over the successfully nominated address candidates. | payload over the successfully nominated address candidates. | |||
| It is worth noting that if either host has registered a relayed | It is worth noting that if either host has registered a relayed | |||
| address candidate from a Data Relay Server, the host MUST activate | address candidate from a Data Relay Server, the host MUST activate | |||
| the address before connectivity checks by sending an UPDATE message | the address before connectivity checks by sending an UPDATE message | |||
| containing PEER_PERMISSION parameter as described in Section 4.12.1. | containing the PEER_PERMISSION parameter as described in | |||
| Otherwise, the Data Relay Server drops ESP packets using the relayed | Section 4.12.1. Otherwise, the Data Relay Server drops ESP packets | |||
| address. | using the relayed address. | |||
| It should be noted that in the case both Initiator and Responder both | It should be noted that in the case in which both the Initiator and | |||
| advertising their own relayed address candidates, it is possible that | Responder are advertising their own relayed address candidates, it is | |||
| the two hosts choose the two relayed addresses as a result of the ICE | possible that the two hosts choose the two relayed addresses as a | |||
| nomination algorithm. While this is possible (and even could be | result of the ICE nomination algorithm. While this is possible (and | |||
| desirable for privacy reasons), it can be unlikely due to low | even could be desirable for privacy reasons), it can be unlikely due | |||
| priority assigned for the relayed address candidates. In such a | to low priority assigned for the relayed address candidates. In such | |||
| event, the nominated address pair is always symmetric; the nomination | an event, the nominated address pair is always symmetric; the | |||
| algorithm prevents asymmetric address pairs (i.e. each side choosing | nomination algorithm prevents asymmetric address pairs (i.e., each | |||
| different pair), such as a Data Relay Client using its own Data Relay | side choosing different pair) such as a Data Relay Client using its | |||
| Server to send data directly to its peer while receiving data from | own Data Relay Server to send data directly to its peer while | |||
| the Data Relay Server of its peer. | receiving data from the Data Relay Server of its peer. | |||
| 4.6.2. Rules for Connectivity Checks | 4.6.2. Rules for Connectivity Checks | |||
| The HITs of the two communicating hosts MUST be used as credentials | The HITs of the two communicating hosts MUST be used as credentials | |||
| in this protocol (in contrast to ICE which employs username-password | in this protocol (in contrast to ICE, which employs username-password | |||
| fragments). A HIT pair uniquely identifies the corresponding HIT | fragments). A HIT pair uniquely identifies the corresponding HIT | |||
| association, and a SEQ number in an UPDATE message identifies a | association, and a SEQ number in an UPDATE message identifies a | |||
| particular connectivity check. | particular connectivity check. | |||
| All of the connectivity check messages MUST be protected with | All of the connectivity check messages MUST be protected with | |||
| HIP_HMAC and signatures (even though the illustrations in this | HIP_HMAC and signatures (even though the illustrations in this | |||
| specification omit them for simplicity) according to [RFC7401]. Each | specification omit them for simplicity) according to [RFC7401]. Each | |||
| connectivity check sent by a host MUST include a SEQ parameter and | connectivity check sent by a host MUST include a SEQ parameter and | |||
| ECHO_REQUEST_SIGNED parameter, and correspondingly the peer MUST | ECHO_REQUEST_SIGNED parameter; correspondingly, the peer MUST respond | |||
| respond to these using ACK and ECHO_RESPONSE_SIGNED according to the | to these using ACK and ECHO_RESPONSE_SIGNED according to the rules | |||
| rules specified in [RFC7401]. | specified in [RFC7401]. | |||
| The host sending a connectivity check MUST validate that the response | The host sending a connectivity check MUST validate that the response | |||
| uses the same pair of UDP ports, and drop the packet if this is not | uses the same pair of UDP ports, and drop the packet if this is not | |||
| the case. | the case. | |||
| A host may receive a connectivity check before it has received the | A host may receive a connectivity check before it has received the | |||
| candidates from its peer. In such a case, the host MUST immediately | candidates from its peer. In such a case, the host MUST immediately | |||
| queue a response by placing it in the triggered-check queue, and then | queue a response by placing it in the triggered-check queue and then | |||
| continue waiting for the candidates. A host MUST NOT select a | continue waiting for the candidates. A host MUST NOT select a | |||
| candidate pair until it has verified the pair using a connectivity | candidate pair until it has verified the pair using a connectivity | |||
| check as defined in Section 4.6.1. | check as defined in Section 4.6.1. | |||
| [RFC7401] section 5.3.5 states that UPDATE packets have to include | Section 5.3.5 of [RFC7401] states that UPDATE packets have to include | |||
| either a SEQ or ACK parameter (but can include both). In the | either a SEQ or ACK parameter (but can include both). In the | |||
| connectivity check procedure specified in Section 4.6.1, each SEQ | connectivity check procedure specified in Section 4.6.1, each SEQ | |||
| parameter should be acknowledged separately. In the context of NATs, | parameter should be acknowledged separately. In the context of NATs, | |||
| this means that some of the SEQ parameters sent in connectivity | this means that some of the SEQ parameters sent in connectivity | |||
| checks will be lost or arrive out of order. From the viewpoint of | checks will be lost or arrive out of order. From the viewpoint of | |||
| the recipient, this is not a problem since the recipient will just | the recipient, this is not a problem since the recipient will just | |||
| "blindly" acknowledge the SEQ. However, the sender needs to be | "blindly" acknowledge the SEQ. However, the sender needs to be | |||
| prepared for lost sequence identifiers and ACKs parameters that | prepared for lost sequence identifiers and ACK parameters that arrive | |||
| arrive out of order. | out of order. | |||
| As specified in [RFC7401], an ACK parameter may acknowledge multiple | As specified in [RFC7401], an ACK parameter may acknowledge multiple | |||
| sequence identifiers. While the examples in the previous sections do | sequence identifiers. While the examples in the previous sections do | |||
| not illustrate such functionality, it is also permitted when | not illustrate such functionality, it is also permitted when | |||
| employing ICE-HIP-UDP mode. | employing ICE-HIP-UDP mode. | |||
| In ICE-HIP-UDP mode, a retransmission of a connectivity check SHOULD | In ICE-HIP-UDP mode, a retransmission of a connectivity check SHOULD | |||
| be sent with the same sequence identifier in the SEQ parameter. Some | be sent with the same sequence identifier in the SEQ parameter. Some | |||
| tested address candidates will never produce a working address pair, | tested address candidates will never produce a working address pair | |||
| and thus may cause retransmissions. Upon successful nomination of an | and may thus cause retransmissions. Upon successful nomination of an | |||
| address pair, a host SHOULD immediately stop sending such | address pair, a host SHOULD immediately stop sending such | |||
| retransmissions. | retransmissions. | |||
| Full ICE procedures for prioritizing candidates, eliminating | Full ICE procedures for prioritizing candidates, eliminating | |||
| redundant candidates, forming check lists (including pruning) and | redundant candidates, forming checklists (including pruning), and | |||
| triggered check-queues MUST be followed as specified in section 6.1 | triggered-check queues MUST be followed as specified in Section 6.1 | |||
| [RFC8445], with the exception of that the foundation, frozen | of [RFC8445], with the exception being that the foundation, frozen | |||
| candidates and default candidates are not used. From viewpoint of | candidates, and default candidates are not used. From the viewpoint | |||
| the ICE specification [RFC8445], the protocol specified in this | of the ICE specification [RFC8445], the protocol specified in this | |||
| document operates using Component ID of 1 on all candidates, and the | document operates using a component ID of 1 on all candidates, and | |||
| foundation of all candidates is unique. This specification defines | the foundation of all candidates is unique. This specification | |||
| only "full ICE" mode, and the "lite ICE" is not supported. The | defines only "full ICE" mode, and the "lite ICE" is not supported. | |||
| reasoning behind the missing features is described in Appendix B. | The reasoning behind the missing features is described in Appendix B. | |||
| The connectivity check messages MUST be paced by the Ta value | The connectivity check messages MUST be paced by the Ta value | |||
| negotiated during the base exchange as described in Section 4.4. If | negotiated during the base exchange as described in Section 4.4. If | |||
| neither one of the hosts announced a minimum pacing value, a value of | neither one of the hosts announced a minimum pacing value, a value of | |||
| 50 ms MUST be used. | 50 ms MUST be used. | |||
| Both hosts MUST form a priority ordered checklist and begin to check | Both hosts MUST form a priority ordered checklist and begin to check | |||
| transactions every Ta milliseconds as long as the checks are running | transactions every Ta milliseconds as long as the checks are running | |||
| and there are candidate pairs whose tests have not started. The | and there are candidate pairs whose tests have not started. The | |||
| retransmission timeout (RTO) for the connectivity check UPDATE | retransmission timeout (RTO) for the connectivity check UPDATE | |||
| packets SHOULD be calculated as follows: | packets SHOULD be calculated as follows: | |||
| RTO = MAX (1000ms, Ta * (Num-Waiting + Num-In-Progress)) | RTO = MAX (1000 ms, Ta * (Num-Waiting + Num-In-Progress)) | |||
| In the RTO formula, Ta is the value used for the connectivity check | In the RTO formula, Ta is the value used for the connectivity check | |||
| pacing, Num-Waiting is the number of pairs in the checklist in the | pacing, Num-Waiting is the number of pairs in the checklist in the | |||
| "Waiting" state, and Num-In-Progress is the number of pairs in the | "Waiting" state, and Num-In-Progress is the number of pairs in the | |||
| "In-Progress" state. This is identical to the formula in [RFC8445] | "In-Progress" state. This is identical to the formula in [RFC8445] | |||
| when there is only one checklist. A smaller value than 1000 ms for | when there is only one checklist. A smaller value than 1000 ms for | |||
| the RTO MUST NOT be used. | the RTO MUST NOT be used. | |||
| Each connectivity check request packet MUST contain a | Each connectivity check request packet MUST contain a | |||
| CANDIDATE_PRIORITY parameter (see Section 5.14) with the priority | CANDIDATE_PRIORITY parameter (see Section 5.14) with the priority | |||
| value that would be assigned to a peer reflexive candidate if one was | value that would be assigned to a peer-reflexive candidate if one was | |||
| learned from the corresponding check. An UPDATE packet that | learned from the corresponding check. An UPDATE packet that | |||
| acknowledges a connectivity check request MUST be sent from the same | acknowledges a connectivity check request MUST be sent from the same | |||
| address that received the check and delivered to the same address | address that received the check and delivered to the same address | |||
| where the check was received from. Each acknowledgment UPDATE packet | where the check was received from. Each acknowledgment UPDATE packet | |||
| MUST contain a MAPPED_ADDRESS parameter with the port, protocol, and | MUST contain a MAPPED_ADDRESS parameter with the port, protocol, and | |||
| IP address of the address where the connectivity check request was | IP address of the address where the connectivity check request was | |||
| received from. | received from. | |||
| Following the ICE guidelines [RFC8445], it is RECOMMENDED to restrict | Following the ICE guidelines [RFC8445], it is RECOMMENDED to restrict | |||
| the total number of connectivity checks to 100 for each host | the total number of connectivity checks to 100 for each host | |||
| association. This can be achieved by limiting the connectivity | association. This can be achieved by limiting the connectivity | |||
| checks to the 100 candidate pairs with the highest priority. | checks to the 100 candidate pairs with the highest priority. | |||
| 4.6.3. Rules for Concluding Connectivity Checks | 4.6.3. Rules for Concluding Connectivity Checks | |||
| The controlling agent may find multiple working candidate pairs. To | The controlling agent may find multiple working candidate pairs. To | |||
| conclude the connectivity checks, it SHOULD nominate the pair with | conclude the connectivity checks, it SHOULD nominate the pair with | |||
| the highest priority. The controlling agent MUST nominate a | the highest priority. The controlling agent MUST nominate a | |||
| candidate pair essentially by repeating a connectivity check using an | candidate pair essentially by repeating a connectivity check using an | |||
| UPDATE message that contains a SEQ parameter (with new sequence | UPDATE message that contains a SEQ parameter (with a new sequence | |||
| number), a ECHO_REQUEST_SIGNED parameter, the priority of the | number), an ECHO_REQUEST_SIGNED parameter, the priority of the | |||
| candidate in a CANDIDATE_PRIORITY parameter and NOMINATE parameter to | candidate in a CANDIDATE_PRIORITY parameter, and a NOMINATE parameter | |||
| signify conclusion of the connectivity checks. Since the nominated | to signify conclusion of the connectivity checks. Since the | |||
| address pair has already been tested for reachability, the controlled | nominated address pair has already been tested for reachability, the | |||
| host should be able to receive the message. Upon reception, the | controlled host should be able to receive the message. Upon | |||
| controlled host SHOULD select the nominated address pair. The | reception, the controlled host SHOULD select the nominated address | |||
| response message MUST include a SEQ parameter with a new sequence id, | pair. The response message MUST include a SEQ parameter with a new | |||
| acknowledgment of the sequence from the controlling host in an ACK | sequence identifier, acknowledgment of the sequence from the | |||
| parameter, a new ECHO_REQUEST_SIGNED parameter, ECHO_RESPONSE_SIGNED | controlling host in an ACK parameter, a new ECHO_REQUEST_SIGNED | |||
| parameter corresponding to the ECHO_REQUEST_SIGNED parameter from the | parameter, an ECHO_RESPONSE_SIGNED parameter corresponding to the | |||
| controlling host and the NOMINATE parameter. After sending this | ECHO_REQUEST_SIGNED parameter from the controlling host, and the | |||
| packet, the controlled host can create IPsec security associations | NOMINATE parameter. After sending this packet, the controlled host | |||
| using the nominated address candidate for delivering application | can create IPsec security associations using the nominated address | |||
| payload to the controlling host. Since the message from the | candidate for delivering application payload to the controlling host. | |||
| controlled host included a new sequence id and echo request for | Since the message from the controlled host included a new sequence | |||
| signature, the controlling host MUST acknowledge this with a new | identifier echo request for the signature, the controlling host MUST | |||
| UPDATE message that includes an ACK and ECHO_RESPONSE_SIGNED | acknowledge this with a new UPDATE message that includes an ACK and | |||
| parameters. After this final concluding message, the controlling | ECHO_RESPONSE_SIGNED parameters. After this final concluding | |||
| host also can create IPsec security associations for delivering | message, the controlling host also can create IPsec security | |||
| application payload to the controlled host. | associations for delivering application payload to the controlled | |||
| host. | ||||
| It is possible that packets are delayed by the network. Both hosts | It is possible that packets are delayed by the network. Both hosts | |||
| MUST continue to respond to any connectivity checks despite an | MUST continue to respond to any connectivity checks despite an | |||
| address pair having been nominated. | address pair having been nominated. | |||
| If all the connectivity checks have failed, the hosts MUST NOT send | If all the connectivity checks have failed, the hosts MUST NOT send | |||
| ESP traffic to each other but MAY continue communicating using HIP | ESP traffic to each other but MAY continue communicating using HIP | |||
| packets and the locators used for the base exchange. Also, the hosts | packets and the locators used for the base exchange. Also, the hosts | |||
| SHOULD notify each other about the failure with a | SHOULD notify each other about the failure with a | |||
| CONNECTIVITY_CHECKS_FAILED NOTIFY packet (see Section 5.10). | CONNECTIVITY_CHECKS_FAILED NOTIFY packet (see Section 5.10). | |||
| 4.7. NAT Traversal Optimizations | 4.7. NAT Traversal Optimizations | |||
| 4.7.1. Minimal NAT Traversal Support | 4.7.1. Minimal NAT Traversal Support | |||
| If the Responder has a fixed and publicly reachable IPv4 address and | If the Responder has a fixed and publicly reachable IPv4 address and | |||
| does not employ a Control Relay Server, the explicit NAT traversal | does not employ a Control Relay Server, the explicit NAT traversal | |||
| mode negotiation MAY be omitted, and thus even the UDP-ENCAPSULATION | mode negotiation MAY be omitted; thus, even the UDP-ENCAPSULATION | |||
| mode does not have to be negotiated. In such a scenario, the | mode does not have to be negotiated. In such a scenario, the | |||
| Initiator sends an I1 message over UDP and the Responder responds | Initiator sends an I1 message over UDP and the Responder responds | |||
| with an R1 message over UDP without including any NAT traversal mode | with an R1 message over UDP without including any NAT traversal mode | |||
| parameter. The rest of the base exchange follows the procedures | parameter. The rest of the base exchange follows the procedures | |||
| defined in [RFC7401], except that the control and data plane use UDP | defined in [RFC7401], except that the control and data plane use UDP | |||
| encapsulation. Here, the use of UDP for NAT traversal is agreed | encapsulation. Here, the use of UDP for NAT traversal is agreed upon | |||
| implicitly. This way of operation is still subject to NAT timeouts, | implicitly. This way of operation is still subject to NAT timeouts, | |||
| and the hosts MUST employ NAT keepalives as defined in Section 4.10. | and the hosts MUST employ NAT keepalives as defined in Section 4.10. | |||
| When UDP-ENCAPSULATION mode is chosen either explicitly or | When UDP-ENCAPSULATION mode is chosen either explicitly or | |||
| implicitly, the connectivity checks as defined in this document MUST | implicitly, the connectivity checks as defined in this document MUST | |||
| NOT be used. When hosts lose connectivity, they MUST instead utilize | NOT be used. When hosts lose connectivity, they MUST instead utilize | |||
| [RFC8046] or [RFC8047] procedures, but with the difference being that | [RFC8046] or [RFC8047] procedures, but with the difference being that | |||
| UDP-based tunneling MUST be employed for the entire lifetime of the | UDP-based tunneling MUST be employed for the entire lifetime of the | |||
| corresponding Host Association. | corresponding HIP association. | |||
| 4.7.2. Base Exchange without Connectivity Checks | 4.7.2. Base Exchange without Connectivity Checks | |||
| It is possible to run a base exchange without any connectivity checks | It is possible to run a base exchange without any connectivity checks | |||
| as defined in Legacy ICE-HIP section 4.8 [RFC5770]. The procedure is | as defined in Legacy ICE-HIP (Section 4.8 of [RFC5770]). The | |||
| applicable also in the context of this specification, so it is | procedure is also applicable in the context of this specification, so | |||
| repeated here for completeness. | it is repeated here for completeness. | |||
| In certain network environments, the connectivity checks can be | In certain network environments, the connectivity checks can be | |||
| omitted to reduce initial connection set-up latency because a base | omitted to reduce initial connection setup latency because a base | |||
| exchange acts as an implicit connectivity test itself. For this to | exchange acts as an implicit connectivity test itself. For this to | |||
| work, the Initiator MUST be able to reach the Responder by simply UDP | work, the Initiator MUST be able to reach the Responder by simply UDP | |||
| encapsulating HIP and ESP packets sent to the Responder's address. | encapsulating HIP and ESP packets sent to the Responder's address. | |||
| Detecting and configuring this particular scenario is prone to | Detecting and configuring this particular scenario is prone to | |||
| failure unless carefully planned. | failure unless carefully planned. | |||
| In such a scenario, the Responder MAY include UDP-ENCAPSULATION NAT | In such a scenario, the Responder MAY include UDP-ENCAPSULATION NAT | |||
| traversal mode as one of the supported modes in the R1 packet. If | traversal mode as one of the supported modes in the R1 packet. If | |||
| the Responder has registered to a Control Relay Server in order to | the Responder has registered to a Control Relay Server in order to | |||
| discover its address candidates, it MUST also include a LOCATOR_SET | discover its address candidates, it MUST also include a LOCATOR_SET | |||
| parameter encapsulated inside an ENCRYPTED parameter in R1 message | parameter encapsulated inside an ENCRYPTED parameter in an R1 message | |||
| that contains a preferred address where the Responder is able to | that contains a preferred address where the Responder is able to | |||
| receive UDP-encapsulated ESP and HIP packets. This locator MUST be | receive UDP-encapsulated ESP and HIP packets. This locator MUST be | |||
| of type "Transport address", its Traffic type MUST be "both", and it | of type "Transport address", its Traffic type MUST be "both", and it | |||
| MUST have the "Preferred bit" set (see Table 1). If there is no such | MUST have the "Preferred bit" set (see Table 2). If there is no such | |||
| locator in R1, the Initiator MUST use the source address of the R1 as | locator in R1, the Initiator MUST use the source address of the R1 as | |||
| the Responder's preferred address. | the Responder's preferred address. | |||
| The Initiator MAY choose the UDP-ENCAPSULATION mode if the Responder | The Initiator MAY choose the UDP-ENCAPSULATION mode if the Responder | |||
| listed it in the supported modes and the Initiator does not wish to | listed it in the supported modes and the Initiator does not wish to | |||
| use the connectivity checks defined in this document for searching | use the connectivity checks defined in this document for searching | |||
| for a more optimal path. In this case, the Initiator sends the I2 | for a more optimal path. In this case, the Initiator sends the I2 | |||
| with UDP-ENCAPSULATION mode in the NAT traversal mode parameter | with UDP-ENCAPSULATION mode in the NAT traversal mode parameter | |||
| directly to the Responder's preferred address (i.e., to the preferred | directly to the Responder's preferred address (i.e., to the preferred | |||
| locator in R1 or to the address where R1 was received from if there | locator in R1 or to the address where R1 was received from if there | |||
| was no preferred locator in R1). The Initiator MAY include locators | was no preferred locator in R1). The Initiator MAY include locators | |||
| in I2 but they MUST NOT be taken as address candidates, since | in I2 but they MUST NOT be taken as address candidates, since | |||
| connectivity checks defined in this document will not be used for | connectivity checks defined in this document will not be used for | |||
| connections with UDP-ENCAPSULATION NAT traversal mode. Instead, if | connections with UDP-ENCAPSULATION NAT traversal mode. Instead, if | |||
| R2 and I2 are received and processed successfully, a security | R2 and I2 are received and processed successfully, a security | |||
| association can be created and UDP-encapsulated ESP can be exchanged | association can be created and UDP-encapsulated ESP can be exchanged | |||
| between the hosts after the base exchange completes according to the | between the hosts after the base exchange completes according to the | |||
| rules in Section 4.4 in [RFC7401]. | rules in Section 4.4 of [RFC7401]. | |||
| The Control Relay Server can be used for discovering address | The Control Relay Server can be used for discovering address | |||
| candidates but it is not intended to be used for relaying end-host | candidates but it is not intended to be used for relaying end-host | |||
| packets using the UDP-ENCAPSULATION NAT mode. Since an I2 packet | packets using the UDP-ENCAPSULATION NAT mode. Since an I2 packet | |||
| with UDP-ENCAPSULATION NAT traversal mode selected MUST NOT be sent | with UDP-ENCAPSULATION NAT traversal mode selected MUST NOT be sent | |||
| via a Control Relay Server, the Responder SHOULD reject such I2 | via a Control Relay Server, the Responder SHOULD reject such I2 | |||
| packets and reply with a NO_VALID_NAT_TRAVERSAL_MODE_PARAMETER NOTIFY | packets and reply with a NO_VALID_NAT_TRAVERSAL_MODE_PARAMETER NOTIFY | |||
| packet (see Section 5.10). | packet (see Section 5.10). | |||
| If there is no answer for the I2 packet sent directly to the | If there is no answer for the I2 packet sent directly to the | |||
| Responder's preferred address, the Initiator MAY send another I2 via | Responder's preferred address, the Initiator MAY send another I2 via | |||
| the Control Relay Server, but it MUST NOT choose UDP-ENCAPSULATION | the Control Relay Server, but it MUST NOT choose UDP-ENCAPSULATION | |||
| NAT traversal mode for that I2. | NAT traversal mode for that I2. | |||
| 4.7.3. Initiating a Base Exchange both with and without UDP | 4.7.3. Initiating a Base Exchange Both with and without UDP | |||
| Encapsulation | Encapsulation | |||
| It is possible to run a base exchange in parallel both with and | It is possible to run a base exchange in parallel both with and | |||
| without UDP encapsulation as defined in Legacy ICE-HIP section 4.9 in | without UDP encapsulation as defined in Legacy ICE-HIP (Section 4.9 | |||
| [RFC5770]. The procedure is applicable also in the context of this | of [RFC5770]). The procedure is also applicable in the context of | |||
| specification, so it is repeated here for completeness. | this specification, so it is repeated here for completeness. | |||
| The Initiator MAY also try to simultaneously perform a base exchange | The Initiator MAY also try to simultaneously perform a base exchange | |||
| with the Responder without UDP encapsulation. In such a case, the | with the Responder without UDP encapsulation. In such a case, the | |||
| Initiator sends two I1 packets, one without and one with UDP | Initiator sends two I1 packets, one without and one with UDP | |||
| encapsulation, to the Responder. The Initiator MAY wait for a while | encapsulation, to the Responder. The Initiator MAY wait for a while | |||
| before sending the other I1. How long to wait and in which order to | before sending the other I1. How long to wait and in which order to | |||
| send the I1 packets can be decided based on local policy. For | send the I1 packets can be decided based on local policy. For | |||
| retransmissions, the procedure is repeated. | retransmissions, the procedure is repeated. | |||
| The I1 packet without UDP encapsulation may arrive directly, without | The I1 packet without UDP encapsulation may arrive directly, without | |||
| passing any a Control Relay Server, at the Responder. When this | passing a Control Relay Server, at the Responder. When this happens, | |||
| happens, the procedures in [RFC7401] are followed for the rest of the | the procedures in [RFC7401] are followed for the rest of the base | |||
| base exchange. The Initiator may receive multiple R1 packets, with | exchange. The Initiator may receive multiple R1 packets, with and | |||
| and without UDP encapsulation, from the Responder. However, after | without UDP encapsulation, from the Responder. However, after | |||
| receiving a valid R1 and answering it with an I2, further R1 packets | receiving a valid R1 and answering it with an I2, further R1 packets | |||
| that are not retransmissions of the R1 message received first MUST be | that are not retransmissions of the R1 message received first MUST be | |||
| ignored. | ignored. | |||
| The I1 packet without UDP encapsulation may also arrive at a HIP- | The I1 packet without UDP encapsulation may also arrive at a HIP- | |||
| capable middlebox. When the middlebox is a HIP rendezvous server and | capable middlebox. When the middlebox is a HIP Rendezvous Server and | |||
| the Responder has successfully registered with the rendezvous | the Responder has successfully registered with the rendezvous | |||
| service, the middlebox follows rendezvous procedures in [RFC8004]. | service, the middlebox follows rendezvous procedures in [RFC8004]. | |||
| If the Initiator receives a NAT traversal mode parameter in R1 | If the Initiator receives a NAT traversal mode parameter in R1 | |||
| without UDP encapsulation, the Initiator MAY ignore this parameter | without UDP encapsulation, the Initiator MAY ignore this parameter | |||
| and send an I2 without UDP encapsulation and without any selected NAT | and send an I2 without UDP encapsulation and without any selected NAT | |||
| traversal mode. When the Responder receives the I2 without UDP | traversal mode. When the Responder receives the I2 without UDP | |||
| encapsulation and without NAT traversal mode, it will assume that no | encapsulation and without NAT traversal mode, it will assume that no | |||
| NAT traversal mechanism is needed. The packet processing will be | NAT traversal mechanism is needed. The packet processing will be | |||
| done as described in [RFC7401]. The Initiator MAY store the NAT | done as described in [RFC7401]. The Initiator MAY store the NAT | |||
| traversal modes for future use, e.g., in case of a mobility or | traversal modes for future use, e.g., in case of a mobility or | |||
| multihoming event that causes NAT traversal to be used during the | multihoming event that causes NAT traversal to be used during the | |||
| lifetime of the HIP association. | lifetime of the HIP association. | |||
| 4.8. Sending Control Packets after the Base Exchange | 4.8. Sending Control Packets after the Base Exchange | |||
| The same considerations of sending control packets after the base | The same considerations with regard to sending control packets after | |||
| exchange described in legacy ICE-HIP section 5.10 in [RFC5770] apply | the base exchange as described in Legacy ICE-HIP (Section 5.10 of | |||
| also here, so they are repeated here for completeness. | [RFC5770]) also apply here, so they are repeated here for | |||
| completeness. | ||||
| After the base exchange, the two end-hosts MAY send HIP control | After the base exchange, the two end hosts MAY send HIP control | |||
| packets directly to each other using the transport address pair | packets directly to each other using the transport address pair | |||
| established for a data channel without sending the control packets | established for a data channel without sending the control packets | |||
| through any Control Relay Servers . When a host does not receive | through any Control Relay Servers. When a host does not receive | |||
| acknowledgments, e.g., to an UPDATE or CLOSE packet after a timeout | acknowledgments, e.g., to an UPDATE or CLOSE packet after a timeout | |||
| based on local policies, a host SHOULD resend the packet through the | based on local policies, a host SHOULD resend the packet through the | |||
| associated Data Relay Server of the peer (if the peer listed it in | associated Data Relay Server of the peer (if the peer listed it in | |||
| its LOCATOR_SET parameter in the base exchange according the rules | its LOCATOR_SET parameter in the base exchange according to the rules | |||
| specified in section 4.4.2 in [RFC7401]. | specified in Section 4.4.2 of [RFC7401]). | |||
| If Control Relay Client sends a packet through a Control Relay | If a Control Relay Client sends a packet through a Control Relay | |||
| Server, the Control Relay Client MUST always utilize the RELAY_TO | Server, the Control Relay Client MUST always utilize the RELAY_TO | |||
| parameter. The Control Relay Server SHOULD forward HIP control | parameter. The Control Relay Server SHOULD forward HIP control | |||
| packets originating from a Control Relay Client to the address | packets originating from a Control Relay Client to the address | |||
| denoted in the RELAY_TO parameter. In the other direction, the | denoted in the RELAY_TO parameter. In the other direction, the | |||
| Control Relay Server SHOULD forward HIP control packets to the | Control Relay Server SHOULD forward HIP control packets to the | |||
| Control Relay Clients, and MUST add a RELAY_FROM parameter to the | Control Relay Clients and MUST add a RELAY_FROM parameter to the | |||
| control packets it relays to the Control Relay Clients. | control packets it relays to the Control Relay Clients. | |||
| If the Control Relay Server is not willing or able to relay a HIP | If the Control Relay Server is not willing or able to relay a HIP | |||
| packet, it MAY notify the sender of the packet with | packet, it MAY notify the sender of the packet with a | |||
| MESSAGE_NOT_RELAYED error notification (see Section 5.10). | MESSAGE_NOT_RELAYED error notification (see Section 5.10). | |||
| 4.9. Mobility Handover Procedure | 4.9. Mobility Handover Procedure | |||
| A host may move after base exchange and connectivity checks. | A host may move after base exchange and connectivity checks. | |||
| Mobility extensions for HIP [RFC8046] define handover procedures | Mobility extensions for HIP [RFC8046] define handover procedures | |||
| without NATs. In this section, we define how two hosts interact with | without NATs. In this section, we define how two hosts interact with | |||
| handover procedures in scenarios involving NATs. The specified | handover procedures in scenarios involving NATs. The specified | |||
| extensions define only simple mobility using a pair of security | extensions define only simple mobility using a pair of security | |||
| associations, and multihoming extensions are left to be defined in | associations, and multihoming extensions are left to be defined in | |||
| skipping to change at page 31, line 7 ¶ | skipping to change at line 1435 ¶ | |||
| exchange. Similarly, the Responder MUST store information that it | exchange. Similarly, the Responder MUST store information that it | |||
| was the controlled host during the base exchange. | was the controlled host during the base exchange. | |||
| Prior to starting the handover procedures with all peer hosts, the | Prior to starting the handover procedures with all peer hosts, the | |||
| mobile host SHOULD first send its locators in UPDATE messages to its | mobile host SHOULD first send its locators in UPDATE messages to its | |||
| Control and Data Relay Servers if it has registered to such. It | Control and Data Relay Servers if it has registered to such. It | |||
| SHOULD wait for all of them to respond for a configurable time, by | SHOULD wait for all of them to respond for a configurable time, by | |||
| default two minutes, and then continue with the handover procedure | default two minutes, and then continue with the handover procedure | |||
| without information from the Relay Server that did not respond. As | without information from the Relay Server that did not respond. As | |||
| defined in Section 4.1, a response message from a Control Relay | defined in Section 4.1, a response message from a Control Relay | |||
| Server includes a REG_FROM parameter that describes the server | Server includes a REG_FROM parameter that describes the server- | |||
| reflexive candidate of the mobile host to be used in the candidate | reflexive candidate of the mobile host to be used in the candidate | |||
| exchange during the handover. Similarly, an UPDATE to a Data Relay | exchange during the handover. Similarly, an UPDATE to a Data Relay | |||
| Server is necessary to make sure the Data Relay Server can forward | Server is necessary to make sure the Data Relay Server can forward | |||
| data to the correct IP address after a handoff. | data to the correct IP address after a handover. | |||
| The mobility extensions for NAT traversal are illustrated in | The mobility extensions for NAT traversal are illustrated in | |||
| Figure 6. The mobile host is the host that has changed its locators, | Figure 6. The mobile host is the host that has changed its locators, | |||
| and the peer host is the host it has a host association with. The | and the peer host is the host it has a host association with. The | |||
| mobile host may have multiple peers and it repeats the process with | mobile host may have multiple peers, and it repeats the process with | |||
| all of its peers. In the figure, the Control Relay Server belongs to | all of its peers. In the figure, the Control Relay Server belongs to | |||
| the peer host, i.e., the peer host is a Control Relay Client for the | the peer host, i.e., the peer host is a Control Relay Client for the | |||
| Control Relay Server. Note that the figure corresponds to figure 3 | Control Relay Server. Note that the figure corresponds to figure 3 | |||
| in [RFC8046], but the difference is that the main UPDATE procedure is | in [RFC8046], but the difference is that the main UPDATE procedure is | |||
| carried over the relay and the connectivity is tested separately. | carried over the relay and the connectivity is tested separately. | |||
| Next, we describe the procedure in the figure in detail. | Next, we describe the procedure of that figure in detail. | |||
| Mobile Host Control Relay Server Peer Host | Mobile Host Control Relay Server Peer Host | |||
| | 1. UDP(UPDATE(ESP_INFO, | | | | 1. UDP(UPDATE(ESP_INFO, | | | |||
| | ENC(LOC_SET), SEQ)) | | | | ENC(LOC_SET), SEQ)) | | | |||
| +--------------------------------->| 2. UDP(UPDATE(ESP_INFO, | | +--------------------------------->| 2. UDP(UPDATE(ESP_INFO, | | |||
| | | ENC(LOC_SET), SEQ, | | | | ENC(LOC_SET), SEQ, | | |||
| | | RELAY_FROM)) | | | | RELAY_FROM)) | | |||
| | +------------------------------->| | | +------------------------------->| | |||
| | | | | | | | | |||
| | | 3. UDP(UPDATE(ESP_INFO, SEQ, | | | | 3. UDP(UPDATE(ESP_INFO, SEQ, | | |||
| skipping to change at page 32, line 35 ¶ | skipping to change at line 1482 ¶ | |||
| | | RELAY_FROM)) | | | | RELAY_FROM)) | | |||
| | +------------------------------->| | | +------------------------------->| | |||
| | | | | | | | | |||
| | 7. connectivity checks over UDP | | | 7. connectivity checks over UDP | | |||
| +<----------------------------------------------------------------->+ | +<----------------------------------------------------------------->+ | |||
| | | | | | | | | |||
| | 8. ESP data over UDP | | | 8. ESP data over UDP | | |||
| +<----------------------------------------------------------------->+ | +<----------------------------------------------------------------->+ | |||
| | | | | | | | | |||
| Figure 6: HIP UPDATE procedure | Figure 6: HIP UPDATE Procedure | |||
| In step 1, the mobile host has changed location and sends a location | In step 1, the mobile host has changed location and sends a location | |||
| update to its peer through the Control Relay Server of the peer. It | update to its peer through the Control Relay Server of the peer. It | |||
| sends an UPDATE packet with source HIT belonging to itself and | sends an UPDATE packet with the source HIT belonging to itself and | |||
| destination HIT belonging to the peer host. In the packet, the | destination HIT belonging to the peer host. In the packet, the | |||
| source IP address belongs to the mobile host and the destination to | source IP address belongs to the mobile host and the destination to | |||
| the Control Relay Server. The packet contains an ESP_INFO parameter, | the Control Relay Server. The packet contains an ESP_INFO parameter | |||
| where, in this case, the OLD SPI and NEW SPI parameters both contain | where, in this case, the OLD SPI and NEW SPI parameters both contain | |||
| the pre-existing incoming SPI. The packet also contains the locators | the pre-existing incoming SPI. The packet also contains the locators | |||
| of the mobile host in a LOCATOR_SET parameter, encapsulated inside an | of the mobile host in a LOCATOR_SET parameter, encapsulated inside an | |||
| ENCRYPTED parameter (see sections 5.2.18 and 6.5 in [RFC7401] for | ENCRYPTED parameter (see Sections 5.2.18 and 6.5 in [RFC7401] for | |||
| details on the ENCRYPTED parameter). The packet contains also a SEQ | details on the ENCRYPTED parameter). The packet also contains a SEQ | |||
| number to be acknowledged by the peer. As specified in [RFC8046], | number to be acknowledged by the peer. As specified in [RFC8046], | |||
| the packet may also include a HOST_ID (for middlebox inspection) and | the packet may also include a HOST_ID (for middlebox inspection) and | |||
| DIFFIE_HELLMAN parameter for rekeying. | DIFFIE_HELLMAN parameter for rekeying. | |||
| In step 2, the Control Relay Server receives the UPDATE packet and | In step 2, the Control Relay Server receives the UPDATE packet and | |||
| forwards it to the peer host (i.e. Control Relay Client). The | forwards it to the peer host (i.e., Control Relay Client). The | |||
| Control Relay Server rewrites the destination IP address and appends | Control Relay Server rewrites the destination IP address and appends | |||
| a RELAY_FROM parameter to the message. | a RELAY_FROM parameter to the message. | |||
| In step 3, the peer host receives the UPDATE packet, processes it and | In step 3, the peer host receives the UPDATE packet, processes it, | |||
| responds with another UPDATE message. The message is destined to the | and responds with another UPDATE message. The message is destined to | |||
| HIT of mobile host and to the IP address of the Control Relay Server. | the HIT of the mobile host and to the IP address of the Control Relay | |||
| The message includes an ESP_INFO parameter where, in this case, the | Server. The message includes an ESP_INFO parameter where, in this | |||
| OLD SPI and NEW SPI parameters both contain the pre-existing incoming | case, the OLD SPI and NEW SPI parameters both contain the pre- | |||
| SPI. The peer includes a new SEQ and ECHO_REQUEST_SIGNED parameters | existing incoming SPI. The peer includes a new SEQ and | |||
| to be acknowledged by the mobile host. The message acknowledges the | ECHO_REQUEST_SIGNED parameter to be acknowledged by the mobile host. | |||
| SEQ parameter of the earlier message with an ACK parameter. The | The message acknowledges the SEQ parameter of the earlier message | |||
| RELAY_TO parameter specifies the address of the mobile host where the | with an ACK parameter. The RELAY_TO parameter specifies the address | |||
| Control Relay Server should forward the message. | of the mobile host where the Control Relay Server should forward the | |||
| message. | ||||
| In step 4, the Control Relay Server receives the message, rewrites | In step 4, the Control Relay Server receives the message, rewrites | |||
| the destination IP address and UDP port according to the RELAY_TO | the destination IP address and UDP port according to the RELAY_TO | |||
| parameter, and then forwards the modified message to the mobile host. | parameter, and then forwards the modified message to the mobile host. | |||
| In step 5, the mobile host receives the UPDATE packet and processes | In step 5, the mobile host receives the UPDATE packet and processes | |||
| it. The mobile host concludes the handover procedure by | it. The mobile host concludes the handover procedure by | |||
| acknowledging the received SEQ parameter with an ACK parameter and | acknowledging the received SEQ parameter with an ACK parameter and | |||
| the ECHO_REQUEST_SIGNED parameter with ECHO_RESPONSE_SIGNED | the ECHO_REQUEST_SIGNED parameter with an ECHO_RESPONSE_SIGNED | |||
| parameter. The mobile host delivers the packet to the HIT of the | parameter. The mobile host sends the packet to the HIT of the peer | |||
| peer and to the address of the HIP relay. The mobile host can start | and to the address of the HIP relay. The mobile host can start | |||
| connectivity checks after this packet. | connectivity checks after this packet. | |||
| In step 6, HIP relay receives the UPDATE packet and forwards it to | In step 6, the HIP relay receives the UPDATE packet and forwards it | |||
| the peer host (i.e. Relay Client). The HIP relay rewrites the | to the peer host (i.e., Relay Client). The HIP relay rewrites the | |||
| destination IP address and port, and then appends a RELAY_FROM | destination IP address and port, and then appends a RELAY_FROM | |||
| parameter to the message. When the peer host receives this | parameter to the message. When the peer host receives this | |||
| concluding UPDATE packet, it can initiate the connectivity checks. | concluding UPDATE packet, it can initiate the connectivity checks. | |||
| In step 7, the two hosts test for connectivity across NATs according | In step 7, the two hosts test for connectivity across NATs according | |||
| to procedures described in Section 4.6. The original Initiator of | to procedures described in Section 4.6. The original Initiator of | |||
| the communications is the controlling and the original Responder is | the communications is the controlling host and the original Responder | |||
| the controlled host. | is the controlled host. | |||
| In step 8, the connectivity checks are successfully completed and the | In step 8, the connectivity checks are successfully completed and the | |||
| controlling host has nominated one address pair to be used. The | controlling host has nominated one address pair to be used. The | |||
| hosts set up security associations to deliver the application | hosts set up security associations to deliver the application | |||
| payload. | payload. | |||
| It is worth noting that the Control and Data Relay Client do not have | It is worth noting that the Control and Data Relay Client do not have | |||
| to re-register for the related services after a handoff. However, if | to reregister for the related services after a handover. However, if | |||
| a Data Relay Client has registered a relayed address candidate from a | a Data Relay Client has registered a relayed address candidate from a | |||
| Data Relay Server, the Data Relay Client MUST reactivate the address | Data Relay Server, the Data Relay Client MUST reactivate the address | |||
| before the connectivity checks by sending an UPDATE message | before the connectivity checks by sending an UPDATE message | |||
| containing PEER_PERMISSION parameter as described in Section 4.12.1. | containing the PEER_PERMISSION parameter as described in | |||
| Otherwise, the Data Relay Server drops ESP packets sent to the | Section 4.12.1. Otherwise, the Data Relay Server drops ESP packets | |||
| relayed address. | sent to the relayed address. | |||
| In so called "double jump" or simultaneous mobility scenario both | In the so-called "double jump" or simultaneous mobility scenario, | |||
| peers change their location simultaneously. In such a case, both | both peers change their location simultaneously. In such a case, | |||
| peers trigger the procedure described earlier in this section at the | both peers trigger the procedure described earlier in this section at | |||
| same time. In other words, both of the communicating hosts send an | the same time. In other words, both of the communicating hosts send | |||
| UPDATE packet carrying locators at the same time or with some delay. | an UPDATE packet carrying locators at the same time or with some | |||
| When the locators are exchanged almost simultaneously (reliably via | delay. When the locators are exchanged almost simultaneously | |||
| Control Relay Servers), the two hosts can continue with connectivity | (reliably via Control Relay Servers), the two hosts can continue with | |||
| checks after both have completed separately the steps in Figure 6. | connectivity checks after both have completed separately the steps in | |||
| The problematic case occurs when one of the hosts (referred here as | Figure 6. The problematic case occurs when one of the hosts | |||
| host "M") moves later during the connectivity checks. In such a | (referred to here as host "M") moves later during the connectivity | |||
| case, host M sends a locator to the peer which is in the middle of | checks. In such a case, host M sends a locator to the peer, which is | |||
| connectivity checks. Upon receiving the UPDATE message, the peer | in the middle of connectivity checks. Upon receiving the UPDATE | |||
| responds with an UPDATE with ECHO_REQ_SIGN as described in step 3 in | message, the peer responds with an UPDATE with ECHO_REQ_SIGN as | |||
| Figure 6. Upon receiving the valid response from host M as described | described in step 3 in Figure 6. Upon receiving the valid response | |||
| in step 6, the peer host MUST restart the connectivity checks with | from host M as described in step 6, the peer host MUST restart the | |||
| host M. This way, both hosts start the connectivity checks roughly | connectivity checks with host M. This way, both hosts start the | |||
| in a synchronized way. It is also important that peer host does not | connectivity checks roughly in a synchronized way. It is also | |||
| restart the connectivity checks until the step 6 is successfully | important that the peer host does not restart the connectivity checks | |||
| completed because the UPDATE message carrying locators in step 1 | until step 6 is successfully completed, because the UPDATE message | |||
| could be replayed by an attacker. | carrying locators in step 1 could be replayed by an attacker. | |||
| 4.10. NAT Keepalives | 4.10. NAT Keepalives | |||
| To prevent NAT states from expiring, communicating hosts MUST send | To prevent NAT states from expiring, communicating hosts MUST send | |||
| periodic keepalives to other hosts with which they have established a | periodic keepalives to other hosts with which they have established a | |||
| Host Association every 15 seconds (the so called Tr value in ICE). | HIP association every 15 seconds (the so-called Tr value in ICE). | |||
| Other values MAY be used, but a Tr value smaller than 15 seconds MUST | Other values MAY be used, but a Tr value smaller than 15 seconds MUST | |||
| NOT be used. Both a Control/Data Relay Client and Control/Data Relay | NOT be used. Both a Control/Data Relay Client and Control/Data Relay | |||
| Server, as well as two peers employing UDP-ENCAPSULATION or ICE-HIP- | Server, as well as two peers employing UDP-ENCAPSULATION or ICE-HIP- | |||
| UDP mode, SHOULD send HIP NOTIFY packets unless they have exchanged | UDP mode, SHOULD send HIP NOTIFY packets unless they have exchanged | |||
| some other traffic over the used UDP ports. However, the Data Relay | some other traffic over the used UDP ports. However, the Data Relay | |||
| Client and Data Relay Server MUST employ only HIP NOTIFY packets in | Client and Data Relay Server MUST employ only HIP NOTIFY packets in | |||
| order to keep the server reflexive candidates alive. The keepalive | order to keep the server-reflexive candidates alive. The keepalive | |||
| message encoding format is defined in Section 5.3. If the base | message encoding format is defined in Section 5.3. If the base | |||
| exchange or mobility handover procedure occurs during an extremely | exchange or mobility handover procedure occurs during an extremely | |||
| slow path, a host (with a Host Association with the peer) MAY also | slow path, a host (with a HIP association with the peer) MAY also | |||
| send HIP NOTIFY packets every 15 seconds to keep the path active with | send HIP NOTIFY packets every 15 seconds to keep the path active with | |||
| the recipient. | the recipient. | |||
| 4.11. Closing Procedure | 4.11. Closing Procedure | |||
| The two-way procedure for closing a HIP association and the related | The two-way procedure for closing a HIP association and the related | |||
| security associations is defined in [RFC7401]. One host initiates | security associations is defined in [RFC7401]. One host initiates | |||
| the procedure by sending a CLOSE message and the recipient confirms | the procedure by sending a CLOSE message and the recipient confirms | |||
| it with CLOSE_ACK. All packets are protected using HMACs and | it with CLOSE_ACK. All packets are protected using HMACs and | |||
| signatures, and the CLOSE messages includes a ECHO_REQUEST_SIGNED | signatures, and the CLOSE messages include an ECHO_REQUEST_SIGNED | |||
| parameter to protect against replay attacks. | parameter to protect against replay attacks. | |||
| The same procedure for closing HIP associations applies also here, | The same procedure for closing HIP associations also applies here, | |||
| but the messaging occurs using the UDP encapsulated tunnel that the | but the messaging occurs using the UDP-encapsulated tunnel that the | |||
| two hosts employ. A host sending the CLOSE message SHOULD first send | two hosts employ. A host sending the CLOSE message SHOULD first send | |||
| the message over a direct link. After a number of retransmissions, | the message over a direct link. After a number of retransmissions, | |||
| it MUST send over a Control Relay Server of the recipient if one | it MUST send over a Control Relay Server of the recipient if one | |||
| exists. The host receiving the CLOSE message directly without a | exists. The host receiving the CLOSE message directly without a | |||
| Control Relay Server SHOULD respond directly. If CLOSE message came | Control Relay Server SHOULD respond directly. If the CLOSE message | |||
| via a Control Relay Server, the host SHOULD respond using the same | came via a Control Relay Server, the host SHOULD respond using the | |||
| Control Relay Server. | same Control Relay Server. | |||
| 4.12. Relaying Considerations | 4.12. Relaying Considerations | |||
| 4.12.1. Forwarding Rules and Permissions | 4.12.1. Forwarding Rules and Permissions | |||
| The Data Relay Server uses a similar permission model as a TURN | The Data Relay Server uses a similar permission model as a TURN | |||
| server: before the Data Relay Server forwards any ESP data packets | server: before the Data Relay Server forwards any ESP data packets | |||
| from a peer to a Data Relay Client (or the other direction), the | from a peer to a Data Relay Client (or the other direction), the | |||
| client MUST set a permission for the peer's address. The permissions | client MUST set a permission for the peer's address. The permissions | |||
| also install a forwarding rule for each direction, similar to TURN's | also install a forwarding rule for each direction, similar to TURN's | |||
| channels, based on the Security Parameter Index (SPI) values in the | channels, based on the Security Parameter Index (SPI) values in the | |||
| ESP packets. | ESP packets. | |||
| Permissions are not required for HIP control packets. However, if a | Permissions are not required for HIP control packets. However, if a | |||
| relayed address (as conveyed in the RELAYED_ADDRESS parameter from | relayed address (as conveyed in the RELAYED_ADDRESS parameter from | |||
| the Data Relay Server) is selected to be used for data, the Control | the Data Relay Server) is selected to be used for data, the Control | |||
| Relay Client MUST send an UPDATE message to the Data Relay Server | Relay Client MUST send an UPDATE message to the Data Relay Server | |||
| containing a PEER_PERMISSION parameter (see Section 5.13) with the | containing a PEER_PERMISSION parameter (see Section 5.13) with the | |||
| following information: the UDP port and address for the server | following information: the UDP port and address for the server- | |||
| reflexive address, the UDP port and address of the peer, and the | reflexive address, the UDP port and address of the peer, and the | |||
| inbound and outbound SPIs used for ESP. The packet MUST be sent to | inbound and outbound SPIs used for ESP. The packet MUST be sent to | |||
| the same UDP tunnel the Client employed in the base exchange to | the same UDP tunnel the Client employed in the base exchange to | |||
| contact the Server (i.e., not to the port occupied by the server | contact the Server (i.e., not to the port occupied by the server- | |||
| reflexive candidate). To avoid packet dropping of ESP packets, the | reflexive candidate). To avoid packet dropping of ESP packets, the | |||
| Control Relay Client SHOULD send the PEER_PERMISSION parameter before | Control Relay Client SHOULD send the PEER_PERMISSION parameter before | |||
| connectivity checks both in the case of base exchange and a mobility | connectivity checks both in the case of base exchange and a mobility | |||
| handover. It is worth noting that the UPDATE message includes a SEQ | handover. It is worth noting that the UPDATE message includes a SEQ | |||
| parameter (as specified in [RFC7401]) that the Data Relay Server must | parameter (as specified in [RFC7401]) that the Data Relay Server must | |||
| acknowledge, so that the Control Relay Client can resend the message | acknowledge, so that the Control Relay Client can resend the message | |||
| with PEER_PERMISSION parameter if it gets lost. | with the PEER_PERMISSION parameter if it gets lost. | |||
| When a Data Relay Server receives an UPDATE with a PEER_PERMISSION | When a Data Relay Server receives an UPDATE with a PEER_PERMISSION | |||
| parameter, it MUST check if the sender of the UPDATE is registered | parameter, it MUST check if the sender of the UPDATE is registered | |||
| for data relaying service, and drop the UPDATE if the host was not | for data-relaying service, and drop the UPDATE if the host was not | |||
| registered. If the host was registered, the Data Relay Server checks | registered. If the host was registered, the Data Relay Server checks | |||
| if there is a permission with matching information (protocol, | if there is a permission with matching information (protocol, | |||
| addresses, ports and SPI values). If there is no such permission, a | addresses, ports, and SPI values). If there is no such permission, a | |||
| new permission MUST be created and its lifetime MUST be set to 5 | new permission MUST be created and its lifetime MUST be set to 5 | |||
| minutes. If an identical permission already existed, it MUST be | minutes. If an identical permission already existed, it MUST be | |||
| refreshed by setting the lifetime to 5 minutes. A Data Relay Client | refreshed by setting the lifetime to 5 minutes. A Data Relay Client | |||
| SHOULD refresh permissions 1 minute before the expiration when the | SHOULD refresh permissions 1 minute before the expiration when the | |||
| permission is still needed. | permission is still needed. | |||
| When a Data Relay Server receives an UPDATE from a registered client | When a Data Relay Server receives an UPDATE from a registered client | |||
| but without a PEER_PERMISSION parameter and with a new locator set, | but without a PEER_PERMISSION parameter and with a new locator set, | |||
| the Data Relay Server can assume that the mobile host has changed its | the Data Relay Server can assume that the mobile host has changed its | |||
| location and, thus, is not reachable in its previous location. In | location and is thus not reachable in its previous location. In such | |||
| such an event, the Data Relay Server SHOULD deactivate the permission | an event, the Data Relay Server SHOULD deactivate the permission and | |||
| and stop relaying data plane traffic to the client. | stop relaying data plane traffic to the client. | |||
| The relayed address MUST be activated with the PEER_PERMISSION | The relayed address MUST be activated with the PEER_PERMISSION | |||
| parameter both after a base exchange and after a handover procedure | parameter both after a base exchange and after a handover procedure | |||
| with another ICE-HIP-UDP capable host. Unless activated, the Data | with another ICE-HIP-UDP-capable host. Unless activated, the Data | |||
| Relay Server MUST drop all ESP packets. It is worth noting that a | Relay Server MUST drop all ESP packets. It is worth noting that a | |||
| Data Relay Client does not have to renew its registration upon a | Data Relay Client does not have to renew its registration upon a | |||
| change of location UPDATE, but only when the lifetime of the | change of location UPDATE, but only when the lifetime of the | |||
| registration is close to end. | registration is close to end. | |||
| 4.12.2. HIP Data Relay and Relaying of Control Packets | 4.12.2. HIP Data Relay and Relaying of Control Packets | |||
| When a Data Relay Server accepts to relay UDP encapsulated ESP | When a Data Relay Server accepts to relay UDP-encapsulated ESP | |||
| between a Data Relay Client and its peer, the Data Relay Server opens | between a Data Relay Client and its peer, the Data Relay Server opens | |||
| a UDP port (relayed address) for this purpose as described in | a UDP port (relayed address) for this purpose as described in | |||
| Section 4.1. This port can be used for delivering also control | Section 4.1. This port can be used for also delivering control | |||
| packets because connectivity checks also cover the path through the | packets because connectivity checks also cover the path through the | |||
| Data Relay Server. If the Data Relay Server receives a UDP | Data Relay Server. If the Data Relay Server receives a UDP- | |||
| encapsulated HIP control packet on that port, it MUST forward the | encapsulated HIP control packet on that port, it MUST forward the | |||
| packet to the Data Relay Client and add a RELAY_FROM parameter to the | packet to the Data Relay Client and add a RELAY_FROM parameter to the | |||
| packet as if the Data Relay Server were acting as a Control Relay | packet as if the Data Relay Server were acting as a Control Relay | |||
| Server. When the Data Relay Client replies to a control packet with | Server. When the Data Relay Client replies to a control packet with | |||
| a RELAY_FROM parameter via its Data Relay Server, the Data Relay | a RELAY_FROM parameter via its Data Relay Server, the Data Relay | |||
| Client MUST add a RELAY_TO parameter containing the peer's address | Client MUST add a RELAY_TO parameter containing the peer's address | |||
| and use the address of its Data Relay Server as the destination | and use the address of its Data Relay Server as the destination | |||
| address. Further, the Data Relay Server MUST send this packet to the | address. Further, the Data Relay Server MUST send this packet to the | |||
| peer's address from the relayed address. | peer's address from the relayed address. | |||
| If the Data Relay Server receives a UDP packet that is not a HIP | If the Data Relay Server receives a UDP packet that is not a HIP | |||
| control packet to the relayed address, it MUST check if it has a | control packet to the relayed address, it MUST check if it has a | |||
| permission set for the peer the packet is arriving from (i.e., the | permission set for the peer the packet is arriving from (i.e., the | |||
| sender's address and SPI value matches to an installed permission). | sender's address and SPI value matches to an installed permission). | |||
| If permissions are set, the Data Relay Server MUST forward the packet | If permissions are set, the Data Relay Server MUST forward the packet | |||
| to the Data Relay Client that created the permission. The Data Relay | to the Data Relay Client that created the permission. The Data Relay | |||
| Server MUST also implement the similar checks for the reverse | Server MUST also implement the similar checks for the reverse | |||
| direction (i.e. ESP packets from the Data Relay Client to the peer). | direction (i.e., ESP packets from the Data Relay Client to the peer). | |||
| Packets without a permission MUST be dropped silently. | Packets without a permission MUST be dropped silently. | |||
| 4.12.3. Handling Conflicting SPI Values | 4.12.3. Handling Conflicting SPI Values | |||
| From the viewpoint of a host, its remote peers can have overlapping | From the viewpoint of a host, its remote peers can have overlapping | |||
| inbound SPI numbers because the IPsec uses also the destination IP | inbound SPI numbers because the IPsec also uses the destination IP | |||
| address to index the remote peer host. However, a Data Relay Server | address to index the remote peer host. However, a Data Relay Server | |||
| can represent multiple remote peers, thus masquerading the actual | can represent multiple remote peers, thus masquerading the actual | |||
| destination. Since a Data Relay Server may have to deal with a | destination. Since a Data Relay Server may have to deal with a | |||
| multitude of Relay Clients and their peers, a Data Relay Server may | multitude of Relay Clients and their peers, a Data Relay Server may | |||
| experience collisions in the SPI namespace, thus being unable forward | experience collisions in the SPI namespace, thus being unable to | |||
| datagrams to the correct destination. Since the SPI space is 32 bits | forward datagrams to the correct destination. Since the SPI space is | |||
| and the SPI values should be random, the probability for a | 32 bits and the SPI values should be random, the probability for a | |||
| conflicting SPI value is fairly small, but could occur on a busy Data | conflicting SPI value is fairly small but could occur on a busy Data | |||
| Relay Server. The two problematic cases are described in this | Relay Server. The two problematic cases are described in this | |||
| section. | section. | |||
| In the first scenario, the SPI collision problems occurs if two hosts | In the first scenario, the SPI collision problem occurs if two hosts | |||
| have registered to the same Data Relay Server and a third host | have registered to the same Data Relay Server and a third host | |||
| initiates base exchange with both of them. Here, the two Responders | initiates base exchange with both of them. Here, the two Responders | |||
| (i.e. Data Relay Clients) claim the same inbound SPI number with the | (i.e., Data Relay Clients) claim the same inbound SPI number with the | |||
| same Initiator (peer). However, in this case, the Data Relay Server | same Initiator (peer). However, in this case, the Data Relay Server | |||
| has allocated separate UDP ports for the two Data Relay Clients | has allocated separate UDP ports for the two Data Relay Clients | |||
| acting now as Responders (as recommended in Section 6.5). When the | acting now as Responders (as recommended in Section 7.5). When the | |||
| third host sends an ESP packet, the Data Relay Server is able to | third host sends an ESP packet, the Data Relay Server is able to | |||
| forward the packet to the correct Data Relay Client because the | forward the packet to the correct Data Relay Client because the | |||
| destination UDP port is different for each of the clients. | destination UDP port is different for each of the clients. | |||
| In the second scenario, an SPI collision may occur when two | In the second scenario, an SPI collision may occur when two | |||
| Initiators run a base exchange to the same Responder (i.e. Data | Initiators run a base exchange to the same Responder (i.e., Data | |||
| Relay Client), and both of the Initiators claim the same inbound SPI | Relay Client), and both of the Initiators claim the same inbound SPI | |||
| at the Data Relay Server using PEER_PERMISSION Parameter. In this | at the Data Relay Server using the PEER_PERMISSION parameter. In | |||
| case, the Data Relay Server cannot disambiguate the correct | this case, the Data Relay Server cannot disambiguate the correct | |||
| destination of an ESP packet originating from the Data Relay Client | destination of an ESP packet originating from the Data Relay Client | |||
| because the SPI could belong to either of the peers (and destination | because the SPI could belong to either of the peers (and the | |||
| IP and UDP port belonging to the Data Relay Server are not unique | destination IP and UDP port belonging to the Data Relay Server are | |||
| either). The recommended way and a contingency plan to solve this | not unique either). The recommended way and a contingency plan to | |||
| issue are described below. | solve this issue are described below. | |||
| The recommend way to mitigate the problem is as follows. For each | The recommend way to mitigate the problem is as follows. For each | |||
| new Host Association, A Data Relay Client acting as a Responder | new HIP association, a Data Relay Client acting as a Responder SHOULD | |||
| SHOULD register a new server reflexive candidate as described in | register a new server-reflexive candidate as described in | |||
| Section 4.2. Similarly, the Data Relay Server SHOULD NOT re-use the | Section 4.2. Similarly, the Data Relay Server SHOULD NOT reuse the | |||
| port numbers as described in Section 6.5. This way, each server | port numbers as described in Section 7.5. This way, each server- | |||
| reflexive candidate for the Data Relay Client has a separate UDP port | reflexive candidate for the Data Relay Client has a separate UDP port | |||
| that the Data Relay Server can use to disambiguate packet | that the Data Relay Server can use to disambiguate packet | |||
| destinations in case of SPI collisions. | destinations in case of SPI collisions. | |||
| When the Data Relay Client is not registering or failed to register a | When the Data Relay Client is not registering or failed to register a | |||
| new relay candidate for a new peer, the Data Relay Client MUST follow | new relay candidate for a new peer, the Data Relay Client MUST follow | |||
| a contingency plan as follows. Upon receiving an I2 with a colliding | a contingency plan as follows. Upon receiving an I2 with a colliding | |||
| SPI, the Data Relay client acting as the Responder MUST NOT include | SPI, the Data Relay Client acting as the Responder MUST NOT include | |||
| the relayed address candidate in the R2 message because the Data | the relayed address candidate in the R2 message because the Data | |||
| Relay Server would not be able demultiplex the related ESP packet to | Relay Server would not be able to demultiplex the related ESP packet | |||
| the correct Initiator. The same applies also the handover | to the correct Initiator. The same also applies to the handover | |||
| procedures; the Data Relay Client MUST NOT include the relayed | procedures; the Data Relay Client MUST NOT include the relayed | |||
| address candidate when sending its new locator set in an UPDATE to | address candidate when sending its new locator set in an UPDATE to | |||
| its peer if it would cause a SPI conflict with another peer. | its peer if it would cause an SPI conflict with another peer. | |||
| 5. Packet Formats | 5. Packet Formats | |||
| The following subsections define the parameter and packet encodings | The following subsections define the parameter and packet encodings | |||
| for the HIP and ESP packets. All values MUST be in network byte | for the HIP and ESP packets. All values MUST be in network byte | |||
| order. | order. | |||
| It is worth noting that all of the parameters are shown for the sake | It is worth noting that all of the parameters are shown for the sake | |||
| of completeness even though they are specified already in Legacy ICE- | of completeness even though they are specified already in Legacy ICE- | |||
| HIP [RFC5770]. New parameters are explicitly described as new. | HIP [RFC5770]. New parameters are explicitly described as new. | |||
| skipping to change at page 38, line 49 ¶ | skipping to change at line 1782 ¶ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Length | Checksum | | | Length | Checksum | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | 32 bits of zeroes | | | 32 bits of zeroes | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| ~ HIP Header and Parameters ~ | ~ HIP Header and Parameters ~ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 7: Format of UDP-Encapsulated HIP Control Packets | Figure 7: Format of UDP-Encapsulated HIP Control Packets | |||
| HIP control packets are encapsulated in UDP packets as defined in | HIP control packets are encapsulated in UDP packets as defined in | |||
| Section 2.2 of [RFC3948], "IKE Header Format for Port 4500", except | Section 2.2 of [RFC3948], "IKE Header Format for Port 4500", except | |||
| that a different port number is used. Figure 7 illustrates the | that a different port number is used. Figure 7 illustrates the | |||
| encapsulation. The UDP header is followed by 32 zero bits that can | encapsulation. The UDP header is followed by 32 zero bits that can | |||
| be used to differentiate HIP control packets from ESP packets. The | be used to differentiate HIP control packets from ESP packets. The | |||
| HIP header and parameters follow the conventions of [RFC7401] with | HIP header and parameters follow the conventions of [RFC7401] with | |||
| the exception that the HIP header checksum MUST be zero. The HIP | the exception that the HIP header checksum MUST be zero. The HIP | |||
| header checksum is zero for two reasons. First, the UDP header | header checksum is zero for two reasons. First, the UDP header | |||
| already contains a checksum. Second, the checksum definition in | already contains a checksum. Second, the checksum definition in | |||
| [RFC7401] includes the IP addresses in the checksum calculation. The | [RFC7401] includes the IP addresses in the checksum calculation. The | |||
| NATs that are unaware of HIP cannot recompute the HIP checksum after | NATs that are unaware of HIP cannot recompute the HIP checksum after | |||
| changing IP addresses. | changing IP addresses. | |||
| A Control/Data Relay Server or a non-relay Responder SHOULD listen at | A Control/Data Relay Server or a non-relay Responder SHOULD listen at | |||
| UDP port 10500 for incoming UDP-encapsulated HIP control packets. If | UDP port 10500 for incoming UDP-encapsulated HIP control packets. If | |||
| some other port number is used, it needs to be known by potential | some other port number is used, it needs to be known by potential | |||
| Initiators. | Initiators. | |||
| UDP encapsulation of HIP packets reduces the Maximum Transfer Unit | UDP encapsulation of HIP packets reduces the Maximum Transmission | |||
| (MTU) size of the control plane by 12 bytes (8-byte UDP header plus | Unit (MTU) size of the control plane by 12 bytes (8-byte UDP header | |||
| 4-byte zero SPI marker), and the data plane by 8 bytes. Additional | plus 4-byte zero SPI marker), and the data plane by 8 bytes. | |||
| HIP relay parameters, such as RELAY_HMAC, RELAY_UDP_HIP, | Additional HIP relay parameters, such as RELAY_HMAC, RELAY_UDP_HIP, | |||
| RELAY_UDP_ESP, etc., further increase the size of certain HIP | RELAY_UDP_ESP, etc., further increase the size of certain HIP | |||
| packets. In regard to MTU, the following aspects need to be | packets. In regard to MTU, the following aspects need to be | |||
| considered in an implementation: | considered in an implementation: | |||
| o A HIP host SHOULD implement ICMP message handling to support path | * A HIP host SHOULD implement ICMP message handling to support Path | |||
| MTU discovery (PMTUD) discovery as described in [RFC1063] | MTU Discovery (PMTUD) as described in [RFC1191] and [RFC8201]. | |||
| [RFC8201] | ||||
| o Reliance on IP fragmentation is unlikely to be a viable strategy | * Reliance on IP fragmentation is unlikely to be a viable strategy | |||
| through NATs. If ICMP MTU discovery is not working, MTU related | through NATs. If ICMP MTU discovery is not working, MTU-related | |||
| path black holes may occur. | path black holes may occur. | |||
| o A mitigation strategy is to constrain the MTU, especially for | * A mitigation strategy is to constrain the MTU, especially for | |||
| virtual interfaces, to expected safe MTU values, e.g., 1400 bytes | virtual interfaces, to expected safe MTU values, e.g., 1400 bytes | |||
| for the underlying interfaces that support 1500 bytes MTU. | for the underlying interfaces that support 1500 bytes MTU. | |||
| o Further extensions to this specification may define a HIP-based | * Further extensions to this specification may define a HIP-based | |||
| mechanism to find a working path MTU without unnecessary | mechanism to find a working path MTU without unnecessary | |||
| constraining that size using Packetization Layer Path MTU | constraining that size using Packetization Layer Path MTU | |||
| Discovery for Datagram Transports | Discovery for Datagram Transports [RFC8899]. For instance, such a | |||
| [I-D.ietf-tsvwg-datagram-plpmtud]. For instance, such mechanism | mechanism could be implemented between a HIP Relay Client and HIP | |||
| could be implemented between a HIP Relay Client and HIP Relay | Relay Server. | |||
| Server. | ||||
| o It is worth noting that further HIP extensions can trim off 8 | * It is worth noting that further HIP extensions can trim off 8 | |||
| bytes in the ESP header by negotiating implicit IV support in the | bytes in the ESP header by negotiating implicit initialization | |||
| ESP_TRANSFORM parameter as described in [RFC8750]. | vector (IV) support in the ESP_TRANSFORM parameter as described in | |||
| [RFC8750]. | ||||
| 5.2. Connectivity Checks | 5.2. Connectivity Checks | |||
| HIP connectivity checks are HIP UPDATE packets. The format is | HIP connectivity checks are HIP UPDATE packets. The format is | |||
| specified in [RFC7401]. | specified in [RFC7401]. | |||
| 5.3. Keepalives | 5.3. Keepalives | |||
| The RECOMMENDED encoding format for keepalives is HIP NOTIFY packets | The RECOMMENDED encoding format for keepalives is HIP NOTIFY packets | |||
| as specified in [RFC7401] with Notify message type field set to | as specified in [RFC7401] with the Notify message type field set to | |||
| NAT_KEEPALIVE [TBD by IANA: 16385] and with an empty Notification | NAT_KEEPALIVE (16385) and with an empty Notification data field. It | |||
| data field. It is worth noting that sending of such a HIP NOTIFY | is worth noting that the sending of such a HIP NOTIFY message SHOULD | |||
| message SHOULD be omitted if the host is actively (or passively) | be omitted if the host is sending some other traffic (HIP or ESP) to | |||
| sending some other traffic (HIP or ESP) to the peer host over the | the peer host over the related UDP tunnel during the Tr period. For | |||
| related UDP tunnel during the Tr period. For instance, the host MAY | instance, the host MAY actively send ICMPv6 requests (or respond with | |||
| actively send ICMPv6 requests (or respond with an ICMPv6 response) | an ICMPv6 response) inside the ESP tunnel to test the health of the | |||
| inside the ESP tunnel to test the health of the associated IPsec | associated IPsec security association. Alternatively, the host MAY | |||
| security association. Alternatively, the host MAY use UPDATE packets | use UPDATE packets as a substitute. A minimal UPDATE packet would | |||
| as a substitute. A minimal UPDATE packet would consist of a SEQ and | consist of a SEQ and a single ECHO_REQ_SIGN parameter, and a more | |||
| ECHO_REQ_SIGN parameters, and a more complex would involve rekeying | complex one would involve rekeying procedures as specified in | |||
| procedures as specified in section 6.8 in [RFC7402]. It is worth | Section 6.8 of [RFC7402]. It is worth noting that a host actively | |||
| noting that a host actively sending periodic UPDATE packets to a busy | sending periodic UPDATE packets to a busy server may increase the | |||
| server may increase the computational load of the server since it has | computational load of the server since it has to verify HMACs and | |||
| to verify HMACs and signatures in UPDATE messages. | signatures in UPDATE messages. | |||
| 5.4. NAT Traversal Mode Parameter | 5.4. NAT Traversal Mode Parameter | |||
| The format of NAT traversal mode parameter is defined in Legacy ICE- | The format of the NAT traversal mode parameter is defined in Legacy | |||
| HIP [RFC5770] but repeated here for completeness. The format of the | ICE-HIP [RFC5770] but repeated here for completeness. The format of | |||
| NAT_TRAVERSAL_MODE parameter is similar to the format of the | the NAT_TRAVERSAL_MODE parameter is similar to the format of the | |||
| ESP_TRANSFORM parameter in [RFC7402] and is shown in Figure 8. The | ESP_TRANSFORM parameter in [RFC7402] and is shown in Figure 8. The | |||
| Native ICE-HIP extension specified in this document defines the new | Native ICE-HIP extension specified in this document defines the new | |||
| NAT traversal mode identifier for ICE-HIP-UDP and reuses the UDP- | NAT traversal mode identifier for ICE-HIP-UDP and reuses the UDP- | |||
| ENCAPSULATION mode from Legacy ICE-HIP [RFC5770]. The identifier | ENCAPSULATION mode from Legacy ICE-HIP [RFC5770]. The identifier | |||
| named RESERVED is reserved for future use. Future specifications may | named RESERVED is reserved for future use. Future specifications may | |||
| define more traversal modes. | define more traversal modes. | |||
| 0 1 2 3 | 0 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Reserved | Mode ID #1 | | | Reserved | Mode ID #1 | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Mode ID #2 | Mode ID #3 | | | Mode ID #2 | Mode ID #3 | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Mode ID #n | Padding | | | Mode ID #n | Padding | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type 608 | Figure 8: Format of the NAT_TRAVERSAL_MODE Parameter | |||
| Length length in octets, excluding Type, Length, and padding | ||||
| Reserved zero when sent, ignored when received | ||||
| Mode ID defines the proposed or selected NAT traversal mode(s) | ||||
| The following NAT traversal mode IDs are defined: | Type: 608 | |||
| ID name Value | Length: Length in octets, excluding Type, Length, and Padding | |||
| RESERVED 0 | ||||
| UDP-ENCAPSULATION 1 | ||||
| ICE-STUN-UDP 2 | ||||
| ICE-HIP-UDP 3 | ||||
| Figure 8: Format of the NAT_TRAVERSAL_MODE Parameter | Reserved: Zero when sent, ignored when received | |||
| Mode ID: Defines the proposed or selected NAT traversal mode(s) | ||||
| The following NAT traversal mode IDs are defined: | ||||
| +===================+=======+ | ||||
| | ID name | Value | | ||||
| +===================+=======+ | ||||
| | RESERVED | 0 | | ||||
| +-------------------+-------+ | ||||
| | UDP-ENCAPSULATION | 1 | | ||||
| +-------------------+-------+ | ||||
| | ICE-STUN-UDP | 2 | | ||||
| +-------------------+-------+ | ||||
| | ICE-HIP-UDP | 3 | | ||||
| +-------------------+-------+ | ||||
| Table 1: NAT Traversal | ||||
| Mode IDs | ||||
| The sender of a NAT_TRAVERSAL_MODE parameter MUST make sure that | The sender of a NAT_TRAVERSAL_MODE parameter MUST make sure that | |||
| there are no more than six (6) Mode IDs in one NAT_TRAVERSAL_MODE | there are no more than six (6) Mode IDs in one NAT_TRAVERSAL_MODE | |||
| parameter. Conversely, a recipient MUST be prepared to handle | parameter. Conversely, a recipient MUST be prepared to handle | |||
| received NAT traversal mode parameters that contain more than six | received NAT traversal mode parameters that contain more than six | |||
| Mode IDs by accepting the first six Mode IDs and dropping the rest. | Mode IDs by accepting the first six Mode IDs and dropping the rest. | |||
| The limited number of Mode IDs sets the maximum size of the | The limited number of Mode IDs sets the maximum size of the | |||
| NAT_TRAVERSAL_MODE parameter. The modes MUST be in preference order, | NAT_TRAVERSAL_MODE parameter. The modes MUST be in preference order, | |||
| most preferred mode(s) first. | most preferred mode(s) first. | |||
| Implementations conforming to this specification MUST implement UDP- | Implementations conforming to this specification MUST implement UDP- | |||
| ENCAPSULATION and SHOULD implement ICE-HIP-UDP modes. | ENCAPSULATION and SHOULD implement ICE-HIP-UDP modes. | |||
| 5.5. Connectivity Check Transaction Pacing Parameter | 5.5. Connectivity Check Transaction Pacing Parameter | |||
| The TRANSACTION_PACING is defined in [RFC5770], but repeated in | The TRANSACTION_PACING parameter is defined in [RFC5770] but repeated | |||
| Figure 9 for completeness. It contains only the connectivity check | in Figure 9 for completeness. It contains only the connectivity | |||
| pacing value, expressed in milliseconds, as a 32-bit unsigned | check pacing value, expressed in milliseconds, as a 32-bit unsigned | |||
| integer. | integer. | |||
| 0 1 2 3 | 0 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Min Ta | | | Min Ta | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type 610 | Figure 9: Format of the TRANSACTION_PACING Parameter | |||
| Length 4 | ||||
| Min Ta the minimum connectivity check transaction pacing | ||||
| value the host would use (in milliseconds) | ||||
| Figure 9: Format of the TRANSACTION_PACING Parameter | Type: 610 | |||
| Length: 4 | ||||
| Min Ta: The minimum connectivity check transaction pacing value | ||||
| the host would use (in milliseconds) | ||||
| 5.6. Relay and Registration Parameters | 5.6. Relay and Registration Parameters | |||
| The format of the REG_FROM, RELAY_FROM, and RELAY_TO parameters is | The format of the REG_FROM, RELAY_FROM, and RELAY_TO parameters is | |||
| shown in Figure 10. All parameters are identical except for the | shown in Figure 10. All parameters are identical except for the | |||
| type. Of the three, only REG_FROM is covered by the signature. | type. Of the three, only REG_FROM is covered by the signature. | |||
| 0 1 2 3 | 0 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Port | Protocol | Reserved | | | Port | Protocol | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | Address | | | Address | | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type REG_FROM: 950 | ||||
| RELAY_FROM: 63998 | ||||
| RELAY_TO: 64002 | ||||
| Length 20 | ||||
| Port transport port number; zero when plain IP is used | ||||
| Protocol IANA assigned, Internet Protocol number. | ||||
| 17 for UDP, 0 for plain IP | ||||
| Reserved reserved for future use; zero when sent, ignored | ||||
| when received | ||||
| Address an IPv6 address or an IPv4 address in "IPv4-Mapped | ||||
| IPv6 address" format | ||||
| Figure 10: Format of the REG_FROM, RELAY_FROM, and RELAY_TO | Figure 10: Format of the REG_FROM, RELAY_FROM, and RELAY_TO | |||
| Parameters | Parameters | |||
| Type: REG_FROM: 950 | ||||
| RELAY_FROM: 63998 | ||||
| RELAY_TO: 64002 | ||||
| Length: 20 | ||||
| Port: Transport port number; zero when plain IP is used | ||||
| Protocol: IANA-assigned, Internet Protocol number. 17 for UDP; 0 | ||||
| for plain IP | ||||
| Reserved: Reserved for future use; zero when sent, ignored when | ||||
| received | ||||
| Address: An IPv6 address or an IPv4 address in "IPv4-mapped IPv6 | ||||
| address" format | ||||
| REG_FROM contains the transport address and protocol from which the | REG_FROM contains the transport address and protocol from which the | |||
| Control Relay Server sees the registration coming. RELAY_FROM | Control Relay Server sees the registration coming. RELAY_FROM | |||
| contains the address from which the relayed packet was received by | contains the address from which the relayed packet was received by | |||
| the Control Relay Server and the protocol that was used. RELAY_TO | the Control Relay Server and the protocol that was used. RELAY_TO | |||
| contains the same information about the address to which a packet | contains the same information about the address to which a packet | |||
| should be forwarded. | should be forwarded. | |||
| 5.7. LOCATOR_SET Parameter | 5.7. LOCATOR_SET Parameter | |||
| skipping to change at page 43, line 52 ¶ | skipping to change at line 2030 ¶ | |||
| | Priority | | | Priority | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | SPI | | | SPI | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Address | | | Address | | |||
| | | | | | | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 11: LOCATOR_SET Parameter | Figure 11: LOCATOR_SET Parameter | |||
| The individual fields in the LOCATOR_SET parameter are described in | The individual fields in the LOCATOR_SET parameter are described in | |||
| Table 1. | Table 2. | |||
| +-----------+----------+--------------------------------------------+ | +===========+==========+=========================================+ | |||
| | Field | Value(s) | Purpose | | | Field | Value(s) | Purpose | | |||
| +-----------+----------+--------------------------------------------+ | +===========+==========+=========================================+ | |||
| | Type | 193 | Parameter type | | | Type | 193 | Parameter type | | |||
| | Length | Variable | Length in octets, excluding Type and | | +-----------+----------+-----------------------------------------+ | |||
| | | | Length fields and padding | | | Length | Variable | Length in octets, excluding Type and | | |||
| | Traffic | 0-2 | Is the locator for HIP signaling (1), for | | | | | Length fields and padding | | |||
| | Type | | ESP (2), or for both (0) | | +-----------+----------+-----------------------------------------+ | |||
| | Locator | 2 | "Transport address" locator type | | | Traffic | 0-2 | The locator for either HIP signaling | | |||
| | Type | | | | | Type | | (1) or ESP (2), or for both (0) | | |||
| | Locator | 7 | Length of the fields after Locator | | +-----------+----------+-----------------------------------------+ | |||
| | Length | | Lifetime in 4-octet units | | | Locator | 2 | "Transport address" locator type | | |||
| | Reserved | 0 | Reserved for future extensions | | | Type | | | | |||
| | Preferred | 0 or 1 | Set to 1 for a Locator in R1 if the | | +-----------+----------+-----------------------------------------+ | |||
| | (P) bit | | Responder can use it for the rest of the | | | Locator | 7 | Length of the fields after Locator | | |||
| | | | base exchange, otherwise set to zero | | | Length | | Lifetime in 4-octet units | | |||
| | Locator | Variable | Locator lifetime in seconds, see Section 4 | | +-----------+----------+-----------------------------------------+ | |||
| | Lifetime | | in [RFC8046] | | | Reserved | 0 | Reserved for future extensions | | |||
| | Transport | Variable | Transport layer port number | | +-----------+----------+-----------------------------------------+ | |||
| | Port | | | | | Preferred | 0 or 1 | Set to 1 for a Locator in R1 if the | | |||
| | Transport | Variable | IANA assigned, transport layer Internet | | | (P) bit | | Responder can use it for the rest of | | |||
| | Protocol | | Protocol number. Currently only UDP (17) | | | | | the base exchange, otherwise set to | | |||
| | | | is supported. | | | | | zero | | |||
| | Kind | Variable | 0 for host, 1 for server reflexive, 2 for | | +-----------+----------+-----------------------------------------+ | |||
| | | | peer reflexive (currently unused) or 3 for | | | Locator | Variable | Locator lifetime in seconds, see | | |||
| | | | relayed address | | | Lifetime | | Section 4 of [RFC8046] | | |||
| | Priority | Variable | Locator's priority as described in | | +-----------+----------+-----------------------------------------+ | |||
| | | | [RFC8445]. It is worth noting that while | | | Transport | Variable | Transport-layer port number | | |||
| | | | the priority of a single locator candidate | | | Port | | | | |||
| | | | is 32-bits, but an implementation should | | +-----------+----------+-----------------------------------------+ | |||
| | | | use a 64-bit integer to calculate the | | | Transport | Variable | IANA-assigned, transport-layer Internet | | |||
| | | | priority of a candidate pair for the ICE | | | Protocol | | Protocol number. Currently, only UDP | | |||
| | | | priority algorithm. | | | | | (17) is supported. | | |||
| | SPI | Variable | Security Parameter Index (SPI) value that | | +-----------+----------+-----------------------------------------+ | |||
| | | | the host expects to see in incoming ESP | | | Kind | Variable | 0 for host, 1 for server reflexive, 2 | | |||
| | | | packets that use this locator | | | | | for peer reflexive (currently unused), | | |||
| | Address | Variable | IPv6 address or an "IPv4-Mapped IPv6 | | | | | or 3 for relayed address | | |||
| | | | address" format IPv4 address [RFC4291] | | +-----------+----------+-----------------------------------------+ | |||
| +-----------+----------+--------------------------------------------+ | | Priority | Variable | Locator's priority as described in | | |||
| | | | [RFC8445]. It is worth noting that | | ||||
| | | | while the priority of a single locator | | ||||
| | | | candidate is 32 bits, an implementation | | ||||
| | | | should a 64-bit integer to calculate | | ||||
| | | | the priority of a candidate pair for | | ||||
| | | | the ICE priority algorithm. | | ||||
| +-----------+----------+-----------------------------------------+ | ||||
| | SPI | Variable | Security Parameter Index (SPI) value | | ||||
| | | | that the host expects to see in | | ||||
| | | | incoming ESP packets that use this | | ||||
| | | | locator | | ||||
| +-----------+----------+-----------------------------------------+ | ||||
| | Address | Variable | IPv6 address or an "IPv4-mapped IPv6 | | ||||
| | | | address" format IPv4 address [RFC4291] | | ||||
| +-----------+----------+-----------------------------------------+ | ||||
| Table 1: Fields of the LOCATOR_SET Parameter | Table 2: Fields of the LOCATOR_SET Parameter | |||
| The LOCATOR parameter MUST be encapsulated inside an ENCRYPTED | The LOCATOR parameter MUST be encapsulated inside an ENCRYPTED | |||
| parameter. | parameter. | |||
| 5.8. RELAY_HMAC Parameter | 5.8. RELAY_HMAC Parameter | |||
| As specified in Legacy ICE-HIP [RFC5770], the RELAY_HMAC parameter | As specified in Legacy ICE-HIP [RFC5770], the RELAY_HMAC parameter | |||
| value has the TLV type 65520. It has the same semantics as RVS_HMAC | value has the TLV type 65520. It has the same semantics as RVS_HMAC | |||
| as specified in section 4.2.1 in [RFC8004]. Similarly as with | as specified in Section 4.2.1 of [RFC8004]. Similar to RVS_HMAC, | |||
| RVS_HMAC, also RELAY_HMAC is keyed with the HIP integrity key (HIP-lg | RELAY_HMAC is also keyed with the HIP integrity key (HIP-lg or HIP-gl | |||
| or HIP-gl as specified in section 6.5 in [RFC7401]), established | as specified in Section 6.5 of [RFC7401]), established during the | |||
| during the relay registration procedure as described in Section 4.1. | relay registration procedure as described in Section 4.1. | |||
| 5.9. Registration Types | 5.9. Registration Types | |||
| The REG_INFO, REG_REQ, REG_RESP, and REG_FAILED parameters contain | The REG_INFO, REG_REQ, REG_RESP, and REG_FAILED parameters contain | |||
| Registration Type [RFC8003] values for Control Relay Server | Registration Type [RFC8003] values for Control Relay Server | |||
| registration. The value for RELAY_UDP_HIP is 2 as specified in | registration. The value for RELAY_UDP_HIP is 2 as specified in | |||
| Legacy ICE-HIP [RFC5770]. The value for RELAY_UDP_ESP is (value [TBD | Legacy ICE-HIP [RFC5770]. The value for RELAY_UDP_ESP is 3. | |||
| by IANA: 3]). | ||||
| 5.10. Notify Packet Types | 5.10. Notify Packet Types | |||
| A Control/Data Relay Server and end-hosts can use NOTIFY packets to | A Control/Data Relay Server and end hosts can use NOTIFY packets to | |||
| signal different error conditions. The NOTIFY packet types are the | signal different error conditions. The NOTIFY packet types are the | |||
| same as in Legacy ICE-HIP [RFC5770] except for the two last ones, | same as in Legacy ICE-HIP [RFC5770] except for the two last ones, | |||
| which are new. | which are new. | |||
| The Notify Packet Types [RFC7401] are shown below. The Notification | The Notify Packet Types [RFC7401] are shown below. The Notification | |||
| Data field for the error notifications SHOULD contain the HIP header | Data field for the error notifications SHOULD contain the HIP header | |||
| of the rejected packet and SHOULD be empty for the | of the rejected packet and SHOULD be empty for the | |||
| CONNECTIVITY_CHECKS_FAILED type. | CONNECTIVITY_CHECKS_FAILED type. | |||
| NOTIFICATION PARAMETER - ERROR TYPES Value | +=====================================================+=======+ | |||
| ------------------------------------ ----- | | NOTIFICATION PARAMETER - ERROR TYPES | Value | | |||
| +=====================================================+=======+ | ||||
| NO_VALID_NAT_TRAVERSAL_MODE_PARAMETER 60 | | NO_VALID_NAT_TRAVERSAL_MODE_PARAMETER | 60 | | |||
| | | | | ||||
| If a Control Relay Server does not forward a base exchange packet | | If a Control Relay Server does not forward a base | | | |||
| due to missing NAT traversal mode parameter, or the Initiator | | exchange packet due to a missing NAT traversal mode | | | |||
| selects a NAT traversal mode that the (non-relay) Responder did | | parameter, or the Initiator selects a NAT traversal | | | |||
| not expect, the Control Relay Server or the Responder may send | | mode that the (non-relay) Responder did not expect, | | | |||
| back a NOTIFY error packet with this type. | | the Control Relay Server or the Responder may send | | | |||
| | back a NOTIFY error packet with this type. | | | ||||
| CONNECTIVITY_CHECKS_FAILED 61 | +-----------------------------------------------------+-------+ | |||
| | CONNECTIVITY_CHECKS_FAILED | 61 | | ||||
| Used by the end-hosts to signal that NAT traversal connectivity | | | | | |||
| checks failed and did not produce a working path. | | Used by the end hosts to signal that NAT traversal | | | |||
| | connectivity checks failed and did not produce a | | | ||||
| MESSAGE_NOT_RELAYED 62 | | working path. | | | |||
| Used by a Control Relay Server to signal that is was not able or | +-----------------------------------------------------+-------+ | |||
| willing to relay a HIP packet. | | MESSAGE_NOT_RELAYED | 62 | | |||
| | | | | ||||
| SERVER_REFLEXIVE_CANDIDATE_ALLOCATION_FAILED 63 | | Used by a Control Relay Server to signal that it | | | |||
| | was not able or willing to relay a HIP packet. | | | ||||
| Used by a Data Relay Server to signal that is was not able or | +-----------------------------------------------------+-------+ | |||
| willing to allocate a new server reflexive candidate for the Data | | SERVER_REFLEXIVE_CANDIDATE_ALLOCATION_FAILED | 63 | | |||
| Relay Client | | | | | |||
| | Used by a Data Relay Server to signal that it was | | | ||||
| RVS_HMAC_PROHIBITED_WITH_RELAY 64 | | not able or willing to allocate a new server- | | | |||
| | reflexive candidate for the Data Relay Client. | | | ||||
| +-----------------------------------------------------+-------+ | ||||
| | RVS_HMAC_PROHIBITED_WITH_RELAY | 64 | | ||||
| | | | | ||||
| | In the unintended event that a Control Relay Server | | | ||||
| | sends any HIP message with an RVS_HMAC parameter, | | | ||||
| | the Control Relay Client drops the received HIP | | | ||||
| | message and sends a notify message back to the | | | ||||
| | Control Relay Server using this notify type. | | | ||||
| +-----------------------------------------------------+-------+ | ||||
| In the unintended event that a Control Relay Server sends any HIP | Table 3: Notify Packet Types | |||
| message with a RVS_HMAC parameter, the Control Relay Client drops | ||||
| the received HIP message and sends a notify message back to the | ||||
| Control Relay Server using this notify type | ||||
| 5.11. ESP Data Packets | 5.11. ESP Data Packets | |||
| The format for ESP data packets is identical to Legacy ICE-HIP | The format for ESP data packets is identical to Legacy ICE-HIP | |||
| [RFC5770]. | [RFC5770]. | |||
| [RFC3948] describes the UDP encapsulation of the IPsec ESP transport | [RFC3948] describes the UDP encapsulation of the IPsec ESP transport | |||
| and tunnel mode. On the wire, the HIP ESP packets do not differ from | and tunnel mode. On the wire, the HIP ESP packets do not differ from | |||
| the transport mode ESP, and thus the encapsulation of the HIP ESP | the transport mode ESP; thus, the encapsulation of the HIP ESP | |||
| packets is same as the UDP encapsulation transport mode ESP. | packets is same as the UDP encapsulation transport mode ESP. | |||
| However, the (semantic) difference to Bound End-to-End Tunnel (BEET) | However, the (semantic) difference to Bound End-to-End Tunnel (BEET) | |||
| mode ESP packets used by HIP is that IP header is not used in BEET | mode ESP packets used by HIP is that the IP header is not used in | |||
| integrity protection calculation. | BEET integrity protection calculation. | |||
| During the HIP base exchange, the two peers exchange parameters that | During the HIP base exchange, the two peers exchange parameters that | |||
| enable them to define a pair of IPsec ESP security associations (SAs) | enable them to define a pair of IPsec ESP security associations (SAs) | |||
| as described in [RFC7402]. When two peers perform a UDP-encapsulated | as described in [RFC7402]. When two peers perform a UDP-encapsulated | |||
| base exchange, they MUST define a pair of IPsec SAs that produces | base exchange, they MUST define a pair of IPsec SAs that produces | |||
| UDP-encapsulated ESP data traffic. | UDP-encapsulated ESP data traffic. | |||
| The management of encryption/authentication protocols and SPIs is | The management of encryption/authentication protocols and SPIs is | |||
| defined in [RFC7402]. The UDP encapsulation format and processing of | defined in [RFC7402]. The UDP encapsulation format and processing of | |||
| HIP ESP traffic is described in Section 6.1 of [RFC7402]. | HIP ESP traffic is described in Section 6.1 of [RFC7402]. | |||
| 5.12. RELAYED_ADDRESS and MAPPED_ADDRESS Parameters | 5.12. RELAYED_ADDRESS and MAPPED_ADDRESS Parameters | |||
| While the type values are new, the format of the RELAYED_ADDRESS and | While the type values are new, the format of the RELAYED_ADDRESS and | |||
| MAPPED_ADDRESS parameters (Figure 12) is identical to REG_FROM, | MAPPED_ADDRESS parameters (Figure 12) is identical to REG_FROM, | |||
| RELAY_FROM and RELAY_TO parameters. This document specifies only the | RELAY_FROM, and RELAY_TO parameters. This document specifies only | |||
| use of UDP relaying, and, thus, only protocol 17 is allowed. | the use of UDP relaying; thus, only protocol 17 is allowed. However, | |||
| However, future documents may specify support for other protocols. | future documents may specify support for other protocols. | |||
| 0 1 2 3 | 0 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Port | Protocol | Reserved | | | Port | Protocol | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | Address | | | Address | | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type [TBD by IANA; | ||||
| RELAYED_ADDRESS: 4650 | ||||
| MAPPED_ADDRESS: 4660] | ||||
| Length 20 | ||||
| Port the UDP port number | ||||
| Protocol IANA assigned, Internet Protocol number (17 for UDP) | ||||
| Reserved reserved for future use; zero when sent, ignored | ||||
| when received | ||||
| Address an IPv6 address or an IPv4 address in "IPv4-Mapped | ||||
| IPv6 address" format | ||||
| Figure 12: Format of the RELAYED_ADDRESS and MAPPED_ADDRESS | Figure 12: Format of the RELAYED_ADDRESS and MAPPED_ADDRESS | |||
| Parameters | Parameters | |||
| Type: RELAYED_ADDRESS: 4650 | ||||
| MAPPED_ADDRESS: 4660 | ||||
| Length: 20 | ||||
| Port: The UDP port number | ||||
| Protocol: IANA-assigned, Internet Protocol number (17 for UDP) | ||||
| Reserved: Reserved for future use; zero when sent, ignored when | ||||
| received | ||||
| Address: An IPv6 address or an IPv4 address in "IPv4-mapped IPv6 | ||||
| address" format | ||||
| 5.13. PEER_PERMISSION Parameter | 5.13. PEER_PERMISSION Parameter | |||
| The format of the new PEER_PERMISSION parameter is shown in | The format of the new PEER_PERMISSION parameter is shown in | |||
| Figure 13. The parameter is used for setting up and refreshing | Figure 13. The parameter is used for setting up and refreshing | |||
| forwarding rules and the permissions for data packets at the Data | forwarding rules and the permissions for data packets at the Data | |||
| Relay Server. The parameter contains one or more sets of Port, | Relay Server. The parameter contains one or more sets of Port, | |||
| Protocol, Address, Outbound SPI (OSPI), and Inbound SPI (ISPI) | Protocol, Address, Outbound SPI (OSPI), and Inbound SPI (ISPI) | |||
| values. One set defines a rule for one peer address. | values. One set defines a rule for one peer address. | |||
| 0 1 2 3 | 0 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | RPort | PPort | | | RPort | PPort | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Protocol | Reserved | | | Protocol | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | RAddress | | | RAddress | | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | PAddress | | | PAddress | | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | OSPI | | | OSPI | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | ISPI | | | ISPI | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type [TBD by IANA; 4680] | Figure 13: Format of the PEER_PERMISSION Parameter | |||
| Length 48 | ||||
| RPort the transport layer (UDP) port at the Data Relay Server | ||||
| (i.e. the port of the server reflexive candidate) | ||||
| PPort the transport layer (UDP) port number of the peer | ||||
| Protocol IANA assigned, Internet Protocol number (17 for UDP) | ||||
| Reserved reserved for future use; zero when sent, ignored | ||||
| when received | ||||
| RAddress an IPv6 address, or an IPv4 address in "IPv4-Mapped | ||||
| IPv6 address" format, of the server reflexive candidate | ||||
| PAddress an IPv6 address, or an IPv4 address in "IPv4-Mapped | ||||
| IPv6 address" format, of the peer | ||||
| OSPI the outbound SPI value the Data Relay Client is using for | ||||
| the peer | ||||
| ISPI the inbound SPI value the Data Relay Client is using for | ||||
| the peer | ||||
| Figure 13: Format of the PEER_PERMISSION Parameter | Type: 4680 | |||
| Length: 48 | ||||
| RPort: The transport-layer (UDP) port at the Data Relay Server | ||||
| (i.e., the port of the server-reflexive candidate) | ||||
| PPort: The transport-layer (UDP) port number of the peer | ||||
| Protocol: IANA-assigned, Internet Protocol number (17 for UDP) | ||||
| Reserved: Reserved for future use; zero when sent, ignored when | ||||
| received | ||||
| RAddress: An IPv6 address, or an IPv4 address in "IPv4-mapped IPv6 | ||||
| address" format, of the server-reflexive candidate | ||||
| PAddress: An IPv6 address, or an IPv4 address in "IPv4-mapped IPv6 | ||||
| address" format, of the peer | ||||
| OSPI: The outbound SPI value the Data Relay Client is using for | ||||
| the peer | ||||
| ISPI: The inbound SPI value the Data Relay Client is using for | ||||
| the peer | ||||
| 5.14. HIP Connectivity Check Packets | 5.14. HIP Connectivity Check Packets | |||
| The connectivity request messages are HIP UPDATE packets containing a | The connectivity request messages are HIP UPDATE packets containing a | |||
| new CANDIDATE_PRIORITY parameter (Figure 14). Response UPDATE | new CANDIDATE_PRIORITY parameter (Figure 14). Response UPDATE | |||
| packets contain a MAPPED_ADDRESS parameter (Figure 12). | packets contain a MAPPED_ADDRESS parameter (Figure 12). | |||
| 0 1 2 3 | 0 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Priority | | | Priority | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type [TBD by IANA; 4700] | ||||
| Length 4 | ||||
| Priority the priority of a (potential) peer reflexive candidate | ||||
| Figure 14: Format of the CANDIDATE_PRIORITY Parameter | Figure 14: Format of the CANDIDATE_PRIORITY Parameter | |||
| 5.15. NOMINATE parameter | Type: 4700 | |||
| Length: 4 | ||||
| Priority: The priority of a (potential) peer-reflexive candidate | ||||
| 5.15. NOMINATE Parameter | ||||
| Figure 15 shows the NOMINATE parameter that is used to conclude the | Figure 15 shows the NOMINATE parameter that is used to conclude the | |||
| candidate nomination process. | candidate nomination process. | |||
| 0 1 2 3 | 0 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Reserved | | | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type [TBD by IANA; 4710] | ||||
| Length 4 | ||||
| Reserved Reserved for future extension purposes | ||||
| Figure 15: Format of the NOMINATE Parameter | Figure 15: Format of the NOMINATE Parameter | |||
| 6. Security Considerations | Type: 4710 | |||
| Length: 4 | ||||
| Reserved: Reserved for future extension purposes | ||||
| 6. IAB Considerations | ||||
| The ICE specification [RFC8445] discusses "Unilateral Self-Address | ||||
| Fixing" in Section 18. This protocol is based on ICE; thus, the same | ||||
| considerations also apply here. | ||||
| 7. Security Considerations | ||||
| Since the control plane protocol and Control Relay Server are | Since the control plane protocol and Control Relay Server are | |||
| essentially the same (with some minor differences) in this document | essentially the same (with some minor differences) in this document | |||
| as in Legacy ICE-HIP [RFC5770], the same security considerations (in | as in Legacy ICE-HIP [RFC5770], the same security considerations (in | |||
| Section 6.1, Section 6.2, Section 6.3 and Section 6.4,) are still | Sections 7.1, 7.2, 7.3, and 7.4) are still valid, but are repeated | |||
| valid, but are repeated here for the sake of completeness. New | here for the sake of completeness. New security considerations | |||
| security considerations related to the new Data Relay Server are | related to the new Data Relay Server are discussed in Section 7.5, | |||
| discussed in Section 6.5, and considerations related to the new | and considerations related to the new connectivity check protocol are | |||
| connectivity check protocol are discussed in Section 6.6 and | discussed in Sections 7.6 and 7.7. | |||
| Section 6.7. | ||||
| 6.1. Privacy Considerations | 7.1. Privacy Considerations | |||
| It is also possible that end-users may not want to reveal all | It is also possible that end users may not want to reveal all | |||
| locators to each other. For example, tracking the physical location | locators to each other. For example, tracking the physical location | |||
| of a multihoming end-host may become easier if it reveals all | of a multihoming end host may become easier if it reveals all | |||
| locators to its peer during a base exchange. Also, revealing host | locators to its peer during a base exchange. Also, revealing host | |||
| addresses exposes information about the local topology that may not | addresses exposes information about the local topology that may not | |||
| be allowed in all corporate environments. For these two local policy | be allowed in all corporate environments. For these two local policy | |||
| reasons, it might be tempting exclude certain host addresses from the | reasons, it might be tempting to exclude certain host addresses from | |||
| LOCATOR_SET parameter of an end-host but this is NOT RECOMMENDED. | the LOCATOR_SET parameter of an end host, but this is NOT | |||
| For instance, such behavior creates non-optimal paths when the hosts | RECOMMENDED. For instance, such behavior creates non-optimal paths | |||
| are located behind the same NAT. Especially, this could be | when the hosts are located behind the same NAT. Especially, this | |||
| problematic with a legacy NAT that does not support routing from the | could be problematic with a legacy NAT that does not support routing | |||
| private address realm back to itself through the outer address of the | from the private address realm back to itself through the outer | |||
| NAT. This scenario is referred to as the hairpin problem [RFC5128]. | address of the NAT. This scenario is referred to as the hairpin | |||
| With such a legacy NAT, the only option left would be to use a | problem [RFC5128]. With such a legacy NAT, the only option left | |||
| relayed transport address from an Data Relay Server. | would be to use a relayed transport address from a Data Relay Server. | |||
| The use of Control and Data Relay Servers can be also useful for | The use of Control and Data Relay Servers can also be useful for | |||
| privacy purposes. For example, a privacy concerned Responder may | privacy purposes. For example, a privacy-concerned Responder may | |||
| reveal only its Control Relay Server and Relayed candidates to | reveal only its Control Relay Server and Relayed candidates to | |||
| Initiators. This partially protects the Responder against Denial-of- | Initiators. This partially protects the Responder against Denial-of- | |||
| Service (DoS) attacks by allowing the Responder to initiate new | Service (DoS) attacks by allowing the Responder to initiate new | |||
| connections even if its relays would be unavailable due to a DoS | connections even if its relays would be unavailable due to a DoS | |||
| attack. | attack. | |||
| 6.2. Opportunistic Mode | 7.2. Opportunistic Mode | |||
| In opportunistic HIP mode (cf. Section 4.1.8 in [RFC7401]), an | In opportunistic HIP mode (cf. Section 4.1.8 of [RFC7401]), an | |||
| Initiator sends an I1 with without setting the destination HIT of the | Initiator sends an I1 without setting the destination HIT of the | |||
| Responder (i.e. the Control Relay Client). A Control Relay Server | Responder (i.e., the Control Relay Client). A Control Relay Server | |||
| SHOULD have a unique IP address per Control Relay Client when the | SHOULD have a unique IP address per the Control Relay Client when the | |||
| Control Relay Server is serving more than one Control Relay Client | Control Relay Server is serving more than one Control Relay Client | |||
| and supports opportunistic mode. Otherwise, the Control Relay Server | and supports opportunistic mode. Otherwise, the Control Relay Server | |||
| cannot guarantee to deliver the I1 packet to the intended recipient. | cannot guarantee to deliver the I1 packet to the intended recipient. | |||
| Future extensions of this document may allow opportunistic mode to be | Future extensions of this document may allow opportunistic mode to be | |||
| used with non-unique IP addresses to be utilized either as a HIP- | used with non-unique IP addresses to be utilized either as a HIP- | |||
| level anycast or multicast mechanism. Both of the mentioned cases | level anycast or multicast mechanism. Both of the mentioned cases | |||
| would require a separate registration parameters that the Control | would require separate registration parameters that the Control Relay | |||
| Relay Server proposes and the Control Client Server accepts during | Server proposes and the Control Client Server accepts during | |||
| registration. | registration. | |||
| 6.3. Base Exchange Replay Protection for Control Relay Server | 7.3. Base Exchange Replay Protection for Control Relay Server | |||
| In certain scenarios, it is possible that an attacker, or two | In certain scenarios, it is possible that an attacker, or two | |||
| attackers, can replay an earlier base exchange through a Control | attackers, can replay an earlier base exchange through a Control | |||
| Relay Server by masquerading as the original Initiator and Responder. | Relay Server by masquerading as the original Initiator and Responder. | |||
| The attack does not require the attacker(s) to compromise the private | The attack does not require the attacker(s) to compromise the private | |||
| key(s) of the attacked host(s). However, for this attack to succeed, | key(s) of the attacked host(s). However, for this attack to succeed, | |||
| the legitimate Responder has to be disconnected from the Control | the legitimate Responder has to be disconnected from the Control | |||
| Relay Server. | Relay Server. | |||
| The Control Relay Server can protect itself against replay attacks by | The Control Relay Server can protect itself against replay attacks by | |||
| becoming involved in the base exchange by introducing nonces that the | becoming involved in the base exchange by introducing nonces that the | |||
| end-hosts (Initiator and Responder) are required to sign. One way to | end hosts (Initiator and Responder) are required to sign. One way to | |||
| do this is to add ECHO_REQUEST_M parameters to the R1 and I2 packets | do this is to add ECHO_REQUEST_M parameters to the R1 and I2 packets | |||
| as described in [I-D.heer-hip-middle-auth] and drop the I2 or R2 | as described in [HIP-MIDDLEBOXES] and drop the I2 or R2 packets if | |||
| packets if the corresponding ECHO_RESPONSE_M parameters are not | the corresponding ECHO_RESPONSE_M parameters are not present. | |||
| present. | ||||
| 6.4. Demultiplexing Different HIP Associations | 7.4. Demultiplexing Different HIP Associations | |||
| Section 5.1 of [RFC3948] describes a security issue for the UDP | Section 5.1 of [RFC3948] describes a security issue for the UDP | |||
| encapsulation in the standard IP tunnel mode when two hosts behind | encapsulation in the standard IP tunnel mode when two hosts behind | |||
| different NATs have the same private IP address and initiate | different NATs have the same private IP address and initiate | |||
| communication to the same Responder in the public Internet. The | communication to the same Responder in the public Internet. The | |||
| Responder cannot distinguish between two hosts, because security | Responder cannot distinguish between two hosts because security | |||
| associations are based on the same inner IP addresses. | associations are based on the same inner IP addresses. | |||
| This issue does not exist with the UDP encapsulation of HIP ESP | This issue does not exist with the UDP encapsulation of HIP ESP | |||
| transport format because the Responder uses HITs to distinguish | transport format because the Responder uses HITs to distinguish | |||
| between different Initiators. | between different Initiators. | |||
| 6.5. Reuse of Ports at the Data Relay Server | 7.5. Reuse of Ports at the Data Relay Server | |||
| If the Data Relay Server uses the same relayed address and port (as | If the Data Relay Server uses the same relayed address and port (as | |||
| conveyed in the RELAYED_ADDRESS parameter) for multiple Data Relay | conveyed in the RELAYED_ADDRESS parameter) for multiple Data Relay | |||
| Clients, it appears to all the peers, and their firewalls, that all | Clients, it appears to all the peers, and their firewalls, that all | |||
| the Data Relay Clients are at the same address. Thus, a stateful | the Data Relay Clients are at the same address. Thus, a stateful | |||
| firewall may allow packets pass from hosts that would not normally be | firewall may allow packets to pass from hosts that would not normally | |||
| able to send packets to a peer behind the firewall. Therefore, a | be able to send packets to a peer behind the firewall. Therefore, a | |||
| Data Relay Server SHOULD NOT re-use the port numbers. If port | Data Relay Server SHOULD NOT reuse the port numbers. If port numbers | |||
| numbers need to be re-used, the Data Relay Server SHOULD have a | need to be reused, the Data Relay Server SHOULD have a sufficiently | |||
| sufficiently large pool of port numbers and select ports from the | large pool of port numbers and randomly select ports from the pool to | |||
| pool randomly to decrease the chances of a Data Relay Client | decrease the chances of a Data Relay Client obtaining the same | |||
| obtaining the same address that a another host behind the same | address that another host behind the same firewall is using. | |||
| firewall is using. | ||||
| 6.6. Amplification attacks | 7.6. Amplification Attacks | |||
| A malicious host may send an invalid list of candidates to its peer | A malicious host may send an invalid list of candidates to its peer | |||
| that are used for targeting a victim host by flooding it with | that are used for targeting a victim host by flooding it with | |||
| connectivity checks. To mitigate the attack, this protocol adopts | connectivity checks. To mitigate the attack, this protocol adopts | |||
| the ICE mechanism to cap the total amount of connectivity checks as | the ICE mechanism to cap the total amount of connectivity checks as | |||
| defined in Section 4.7. | defined in Section 4.7. | |||
| 6.7. Attacks against Connectivity Checks and Candidate Gathering | 7.7. Attacks against Connectivity Checks and Candidate Gathering | |||
| Section 19.2 in [RFC8445] describes attacks against ICE connectivity | Section 19.2 of [RFC8445] describes attacks against ICE connectivity | |||
| checks. HIP bases its control plane security on Diffie-Hellman key | checks. HIP bases its control plane security on Diffie-Hellman key | |||
| exchange, public keys and Hashed Message Authentication codes, | exchange, public keys, and Hashed Message Authentication codes, | |||
| meaning that the mentioned security concerns do not apply to HIP | meaning that the mentioned security concerns do not apply to HIP | |||
| either. The mentioned section discusses also of man-in-the-middle | either. The mentioned section also discusses man-in-the-middle | |||
| replay attacks that are difficult to prevent. The connectivity | replay attacks that are difficult to prevent. The connectivity | |||
| checks in this protocol are effectively immune against replay attacks | checks in this protocol are effectively immune against replay attacks | |||
| because a connectivity request includes a random nonce that the | because a connectivity request includes a random nonce that the | |||
| recipient must sign and send back as a response. | recipient must sign and send back as a response. | |||
| Section 19.3 in [RFC8445] describes attacks on server reflexive | Section 19.3 of [RFC8445] describes attacks on server-reflexive | |||
| address gathering. Similarly here, if the DNS, a Control Relay | address gathering. Similarly here, if the DNS, a Control Relay | |||
| Server or a Data Relay Server has been compromised, not much can be | Server, or a Data Relay Server has been compromised, not much can be | |||
| done. However, the case where attacker can inject fake messages | done. However, the case where attackers can inject fake messages | |||
| (located on a shared network segment like Wifi) does not apply here. | (located on a shared network segment like Wi-Fi) does not apply here. | |||
| HIP messages are integrity and replay protected, so it is not | HIP messages are integrity and replay protected, so it is not | |||
| possible inject fake server reflexive address candidates. | possible to inject fake server-reflexive address candidates. | |||
| Section 19.4 in [RFC8445] describes attacks on relayed candidate | Section 19.4 of [RFC8445] describes attacks on relayed candidate | |||
| gathering. Similarly to ICE TURN servers, Data Relay Server require | gathering. Similarly to ICE TURN servers, a Data Relay Server | |||
| an authenticated base exchange that protects relayed address | requires an authenticated base exchange that protects relayed address | |||
| gathering against fake requests and responses. Further, replay | gathering against fake requests and responses. Further, replay | |||
| attacks are not possible because the HIP base exchange (and also | attacks are not possible because the HIP base exchange (and also | |||
| UPDATE procedure) is protected against replay attacks. | UPDATE procedure) is protected against replay attacks. | |||
| 6.8. Cross-Protocol Attacks | 7.8. Cross-Protocol Attacks | |||
| Section 4.1 explains how a Control Relay Client registers for the | Section 4.1 explains how a Control Relay Client registers for the | |||
| RELAY_UDP_HIP service from a Control Relay Server. However, the same | RELAY_UDP_HIP service from a Control Relay Server. However, the same | |||
| server may offer also Rendezvous functionality, and, thus, a client | server may also offer Rendezvous functionality; thus, a client can | |||
| can register both to a RELAY_UDP_HIP and a RENDEZVOUS (see [RFC8004]) | register both to a RELAY_UDP_HIP and a RENDEZVOUS (see [RFC8004]) | |||
| service from the same server. Potentially, this introduces a cross- | service from the same server. Potentially, this introduces a cross- | |||
| protocol attack (or actually a "cross-message" attack) because the | protocol attack (or actually a "cross-message" attack) because the | |||
| key material is the same for the Control Relay Service and Rendezvous | key material is the same for the Control Relay Service and Rendezvous | |||
| HMACs. While the problem could be avoided by deriving different keys | HMACs. While the problem could be avoided by deriving different keys | |||
| for the Control Relay Service, a more simple measure was chosen | for the Control Relay Service, a more simple measure was chosen | |||
| because the exact attack scenario was unclear. Consequently, this | because the exact attack scenario was unclear. Consequently, this | |||
| section defines a mandatory mitigation mechanism against the cross- | section defines a mandatory mitigation mechanism against the cross- | |||
| protocol attack that works by preventing the simultanous use of | protocol attack that works by preventing the simultaneous use of | |||
| Rendezvous and Control Relay Service in the context of a single HIP | Rendezvous and Control Relay Service in the context of a single HIP | |||
| Association. | Association. | |||
| The registration involves three parameters typically delivered | The registration involves three parameters typically delivered | |||
| sequentally in R1 (REG_INFO parameter), I2 (REG_REQUEST) and R2 | sequentially in R1 (REG_INFO parameter), I2 (REG_REQUEST), and R2 | |||
| (REG_RESPONSE) messages but can also be delivered in UPDATE messages | (REG_RESPONSE) messages but can also be delivered in UPDATE messages | |||
| as described in [RFC8003]. The parameters and the modifications to | as described in [RFC8003]. The parameters and the modifications to | |||
| their processing are described below: | their processing are described below: | |||
| 1. REG_INFO: the Control Relay Server advertizes its available | REG_INFO: The Control Relay Server advertises its available services | |||
| services using this parameter. RELAY_UDP_HIP and RENDEZVOUS | using this parameter. RELAY_UDP_HIP and RENDEZVOUS services MAY | |||
| services MAY be included in the first advertizement for the HIP | be included in the first advertisement for the HIP association, | |||
| association but subsequent ones MUST include only one of them as | but subsequent ones MUST include only one of them as agreed in | |||
| agreed in earlier registrations (see steps 2 and 3). | earlier registrations (see steps 2 and 3). | |||
| 2. REG_REQUEST: the Control Relay Client chooses the services it | REG_REQUEST: The Control Relay Client chooses the services it | |||
| requires using this parameter. If the Control Relay Server | requires using this parameter. If the Control Relay Server | |||
| offered both RENDEZVOUS or RELAY_UDP_HIP, the Control Relay | offered both RENDEZVOUS or RELAY_UDP_HIP, the Control Relay Client | |||
| Client MUST choose only one of them in the REG_REQUEST parameter. | MUST choose only one of them in the REG_REQUEST parameter. Upon | |||
| Upon choosing one of of the two, it persists throughout the | choosing one of the two, it persists throughout the lifetime of | |||
| lifetime of the HIP association, and the Control Relay Client | the HIP association, and the Control Relay Client MUST NOT | |||
| MUST NOT register the other remaining one in a subsequent UPDATE | register the other remaining one in a subsequent UPDATE message. | |||
| message. | ||||
| 3. REG_RESPONSE: the Control Relay Server verifies the services | REG_RESPONSE: The Control Relay Server verifies the services | |||
| requested by the Control Relay Client using this parameter. If | requested by the Control Relay Client using this parameter. If | |||
| the Control Relay Server offered both RENDEZVOUS and | the Control Relay Server offered both RENDEZVOUS and RELAY_UDP_HIP | |||
| RELAY_UDP_HIP service, and the Control Relay Client requested for | service, and the Control Relay Client requested for both of them, | |||
| both of them, the Control Relay Client MUST offer only | the Control Relay Client MUST offer only RELAY_UDP_HIP service in | |||
| RELAY_UDP_HIP service in the REG_RESPONSE parameter and include a | the REG_RESPONSE parameter and include a REG_FAILED parameter in | |||
| REG_FAILED parameter in the same message, with RENDEZVOUS as the | the same message, with RENDEZVOUS as the Registration Type and 9 | |||
| Registration Type and [TBD by IANA: 9] as the Failure Type. | as the Failure Type. | |||
| As a further measure against cross-protocol attacks, Control Relay | As a further measure against cross-protocol attacks, the Control | |||
| Client MUST drop any HIP message that includes an RVS_HMAC parameter | Relay Client MUST drop any HIP message that includes an RVS_HMAC | |||
| when it originates from successfully registered Control Relay Server. | parameter when it originates from a successfully registered Control | |||
| Upon such an (unintended) event, the Control Relay Client MUST send a | Relay Server. Upon such an (unintended) event, the Control Relay | |||
| NOTIFY message with RVS_HMAC_PROHIBITED_WITH_RELAY as the Notify | Client MUST send a NOTIFY message with RVS_HMAC_PROHIBITED_WITH_RELAY | |||
| Message Type to the Control Relay Server. | as the Notify Message Type to the Control Relay Server. | |||
| 7. IANA Considerations | 8. IANA Considerations | |||
| This section is to be interpreted according to [RFC8126]. | This section is to be interpreted according to [RFC8126]. | |||
| This document reuses the same default UDP port number 10500 as | This document reuses the same default UDP port number 10500 as | |||
| specified by Legacy ICE-HIP [RFC5770] for tunneling both HIP control | specified by Legacy ICE-HIP [RFC5770] for tunneling both HIP control | |||
| plane and data plane traffic. The port was was registered separately | and data plane traffic. The port was registered separately for | |||
| for RFC5770 to co-author Ari Keranen but should now be re-assigned | [RFC5770] to coauthor Ari Keränen originally, but it has been | |||
| for IESG control. With the permission of Ari Keranen, the new | reassigned for IESG control. With the permission of Ari Keränen, the | |||
| assignee is IESG and contact "chair@ietf.org". In addition, IANA is | new assignee is the IESG and the contact is <chair@ietf.org>. In | |||
| requested to add a reference to this document in the entry for UDP | addition, IANA has added a reference to this document in the entry | |||
| port 10500 in the Transport Protocol Port Number Registry. The | for UDP port 10500 in the "Service Name and Transport Protocol Port | |||
| selection between Legacy ICE-HIP and Native ICE-HIP mode is | Number Registry". The selection between Legacy ICE-HIP and Native | |||
| negotiated using NAT_TRAVERSAL_MODE parameter during the base | ICE-HIP mode is negotiated using the NAT_TRAVERSAL_MODE parameter | |||
| exchange. By default, hosts listen this port for incoming UDP | during the base exchange. By default, hosts listen to this port for | |||
| datagrams and can use it also for sending UDP datagrams. Other | incoming UDP datagrams and can also use it for sending UDP datagrams. | |||
| emphemeral port numbers are negotiated and utilized dynamically. | Other ephemeral port numbers are negotiated and utilized dynamically. | |||
| This document updates the IANA Registry for HIP Parameter Types | IANA has assigned the following values in the HIP "Parameter Types" | |||
| [RFC7401] by assigning new HIP Parameter Type values for the new HIP | registry [RFC7401]: 4650 for RELAYED_ADDRESS (length 20), 4660 for | |||
| Parameters: RELAYED_ADDRESS (length 20), MAPPED_ADDRESS (length 20, | MAPPED_ADDRESS (length 20; defined in Section 5.12), 4680 for | |||
| defined in Section 5.12), PEER_PERMISSION (length 48, defined in | PEER_PERMISSION (length 48; defined in Section 5.13), 4700 for | |||
| Section 5.13), CANDIDATE_PRIORITY (length 4, defined in Section 5.14) | CANDIDATE_PRIORITY (length 4; defined in Section 5.14), and 4710 for | |||
| and NOMINATE (length 4, defined in Section 5.15). | NOMINATE (length 4; defined in Section 5.15). | |||
| This document updates the IANA Registry for HIP NAT traversal modes | IANA has assigned the following value in the "HIP NAT Traversal | |||
| specified in Legacy ICE-HIP [RFC5770] by assigning value for the NAT | Modes" registry specified in Legacy ICE-HIP [RFC5770]: 3 for ICE-HIP- | |||
| traversal mode ICE-HIP-UDP (defined in Section 5.4). | UDP (defined in Section 5.4). | |||
| This document updates the IANA Registry for HIP Notify Message Types: | IANA has assigned the following values in the HIP "Notify Message | |||
| type field NAT_KEEPALIVE in Section 5.3, a new error type | Types" registry: 16385 for NAT_KEEPALIVE in Section 5.3, 63 for | |||
| SERVER_REFLEXIVE_CANDIDATE_ALLOCATION_FAILED and | SERVER_REFLEXIVE_CANDIDATE_ALLOCATION_FAILED in Section 5.10, and 64 | |||
| RVS_HMAC_PROHIBITED_WITH_RELAY in Section 5.10. . | for RVS_HMAC_PROHIBITED_WITH_RELAY in Section 5.10. | |||
| This document defines additional registration types for the HIP | IANA has assigned the following values in the "Registration Types" | |||
| Registration Extension [RFC8003] that allow registering with a Data | registry for the HIP Registration Extension [RFC8003]: 3 for | |||
| Relay Server for ESP relaying service: RELAY_UDP_ESP (defined in | RELAY_UDP_ESP (defined in Section 5.9) for allowing registration with | |||
| Section 5.9, and performing server reflexive candidate discovery: | a Data Relay Server for ESP-relaying service, and 4 for | |||
| CANDIDATE_DISCOVERY (defined in Section 4.2). | CANDIDATE_DISCOVERY (defined in Section 4.2) for performing server- | |||
| reflexive candidate discovery. | ||||
| This document defines an additional Registration Failure Type as | IANA has assigned one value in the "Registration Failure Types" | |||
| defined in Section 6.8. The value is [TBD by IANA: 9] and the | registry as defined in Section 7.8. The value is 9, and the | |||
| Registration Failure Type is "Simultaneous Rendezvous and Control | Registration Failure Type is "Simultaneous Rendezvous and Control | |||
| Relay Service usage prohibited". | Relay Service usage prohibited". | |||
| ICE specification [RFC8445] discusses "Unilateral Self-Address | 9. References | |||
| Fixing" in section 18. This protocol is based on ICE, and thus the | ||||
| same considerations apply also here. | ||||
| 8. Contributors | ||||
| Marcelo Bagnulo, Philip Matthews and Hannes Tschofenig have | ||||
| contributed to [RFC5770]. This document leans heavily on the work in | ||||
| the RFC. | ||||
| 9. Acknowledgments | ||||
| Thanks to Jonathan Rosenberg, Christer Holmberg and the rest of the | ||||
| MMUSIC WG folks for the excellent work on ICE. The authors would | ||||
| like to thank also Andrei Gurtov, Simon Schuetz, Martin Stiemerling, | ||||
| Lars Eggert, Vivien Schmitt, and Abhinav Pathak for their | ||||
| contributions and Tobias Heer, Teemu Koponen, Juhana Mattila, Jeffrey | ||||
| M. Ahrenholz, Kristian Slavov, Janne Lindqvist, Pekka Nikander, | ||||
| Lauri Silvennoinen, Jukka Ylitalo, Juha Heinanen, Joakim Koskela, | ||||
| Samu Varjonen, Dan Wing, Tom Henderson, Alex Elsayed, Jani | ||||
| Hautakorpi, Tero Kauppinen and Timo Simanainen for their comments to | ||||
| [RFC5770] and this document. Thanks for Eric Vyncke, Alvaro Retana, | ||||
| Adam Roach, Ben Campbell, Eric Rescorla, Mirja Kuhlewind, Spencer | ||||
| Dawkins, Derek Fawcus, Tianran Zhou, Amanda Barber, Colin Perkins, | ||||
| Roni Even, Alissa Cooper, Carl Wallace, Martin Duke and Benjamin | ||||
| Kaduk for reviewing this document. | ||||
| This work has been partially funded by CyberTrust programme by | ||||
| Digile/Tekes in Finland. | ||||
| 10. References | 9.1. Normative References | |||
| 10.1. Normative References | [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | |||
| DOI 10.17487/RFC1191, November 1990, | ||||
| <https://www.rfc-editor.org/info/rfc1191>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | Architecture", RFC 4291, DOI 10.17487/RFC4291, February | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | 2006, <https://www.rfc-editor.org/info/rfc4291>. | |||
| [RFC5770] Komu, M., Henderson, T., Tschofenig, H., Melen, J., and A. | ||||
| Keranen, Ed., "Basic Host Identity Protocol (HIP) | ||||
| Extensions for Traversal of Network Address Translators", | ||||
| RFC 5770, DOI 10.17487/RFC5770, April 2010, | ||||
| <https://www.rfc-editor.org/info/rfc5770>. | ||||
| [RFC7050] Savolainen, T., Korhonen, J., and D. Wing, "Discovery of | ||||
| the IPv6 Prefix Used for IPv6 Address Synthesis", | ||||
| RFC 7050, DOI 10.17487/RFC7050, November 2013, | ||||
| <https://www.rfc-editor.org/info/rfc7050>. | ||||
| [RFC7401] Moskowitz, R., Ed., Heer, T., Jokela, P., and T. | [RFC7401] Moskowitz, R., Ed., Heer, T., Jokela, P., and T. | |||
| Henderson, "Host Identity Protocol Version 2 (HIPv2)", | Henderson, "Host Identity Protocol Version 2 (HIPv2)", | |||
| RFC 7401, DOI 10.17487/RFC7401, April 2015, | RFC 7401, DOI 10.17487/RFC7401, April 2015, | |||
| <https://www.rfc-editor.org/info/rfc7401>. | <https://www.rfc-editor.org/info/rfc7401>. | |||
| [RFC7402] Jokela, P., Moskowitz, R., and J. Melen, "Using the | ||||
| Encapsulating Security Payload (ESP) Transport Format with | ||||
| the Host Identity Protocol (HIP)", RFC 7402, | ||||
| DOI 10.17487/RFC7402, April 2015, | ||||
| <https://www.rfc-editor.org/info/rfc7402>. | ||||
| [RFC8003] Laganier, J. and L. Eggert, "Host Identity Protocol (HIP) | [RFC8003] Laganier, J. and L. Eggert, "Host Identity Protocol (HIP) | |||
| Registration Extension", RFC 8003, DOI 10.17487/RFC8003, | Registration Extension", RFC 8003, DOI 10.17487/RFC8003, | |||
| October 2016, <https://www.rfc-editor.org/info/rfc8003>. | October 2016, <https://www.rfc-editor.org/info/rfc8003>. | |||
| [RFC8004] Laganier, J. and L. Eggert, "Host Identity Protocol (HIP) | [RFC8004] Laganier, J. and L. Eggert, "Host Identity Protocol (HIP) | |||
| Rendezvous Extension", RFC 8004, DOI 10.17487/RFC8004, | Rendezvous Extension", RFC 8004, DOI 10.17487/RFC8004, | |||
| October 2016, <https://www.rfc-editor.org/info/rfc8004>. | October 2016, <https://www.rfc-editor.org/info/rfc8004>. | |||
| [RFC8005] Laganier, J., "Host Identity Protocol (HIP) Domain Name | ||||
| System (DNS) Extension", RFC 8005, DOI 10.17487/RFC8005, | ||||
| October 2016, <https://www.rfc-editor.org/info/rfc8005>. | ||||
| [RFC8046] Henderson, T., Ed., Vogt, C., and J. Arkko, "Host Mobility | [RFC8046] Henderson, T., Ed., Vogt, C., and J. Arkko, "Host Mobility | |||
| with the Host Identity Protocol", RFC 8046, | with the Host Identity Protocol", RFC 8046, | |||
| DOI 10.17487/RFC8046, February 2017, | DOI 10.17487/RFC8046, February 2017, | |||
| <https://www.rfc-editor.org/info/rfc8046>. | <https://www.rfc-editor.org/info/rfc8046>. | |||
| [RFC8047] Henderson, T., Ed., Vogt, C., and J. Arkko, "Host | [RFC8047] Henderson, T., Ed., Vogt, C., and J. Arkko, "Host | |||
| Multihoming with the Host Identity Protocol", RFC 8047, | Multihoming with the Host Identity Protocol", RFC 8047, | |||
| DOI 10.17487/RFC8047, February 2017, | DOI 10.17487/RFC8047, February 2017, | |||
| <https://www.rfc-editor.org/info/rfc8047>. | <https://www.rfc-editor.org/info/rfc8047>. | |||
| [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | ||||
| "Session Traversal Utilities for NAT (STUN)", RFC 5389, | ||||
| DOI 10.17487/RFC5389, October 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5389>. | ||||
| [RFC7402] Jokela, P., Moskowitz, R., and J. Melen, "Using the | ||||
| Encapsulating Security Payload (ESP) Transport Format with | ||||
| the Host Identity Protocol (HIP)", RFC 7402, | ||||
| DOI 10.17487/RFC7402, April 2015, | ||||
| <https://www.rfc-editor.org/info/rfc7402>. | ||||
| [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing | ||||
| Architecture", RFC 4291, DOI 10.17487/RFC4291, February | ||||
| 2006, <https://www.rfc-editor.org/info/rfc4291>. | ||||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| [RFC8201] McCann, J., Deering, S., Mogul, J., and R. Hinden, Ed., | ||||
| "Path MTU Discovery for IP version 6", STD 87, RFC 8201, | ||||
| DOI 10.17487/RFC8201, July 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8201>. | ||||
| [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | |||
| Connectivity Establishment (ICE): A Protocol for Network | Connectivity Establishment (ICE): A Protocol for Network | |||
| Address Translator (NAT) Traversal", RFC 8445, | Address Translator (NAT) Traversal", RFC 8445, | |||
| DOI 10.17487/RFC8445, July 2018, | DOI 10.17487/RFC8445, July 2018, | |||
| <https://www.rfc-editor.org/info/rfc8445>. | <https://www.rfc-editor.org/info/rfc8445>. | |||
| [RFC7050] Savolainen, T., Korhonen, J., and D. Wing, "Discovery of | [RFC8489] Petit-Huguenin, M., Salgueiro, G., Rosenberg, J., Wing, | |||
| the IPv6 Prefix Used for IPv6 Address Synthesis", | D., Mahy, R., and P. Matthews, "Session Traversal | |||
| RFC 7050, DOI 10.17487/RFC7050, November 2013, | Utilities for NAT (STUN)", RFC 8489, DOI 10.17487/RFC8489, | |||
| <https://www.rfc-editor.org/info/rfc7050>. | February 2020, <https://www.rfc-editor.org/info/rfc8489>. | |||
| [RFC8005] Laganier, J., "Host Identity Protocol (HIP) Domain Name | ||||
| System (DNS) Extension", RFC 8005, DOI 10.17487/RFC8005, | ||||
| October 2016, <https://www.rfc-editor.org/info/rfc8005>. | ||||
| [RFC1063] Mogul, J., Kent, C., Partridge, C., and K. McCloghrie, "IP | ||||
| MTU discovery options", RFC 1063, DOI 10.17487/RFC1063, | ||||
| July 1988, <https://www.rfc-editor.org/info/rfc1063>. | ||||
| [RFC8201] McCann, J., Deering, S., Mogul, J., and R. Hinden, Ed., | ||||
| "Path MTU Discovery for IP version 6", STD 87, RFC 8201, | ||||
| DOI 10.17487/RFC8201, July 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8201>. | ||||
| [RFC5770] Komu, M., Henderson, T., Tschofenig, H., Melen, J., and A. | [RFC8961] Allman, M., "Requirements for Time-Based Loss Detection", | |||
| Keranen, Ed., "Basic Host Identity Protocol (HIP) | BCP 233, RFC 8961, DOI 10.17487/RFC8961, November 2020, | |||
| Extensions for Traversal of Network Address Translators", | <https://www.rfc-editor.org/info/rfc8961>. | |||
| RFC 5770, DOI 10.17487/RFC5770, April 2010, | ||||
| <https://www.rfc-editor.org/info/rfc5770>. | ||||
| [I-D.ietf-tcpm-rto-consider] | 9.2. Informative References | |||
| Allman, M., "Requirements for Time-Based Loss Detection", | ||||
| draft-ietf-tcpm-rto-consider-16 (work in progress), June | ||||
| 2020. | ||||
| 10.2. Informative References | [HIP-MIDDLEBOXES] | |||
| Heer, T., Hummen, R., Wehrle, K., and M. Komu, "End-Host | ||||
| Authentication for HIP Middleboxes", Work in Progress, | ||||
| Internet-Draft, draft-heer-hip-middle-auth-04, 31 October | ||||
| 2011, <https://tools.ietf.org/html/draft-heer-hip-middle- | ||||
| auth-04>. | ||||
| [I-D.ietf-hip-rfc4423-bis] | [ICE-NONSIP] | |||
| Moskowitz, R. and M. Komu, "Host Identity Protocol | Rosenberg, J., "Guidelines for Usage of Interactive | |||
| Architecture", draft-ietf-hip-rfc4423-bis-20 (work in | Connectivity Establishment (ICE) by non Session Initiation | |||
| progress), February 2019. | Protocol (SIP) Protocols", Work in Progress, Internet- | |||
| Draft, draft-rosenberg-mmusic-ice-nonsip-01, 14 July 2008, | ||||
| <https://tools.ietf.org/html/draft-rosenberg-mmusic-ice- | ||||
| nonsip-01>. | ||||
| [RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., | [RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., | |||
| and W. Weiss, "An Architecture for Differentiated | and W. Weiss, "An Architecture for Differentiated | |||
| Services", RFC 2475, DOI 10.17487/RFC2475, December 1998, | Services", RFC 2475, DOI 10.17487/RFC2475, December 1998, | |||
| <https://www.rfc-editor.org/info/rfc2475>. | <https://www.rfc-editor.org/info/rfc2475>. | |||
| [RFC5207] Stiemerling, M., Quittek, J., and L. Eggert, "NAT and | [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model | |||
| Firewall Traversal Issues of Host Identity Protocol (HIP) | with Session Description Protocol (SDP)", RFC 3264, | |||
| Communication", RFC 5207, DOI 10.17487/RFC5207, April | DOI 10.17487/RFC3264, June 2002, | |||
| 2008, <https://www.rfc-editor.org/info/rfc5207>. | <https://www.rfc-editor.org/info/rfc3264>. | |||
| [I-D.rosenberg-mmusic-ice-nonsip] | ||||
| Rosenberg, J., "Guidelines for Usage of Interactive | ||||
| Connectivity Establishment (ICE) by non Session Initiation | ||||
| Protocol (SIP) Protocols", draft-rosenberg-mmusic-ice- | ||||
| nonsip-01 (work in progress), July 2008. | ||||
| [RFC6538] Henderson, T. and A. Gurtov, "The Host Identity Protocol | [RFC3948] Huttunen, A., Swander, B., Volpe, V., DiBurro, L., and M. | |||
| (HIP) Experiment Report", RFC 6538, DOI 10.17487/RFC6538, | Stenberg, "UDP Encapsulation of IPsec ESP Packets", | |||
| March 2012, <https://www.rfc-editor.org/info/rfc6538>. | RFC 3948, DOI 10.17487/RFC3948, January 2005, | |||
| <https://www.rfc-editor.org/info/rfc3948>. | ||||
| [RFC5128] Srisuresh, P., Ford, B., and D. Kegel, "State of Peer-to- | [RFC5128] Srisuresh, P., Ford, B., and D. Kegel, "State of Peer-to- | |||
| Peer (P2P) Communication across Network Address | Peer (P2P) Communication across Network Address | |||
| Translators (NATs)", RFC 5128, DOI 10.17487/RFC5128, March | Translators (NATs)", RFC 5128, DOI 10.17487/RFC5128, March | |||
| 2008, <https://www.rfc-editor.org/info/rfc5128>. | 2008, <https://www.rfc-editor.org/info/rfc5128>. | |||
| [I-D.heer-hip-middle-auth] | [RFC5207] Stiemerling, M., Quittek, J., and L. Eggert, "NAT and | |||
| Heer, T., Hummen, R., and M. Komu, "End-Host | Firewall Traversal Issues of Host Identity Protocol (HIP) | |||
| Authentication for HIP Middleboxes", draft-heer-hip- | Communication", RFC 5207, DOI 10.17487/RFC5207, April | |||
| middle-auth-04 (work in progress), October 2011. | 2008, <https://www.rfc-editor.org/info/rfc5207>. | |||
| [RFC3948] Huttunen, A., Swander, B., Volpe, V., DiBurro, L., and M. | ||||
| Stenberg, "UDP Encapsulation of IPsec ESP Packets", | ||||
| RFC 3948, DOI 10.17487/RFC3948, January 2005, | ||||
| <https://www.rfc-editor.org/info/rfc3948>. | ||||
| [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model | ||||
| with Session Description Protocol (SDP)", RFC 3264, | ||||
| DOI 10.17487/RFC3264, June 2002, | ||||
| <https://www.rfc-editor.org/info/rfc3264>. | ||||
| [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | |||
| (ICE): A Protocol for Network Address Translator (NAT) | (ICE): A Protocol for Network Address Translator (NAT) | |||
| Traversal for Offer/Answer Protocols", RFC 5245, | Traversal for Offer/Answer Protocols", RFC 5245, | |||
| DOI 10.17487/RFC5245, April 2010, | DOI 10.17487/RFC5245, April 2010, | |||
| <https://www.rfc-editor.org/info/rfc5245>. | <https://www.rfc-editor.org/info/rfc5245>. | |||
| [RFC8750] Migault, D., Guggemos, T., and Y. Nir, "Implicit | ||||
| Initialization Vector (IV) for Counter-Based Ciphers in | ||||
| Encapsulating Security Payload (ESP)", RFC 8750, | ||||
| DOI 10.17487/RFC8750, March 2020, | ||||
| <https://www.rfc-editor.org/info/rfc8750>. | ||||
| [I-D.ietf-tsvwg-datagram-plpmtud] | ||||
| Fairhurst, G., Jones, T., Tuexen, M., Ruengeler, I., and | ||||
| T. Voelker, "Packetization Layer Path MTU Discovery for | ||||
| Datagram Transports", draft-ietf-tsvwg-datagram-plpmtud-22 | ||||
| (work in progress), June 2020. | ||||
| [RFC5766] Mahy, R., Matthews, P., and J. Rosenberg, "Traversal Using | ||||
| Relays around NAT (TURN): Relay Extensions to Session | ||||
| Traversal Utilities for NAT (STUN)", RFC 5766, | ||||
| DOI 10.17487/RFC5766, April 2010, | ||||
| <https://www.rfc-editor.org/info/rfc5766>. | ||||
| [RFC6146] Bagnulo, M., Matthews, P., and I. van Beijnum, "Stateful | [RFC6146] Bagnulo, M., Matthews, P., and I. van Beijnum, "Stateful | |||
| NAT64: Network Address and Protocol Translation from IPv6 | NAT64: Network Address and Protocol Translation from IPv6 | |||
| Clients to IPv4 Servers", RFC 6146, DOI 10.17487/RFC6146, | Clients to IPv4 Servers", RFC 6146, DOI 10.17487/RFC6146, | |||
| April 2011, <https://www.rfc-editor.org/info/rfc6146>. | April 2011, <https://www.rfc-editor.org/info/rfc6146>. | |||
| [RFC6147] Bagnulo, M., Sullivan, A., Matthews, P., and I. van | [RFC6147] Bagnulo, M., Sullivan, A., Matthews, P., and I. van | |||
| Beijnum, "DNS64: DNS Extensions for Network Address | Beijnum, "DNS64: DNS Extensions for Network Address | |||
| Translation from IPv6 Clients to IPv4 Servers", RFC 6147, | Translation from IPv6 Clients to IPv4 Servers", RFC 6147, | |||
| DOI 10.17487/RFC6147, April 2011, | DOI 10.17487/RFC6147, April 2011, | |||
| <https://www.rfc-editor.org/info/rfc6147>. | <https://www.rfc-editor.org/info/rfc6147>. | |||
| [RFC6538] Henderson, T. and A. Gurtov, "The Host Identity Protocol | ||||
| (HIP) Experiment Report", RFC 6538, DOI 10.17487/RFC6538, | ||||
| March 2012, <https://www.rfc-editor.org/info/rfc6538>. | ||||
| [RFC8656] Reddy, T., Ed., Johnston, A., Ed., Matthews, P., and J. | ||||
| Rosenberg, "Traversal Using Relays around NAT (TURN): | ||||
| Relay Extensions to Session Traversal Utilities for NAT | ||||
| (STUN)", RFC 8656, DOI 10.17487/RFC8656, February 2020, | ||||
| <https://www.rfc-editor.org/info/rfc8656>. | ||||
| [RFC8750] Migault, D., Guggemos, T., and Y. Nir, "Implicit | ||||
| Initialization Vector (IV) for Counter-Based Ciphers in | ||||
| Encapsulating Security Payload (ESP)", RFC 8750, | ||||
| DOI 10.17487/RFC8750, March 2020, | ||||
| <https://www.rfc-editor.org/info/rfc8750>. | ||||
| [RFC8899] Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T. | ||||
| Völker, "Packetization Layer Path MTU Discovery for | ||||
| Datagram Transports", RFC 8899, DOI 10.17487/RFC8899, | ||||
| September 2020, <https://www.rfc-editor.org/info/rfc8899>. | ||||
| [RFC9068] Moskowitz, R., Ed. and M. Komu, "Host Identity Protocol | ||||
| Architecture", RFC 9063, DOI 10.17487/RFC9068, June 2021, | ||||
| <https://www.rfc-editor.org/info/rfc9068>. | ||||
| Appendix A. Selecting a Value for Check Pacing | Appendix A. Selecting a Value for Check Pacing | |||
| Selecting a suitable value for the connectivity check transaction | Selecting a suitable value for the connectivity check transaction | |||
| pacing is essential for the performance of connectivity check-based | pacing is essential for the performance of connectivity check-based | |||
| NAT traversal. The value should not be so small that the checks | NAT traversal. The value should not be so small that the checks | |||
| cause network congestion or overwhelm the NATs. On the other hand, a | cause network congestion or overwhelm the NATs. On the other hand, a | |||
| pacing value that is too high makes the checks last for a long time, | pacing value that is too high makes the checks last for a long time, | |||
| thus increasing the connection setup delay. | thus increasing the connection setup delay. | |||
| The Ta value may be configured by the user in environments where the | The Ta value may be configured by the user in environments where the | |||
| network characteristics are known beforehand. However, if the | network characteristics are known beforehand. However, if the | |||
| characteristics are not known, it is recommended that the value is | characteristics are not known, it is recommended that the value is | |||
| adjusted dynamically. In this case, it is recommended that the hosts | adjusted dynamically. In this case, it is recommended that the hosts | |||
| estimate the round-trip time (RTT) between them and SHOULD set the | estimate the round-trip time (RTT) between them, and they SHOULD set | |||
| minimum Ta value so that at most a single connectivity check message | the minimum Ta value so that at most a single connectivity check | |||
| is sent on every RTT. | message is sent on every RTT. | |||
| One way to estimate the RTT is to use the time that it takes for the | One way to estimate the RTT is to use the time that it takes for the | |||
| Control Relay Server registration exchange to complete; this would | Control Relay Server registration exchange to complete; this would | |||
| give an estimate on the registering host's access link's RTT. Also, | give an estimate on the registering host's access link's RTT. Also, | |||
| the I1/R1 exchange could be used for estimating the RTT, but since | the I1/R1 exchange could be used for estimating the RTT, but since | |||
| the R1 can be cached in the network, or the relaying service can | the R1 can be cached in the network, or the relaying service can | |||
| increase the delay notably, this is not recommended. In general, | increase the delay notably, this is not recommended. In general, | |||
| estimating RTT can be difficult and error prone, thus the guidelines | estimating RTT can be difficult and error prone; thus, the guidelines | |||
| for choosing a Ta value in Section 4.4 MUST be followed. | for choosing a Ta value in Section 4.4 MUST be followed. | |||
| Appendix B. Differences with respect to ICE | Appendix B. Differences with Respect to ICE | |||
| Legacy ICE-HIP reuses ICE/STUN/TURN protocol stack as it is. The | Legacy ICE-HIP reuses the ICE/STUN/TURN protocol stack as it is. The | |||
| benefits of such as an approach include the reuse of STUN/TURN | benefits of such as an approach include the reuse of STUN/TURN | |||
| infrastructure and possibly the reuse of existing software libraries, | infrastructure and possibly the reuse of existing software libraries, | |||
| but there are also drawbacks with the approach. For example, ICE is | but there are also drawbacks with the approach. For example, ICE is | |||
| meant for application-layer protocols, whereas HIP operates at layer | meant for application-layer protocols, whereas HIP operates at layer | |||
| 3.5 between transport and network layers. This is particularly | 3.5 between transport and network layers. This is particularly | |||
| problematic because the implementations employ kernelspace IPsec ESP | problematic because the implementations employ kernel-space IPsec ESP | |||
| as their data plane: demultiplexing of incoming ESP, HIP and TURN | as their data plane: demultiplexing of incoming ESP, HIP, and TURN | |||
| messages required capturing of all UDP packets destined to port 10500 | messages required the capturing of all UDP packets destined to port | |||
| to the userspace (due to different, incompatible markers in ESP and | 10500 to the userspace (due to different, incompatible markers in ESP | |||
| STUN), thus causing additional software complexity and an unnecessary | and STUN), thus causing additional software complexity and an | |||
| latency/throughput bottleneck for the dataplane performance. It is | unnecessary latency/throughput bottleneck for the dataplane | |||
| also worth noting that demultiplexing of STUN packets in the kernel | performance. It is also worth noting that the demultiplexing of STUN | |||
| would incur an also a performance impact (albeit smaller than with | packets in the kernel would also incur a performance impact (albeit | |||
| userspace demultiplexing), and secure verification of STUN messages | smaller than with userspace demultiplexing), and secure verification | |||
| would require communication between the kernelspace STUN detector and | of STUN messages would require communication between the kernel-space | |||
| HIP daemon typically residing in the userspace (thus, again | STUN detector and HIP daemon typically residing in the userspace | |||
| increasing the performance overhead). | (thus again increasing the performance overhead). | |||
| Legacy ICE-HIP involves also some other complexities when compared to | Legacy ICE-HIP also involves some other complexities when compared to | |||
| the approach taken in this document. Relaying of ESP packets via | the approach taken in this document. The relaying of ESP packets via | |||
| TURN relays was not considered that simple because TURN relays | TURN relays was not considered that simple because TURN relays | |||
| require adding and removing extra TURN framing for the relayed | require adding and removing extra TURN framing for the relayed | |||
| packets. Finally, the developers of the two Legacy ICE-HIP | packets. Finally, the developers of the two Legacy ICE-HIP | |||
| implementations concluded that "effort needed for integrating an ICE | implementations concluded that effort needed for integrating an ICE | |||
| library into a HIP implementation turned out to be quite a bit higher | library into a HIP implementation turned out to be quite a bit higher | |||
| that initially estimated. Also, the amount of extra code (some 10 | than initially estimated. Also, the amount of extra code (some 10 | |||
| kLoC) needed for all the new parsers, state machines, etc., is quite | kLoC) needed for all the new parsers, state machines, etc., was quite | |||
| high and by re-using the HIP code one should be able to do with much | high and by reusing the HIP code, one should be able to do with much | |||
| less. This should result in smaller binary size, less bugs, and | less. This should result in smaller binary size, less bugs, and | |||
| easier debugging.". Consequently, the HIP working group decided to | easier debugging. | |||
| follow ICE methodology but reuse HIP messaging format to achieve the | ||||
| same functionality as ICE, and consequently the result is this | Consequently, the HIP working group decided to follow ICE methodology | |||
| document that specifies the Native ICE-HIP protocol. | but reuse HIP messaging format to achieve the same functionality as | |||
| ICE; the result of that is this document, which specifies the Native | ||||
| ICE-HIP protocol. | ||||
| The Native ICE-HIP protocol specified in this document follows the | The Native ICE-HIP protocol specified in this document follows the | |||
| semantics of ICE as close as possible, and most of the differences | semantics of ICE as close as possible, and most of the differences | |||
| are syntactical due to the use of a different protocol. In this | are syntactical due to the use of a different protocol. In this | |||
| section, we describe the differences to the ICE protocol. | section, we describe the differences to the ICE protocol. | |||
| o ICE operates at the application layer, whereas this protocol | * ICE operates at the application layer, whereas this protocol | |||
| operates between transport and network layers, thus hiding the | operates between transport and network layers, thus hiding the | |||
| protocol details from the application. | protocol details from the application. | |||
| o The STUN protocol is not employed. Instead, native ICE-HIP reuses | * The STUN protocol is not employed. Instead, Native ICE-HIP reuses | |||
| the HIP control plane format in order simplify demultiplexing of | the HIP control plane format in order to simplify the | |||
| different protocols. For example, the STUN binding response is | demultiplexing of different protocols. For example, the STUN | |||
| replaced with a HIP UPDATE message containing an | binding response is replaced with a HIP UPDATE message containing | |||
| ECHO_REQUEST_SIGNED parameter and the STUN binding response with a | an ECHO_REQUEST_SIGNED parameter and the STUN binding response | |||
| HIP UPDATE message containing an ECHO_RESPONSE_SIGNED parameter as | with a HIP UPDATE message containing an ECHO_RESPONSE_SIGNED | |||
| defined in Section 4.6. It is worth noting that a drawback of not | parameter as defined in Section 4.6. It is worth noting that a | |||
| employing STUN is that discovery of the address candidates | drawback of not employing STUN is that discovery of the address | |||
| requires creating (using HIP base exchange) and maintaining (using | candidates requires creating (using HIP base exchange) and | |||
| HIP UPDATE procedures) state at the Control Relay Client and | maintaining (using HIP UPDATE procedures) state at the Control | |||
| Control Relay Server. Future extensions to this document may | Relay Client and Control Relay Server. Future extensions to this | |||
| define a stateless, HIP-specific mechanism for an end-host to | document may define a stateless, HIP-specific mechanism for an end | |||
| discover its address candidates. | host to discover its address candidates. | |||
| o The TURN protocol is not utilized. Instead, native ICE-HIP reuses | * The TURN protocol is not utilized. Instead, Native ICE-HIP reuses | |||
| Control Relay Servers for the same purpose. | Control Relay Servers for the same purpose. | |||
| o ICMP errors may be used in ICE to signal failure. In Native ICE- | * ICMP errors may be used in ICE to signal failure. In the Native | |||
| HIP protocol, HIP NOTIFY messages are used instead. | ICE-HIP protocol, HIP NOTIFY messages are used instead. | |||
| o Instead of the ICE username fragment and password mechanism for | * Instead of the ICE username fragment and password mechanism for | |||
| credentials, native ICE-HIP uses the HIT, derived from a public | credentials, Native ICE-HIP uses the HIT, derived from a public | |||
| key, for the same purpose. The username fragments are "transient | key, for the same purpose. The username fragments are "transient | |||
| host identifiers, bound to a particular session established as | host identifiers, bound to a particular session established as | |||
| part of the candidate exchange" [RFC8445]. Generally in HIP, a | part of the candidate exchange" [RFC8445]. Generally in HIP, a | |||
| local public key and the derived HIT are considered long-term | local public key and the derived HIT are considered long-term | |||
| identifiers, and invariant across different host associations and | identifiers and invariant across different host associations and | |||
| different transport-layer flows. | different transport-layer flows. | |||
| o In ICE, the conflict when two communicating end-points take the | * In ICE, the conflict when two communicating endpoints take the | |||
| same controlling role is solved using random values (so called | same controlling role is solved using random values (a so-called | |||
| tie-breaker value). In Native ICE-HIP protocol, the conflict is | tie-breaker value). In the Native ICE-HIP protocol, the conflict | |||
| solved by the standard HIP base exchange procedure, where the host | is solved by the standard HIP base exchange procedure, where the | |||
| with the "larger" HIT switches to Responder role, thus changing | host with the "larger" HIT switches to the Responder role, thus | |||
| also to controlled role. | also changing to the controlled role. | |||
| o The ICE-CONTROLLED and ICE-CONTROLLING attributes are not included | * The ICE-CONTROLLED and ICE-CONTROLLING attributes are not included | |||
| in the connectivity checks. | in the connectivity checks. | |||
| o The foundation concept is unnecessary in native ICE-HIP because | * The foundation concept is unnecessary in Native ICE-HIP because | |||
| only a single UDP flow for the IPsec tunnel will be negotiated. | only a single UDP flow for the IPsec tunnel will be negotiated. | |||
| o Frozen candidates are omitted for the same reason as foundation | * Frozen candidates are omitted for the same reason the foundation | |||
| concept is excluded. | concept is excluded. | |||
| o Components are omitted for the same reason as foundation concept | * Components are omitted for the same reason the foundation concept | |||
| is excluded. | is excluded. | |||
| o Native ICE-HIP supports only "full ICE" where the two | * Native ICE-HIP supports only "full ICE" where the two | |||
| communicating hosts participate actively to the connectivity | communicating hosts participate actively to the connectivity | |||
| checks, and the "lite" mode is not supported. This design | checks, and the "lite" mode is not supported. This design | |||
| decision follows the guidelines of ICE which recommends full ICE | decision follows the guidelines of ICE, which recommends full ICE | |||
| implementations. However, it should be noted that a publicly | implementations. However, it should be noted that a publicly | |||
| reachable Responder may refuse to negotiate the ICE mode as | reachable Responder may refuse to negotiate the ICE mode as | |||
| described in Section 4.7.2. This would result in a [RFC7401] | described in Section 4.7.2. This would result in a HIP base | |||
| based HIP base exchange tunneled over UDP followed ESP traffic | exchange (as per [RFC7401]) tunneled over UDP, followed by ESP | |||
| over the same tunnel, without the connectivity check procedures | traffic over the same tunnel, without the connectivity check | |||
| defined in this document (in some sense, this mode corresponds to | procedures defined in this document (in some sense, this mode | |||
| the case where two ICE lite implementations connect since no | corresponds to the case where two ICE lite implementations connect | |||
| connectivity checks are sent). | since no connectivity checks are sent). | |||
| o As the "ICE lite" is not adopted here and both sides are capable | * As the "ICE lite" is not adopted here and both sides are capable | |||
| of ICE-HIP-UDP mode (negotiated during the base exchange), default | of ICE-HIP-UDP mode (negotiated during the base exchange), default | |||
| candidates are not employed in Native ICE-HIP. | candidates are not employed in Native ICE-HIP. | |||
| o If the agent is using Diffserv Codepoint markings [RFC2475] in its | * If the agent is using Diffserv Codepoint markings [RFC2475] in its | |||
| media packets, it SHOULD apply those same markings to its | media packets, it SHOULD apply those same markings to its | |||
| connectivity checks. | connectivity checks. | |||
| o Unlike in ICE, the addresses are not XOR-ed in Native ICE-HIP | * Unlike in ICE, the addresses are not XORed in the Native ICE-HIP | |||
| protocol but rather encrypted to avoid middlebox tampering. | protocol but rather encrypted to avoid middlebox tampering. | |||
| o Native ICE-HIP protocol does not employ the ICE related address | * ICE defines Related Address and Port attributes used for | |||
| and related port attributes (that are used for diagnostic or SIP | diagnostic/SIP purposes, but the Native ICE-HIP protocol does not | |||
| purposes). | employ these attributes. | |||
| o Minimum RTO is 500 ms in ICE but 1000 ms in Native ICE-HIP | * The minimum RTO is 500 ms in ICE but 1000 ms in the Native ICE-HIP | |||
| protocol in favor of [I-D.ietf-tcpm-rto-consider] | protocol in favor of [RFC8961]. | |||
| Appendix C. Differences to Base Exchange and UPDATE procedures | Appendix C. Differences to Base Exchange and UPDATE Procedures | |||
| This section gives some design guidance for implementers how the | This section gives some design guidance for implementers on how the | |||
| extensions in this protocol extend and differ from [RFC7401] and | extensions in this protocol extend and differ from [RFC7401] and | |||
| [RFC8046]. | [RFC8046]. | |||
| o Both control and data plane are operated on top of UDP, not | * Both the control and data plane are operated on top of UDP, not | |||
| directly on IP. | directly on IP. | |||
| o A minimal implementation would conform only to Section 4.7.1 or | * A minimal implementation would conform only to Sections 4.7.1 or | |||
| Section 4.7.2, thus merely tunneling HIP control and data traffic | 4.7.2, thus merely tunneling HIP control and data traffic over | |||
| over UDP. The drawback here is that it works only in the limited | UDP. The drawback here is that it works only in the limited cases | |||
| cases where the Responder has a public address. | where the Responder has a public address. | |||
| o It is worth noting that while a rendezvous server [RFC8004] has | * It is worth noting that while a Rendezvous Server [RFC8004] has | |||
| not been designed to be used in NATted scenarios because it just | not been designed to be used in NATed scenarios because it just | |||
| relays the first I1 packet and does not employ UDP encapsulation, | relays the first I1 packet and does not employ UDP encapsulation, | |||
| the Control Relay Server forwards all control traffic and, hence, | the Control Relay Server forwards all control traffic and, hence, | |||
| is more suitable in NATted environments. Further, the Data Relay | is more suitable in NATed environments. Further, the Data Relay | |||
| Server guarantees forwarding of data plane traffic also in the | Server guarantees forwarding of data plane traffic also in cases | |||
| cases when the NAT traversal procedures fail. | where the NAT traversal procedures fail. | |||
| o Registration procedures with a Control/Data Relay Server are | * Registration procedures with a Control/Data Relay Server are | |||
| similar as with rendezvous server. However, a Control/Data Relay | similar as with a Rendezvous Server. However, a Control/Data | |||
| Server has different registration parameters than rendezvous | Relay Server has different registration parameters than a | |||
| because it offers a different service. Also, the Control/Data | Rendezvous Server because it offers a different service. Also, | |||
| Relay Server includes also a REG_FROM parameter that informs the | the Control/Data Relay Server also includes a REG_FROM parameter | |||
| Control/Data Relay Client about its server reflexive address. A | that informs the Control/Data Relay Client about its server- | |||
| Data Relay Server includes also a RELAYED_ADDRESS containing the | reflexive address. A Data Relay Server also includes a | |||
| relayed address for the Data Relay Client. | RELAYED_ADDRESS containing the relayed address for the Data Relay | |||
| Client. | ||||
| o In [RFC7401], the Initiator and Responder can start to exchange | * In [RFC7401], the Initiator and Responder can start to exchange | |||
| application payload immediately after the base exchange. While | application payload immediately after the base exchange. While | |||
| exchanging data immediately after a base exchange via a Data | exchanging data immediately after a base exchange via a Data | |||
| Control Relay would be possible also here, we follow the ICE | Control Relay would also be possible here, we follow the ICE | |||
| methodology to establish a direct path between two hosts using | methodology to establish a direct path between two hosts using | |||
| connectivity checks. This means that there will be some | connectivity checks. This means that there will be some | |||
| additional delay after the base exchange before application | additional delay after the base exchange before application | |||
| payload can be transmitted. The same applies for the UPDATE | payload can be transmitted. The same applies for the UPDATE | |||
| procedure as the connectivity checks introduce some additional | procedure as the connectivity checks introduce some additional | |||
| delay. | delay. | |||
| o In HIP without any NAT traversal support, the base exchange acts | * In HIP without any NAT traversal support, the base exchange acts | |||
| as an implicit connectivity check, and the mobility and | as an implicit connectivity check, and the mobility and | |||
| multihoming extensions support explicit connectivity checks. | multihoming extensions support explicit connectivity checks. | |||
| After a base exchange or UPDATE based connectivity checks, a host | After a base exchange or UPDATE-based connectivity checks, a host | |||
| can use the associated address pair for transmitting application | can use the associated address pair for transmitting application | |||
| payload. In this Native ICE-HIP extension, we follow the ICE | payload. In this Native ICE-HIP extension, we follow the ICE | |||
| methodology, where one end-point acting in the controlled role | methodology where one endpoint acting in the controlled role | |||
| chooses the used address pair also on behalf of the other end- | chooses the used address pair also on behalf of the other endpoint | |||
| point acting in controlled role, which is different from HIP | acting in the controlled role, which is different from HIP without | |||
| without NAT traversal support. Another difference is that the | NAT traversal support. Another difference is that the process of | |||
| process of choosing an address pair is explicitly signaled using | choosing an address pair is explicitly signaled using the | |||
| the nomination packets. The nomination process in this protocol | nomination packets. The nomination process in this protocol | |||
| supports only single address pair, and multihoming extensions are | supports only a single address pair, and multihoming extensions | |||
| left for further study. | are left for further study. | |||
| o The UPDATE procedure resembles the mobility extensions defined in | * The UPDATE procedure resembles the mobility extensions defined in | |||
| [RFC8046]. The first UPDATE message from the mobile host is | [RFC8046]. The first UPDATE message from the mobile host is | |||
| exactly the same as in the mobility extensions. The second UPDATE | exactly the same as in the mobility extensions. The second UPDATE | |||
| message from the peer host and third from the mobile host are | message from the peer host and third from the mobile host are | |||
| different in the sense that they merely acknowledge and conclude | different in the sense that they merely acknowledge and conclude | |||
| the reception of the candidates through the Control Relay Server. | the reception of the candidates through the Control Relay Server. | |||
| In other words, they do not yet test for connectivity (besides | In other words, they do not yet test for connectivity (besides | |||
| reachability through the Control Relay Server) unlike in the | reachability through the Control Relay Server) unlike in the | |||
| mobility extensions. The idea is that connectivity check | mobility extensions. The idea is that the connectivity check | |||
| procedure follows the ICE specification, which is somewhat | procedure follows the ICE specification, which is somewhat | |||
| different from the HIP mobility extensions. | different from the HIP mobility extensions. | |||
| o The connectivity checks as defined in the mobility extensions | * The connectivity checks as defined in the mobility extensions | |||
| [RFC8046] are triggered only by the peer of the mobile host. | [RFC8046] are triggered only by the peer of the mobile host. | |||
| Since successful NAT traversal requires that both end-points test | Since successful NAT traversal requires that both endpoints test | |||
| connectivity, both the mobile host and its peer host have to test | connectivity, both the mobile host and its peer host have to test | |||
| for connectivity. In addition, this protocol validates also the | for connectivity. In addition, this protocol also validates the | |||
| UDP ports; the ports in the connectivity check must match with the | UDP ports; the ports in the connectivity check must match with the | |||
| response, as required by ICE. | response, as required by ICE. | |||
| o In HIP mobility extensions [RFC8046], an outbound locator has some | * In HIP mobility extensions [RFC8046], an outbound locator has some | |||
| associated state: UNVERIFIED mean that the locator has not been | associated state: UNVERIFIED means that the locator has not been | |||
| tested for reachability, ACTIVE means that the address has been | tested for reachability, ACTIVE means that the address has been | |||
| verified for reachability and is being used actively, and | verified for reachability and is being used actively, and | |||
| DEPRECATED means that the locator lifetime has expired. In the | DEPRECATED means that the locator lifetime has expired. In the | |||
| subset of ICE specifications used by this protocol, an individual | subset of ICE specifications used by this protocol, an individual | |||
| address candidate has only two properties: type and priority. | address candidate has only two properties: type and priority. | |||
| Instead, the actual state in ICE is associated with candidate | Instead, the actual state in ICE is associated with candidate | |||
| pairs rather than individual addresses. The subset of ICE | pairs rather than individual addresses. The subset of ICE | |||
| specifications utilized by this protocol require the following | specifications utilized by this protocol require the following | |||
| attributes for a candidate pair: valid bit, nominated bit, base | attributes for a candidate pair: valid bit, nominated bit, base, | |||
| and the state of connectivity check. The connectivity checks have | and the state of the connectivity check. The connectivity checks | |||
| the following states: Waiting, In-progress, Succeeded and Failed. | have the following states: Waiting, In-progress, Succeeded, and | |||
| Failed. Handling of this state attribute requires some additional | ||||
| Handling of this state attribute requires some additional logic | logic when compared to the mobility extensions, since the state is | |||
| when compared to the mobility extensions since the state is | associated with a local-remote address pair rather than just a | |||
| associated with a local-remote address pair rather just a remote | remote address; thus, the mobility and ICE states do not have an | |||
| address, and, thus, the mobility and ICE states do not have an | ||||
| unambiguous one-to-one mapping. | unambiguous one-to-one mapping. | |||
| o Credit-based authorization as defined in [RFC8046] could be used | * Credit-based authorization as defined in [RFC8046] could be used | |||
| before candidate nomination has been concluded upon discovering | before candidate nomination has been concluded upon discovering | |||
| working candidate pairs. However, this may result in the use of | working candidate pairs. However, this may result in the use of | |||
| asymmetric paths for a short time period in the beginning of | asymmetric paths for a short time period in the beginning of | |||
| communications. Thus, support of credit-based authorization is | communications. Thus, support of credit-based authorization is | |||
| left for further study. | left for further study. | |||
| Appendix D. Multihoming Considerations | Appendix D. Multihoming Considerations | |||
| This document allows a host to collect address candidates from | This document allows a host to collect address candidates from | |||
| multiple interfaces, but does not support activation and the | multiple interfaces but does not support activation and the | |||
| simultaneous use of multiple address candidates. While multihoming | simultaneous use of multiple address candidates. While multihoming | |||
| extensions to support [RFC8047] like functionality are left for | extensions to support functionality similar to that found in | |||
| further study and experimentation, we envision here some potential | [RFC8047] are left for further study and experimentation, we envision | |||
| compatibility improvements to support multihoming: | here some potential compatibility improvements to support | |||
| multihoming: | ||||
| o Data Relay Registration: a Data Relay Client acting as an | Data Relay Registration: a Data Relay Client acting as an Initiator | |||
| Initiator with another peer host should register a new server | with another peer host should register a new server-reflexive | |||
| reflexive candidate for each local transport address candidate. A | candidate for each local transport address candidate. A Data | |||
| Data Relay Client acting as an Responder should register a new | Relay Client acting as a Responder should register a new server- | |||
| server reflexive candidate for each { local transport address | reflexive candidate for each {local transport address candidate, | |||
| candidate, new peer host} pair for the reasons described in | new peer host} pair for the reasons described in Section 4.12.3. | |||
| Section 4.12.3. In both cases, the Data Relay Client should | In both cases, the Data Relay Client should request the additional | |||
| request the additional server reflexive candidates by sending | server-reflexive candidates by sending UPDATE messages originating | |||
| UPDATE messages originating from each of the local address | from each of the local address candidates as described in | |||
| candidates as described in Section 4.1. As the UPDATE messages | Section 4.1. As the UPDATE messages are originating from an | |||
| are originating from an unknown location from the viewpoint of the | unknown location from the viewpoint of the Data Relay Server, it | |||
| Data Relay Server, it must include also a ECHO_REQUEST_SIGNED in | must also include an ECHO_REQUEST_SIGNED in the response in order | |||
| the response in order to test for return routability. | to test for return routability. | |||
| o Data Relay unregistration: this follows the procedure in Section 4 | Data Relay unregistration: This follows the procedure in Section 4, | |||
| but the Data Relay Client should unregister using the particular | but the Data Relay Client should unregister using the particular | |||
| transport address to be unregistered. All transport address pair | transport address to be unregistered. All transport address pair | |||
| registrations can be unregistered when no RELAYED_ADDRESS | registrations can be unregistered when no RELAYED_ADDRESS | |||
| parameter is included. | parameter is included. | |||
| o PEER_PERMISSION parameter: this needs to be extended or an | PEER_PERMISSION parameter: This needs to be extended or an | |||
| additional parameter is needed to declare the specific local | additional parameter is needed to declare the specific local | |||
| candidate of the Data Relay Client. Alternatively, the use of the | candidate of the Data Relay Client. Alternatively, the use of the | |||
| PEER_PERMISSION could be used as a wild card to open permissions | PEER_PERMISSION could be used as a wild card to open permissions | |||
| for a specific peer to all of the candidates of the Data Relay | for a specific peer to all of the candidates of the Data Relay | |||
| Client. | Client. | |||
| o Connectivity checks: the controlling host should be able to | Connectivity checks: The controlling host should be able to nominate | |||
| nominate multiple candidates (by repeating step 7 in Figure 5 in | multiple candidates (by repeating step 7 in Figure 5 in | |||
| Section 4.6 using the additional candidate pairs). | Section 4.6 using the additional candidate pairs). | |||
| o Keepalives should be sent for all the nominated candidate pairs. | Keepalives: These should be sent for all the nominated candidate | |||
| Similarly, the Control/Data Relay Client should send keepalives | pairs. Similarly, the Control/Data Relay Client should send | |||
| from its local candidates to its Control/Data Relay Server | keepalives from its local candidates to its Control/Data Relay | |||
| transport addresses. | Server transport addresses. | |||
| Appendix E. DNS Considerations | Appendix E. DNS Considerations | |||
| This section updates [RFC5770] Appendix B which will be replaced with | This section updates Appendix B of [RFC5770], which will be replaced | |||
| the mechanism described in this section. | with the mechanism described in this section. | |||
| [RFC5770] did not specify how an end-host can look up another end- | [RFC5770] did not specify how an end host can look up another end | |||
| host via DNS and initiate an UDP-based HIP base exchange with it, so | host via DNS and initiate a UDP-based HIP base exchange with it, so | |||
| this section makes an attempt to fill this gap. | this section makes an attempt to fill this gap. | |||
| [RFC8005] specifies how a HIP end-host and its Rendezvous server is | [RFC8005] specifies how a HIP end host and its Rendezvous Server is | |||
| registered to DNS. Essentially, the public key of the end-host is | registered to DNS. Essentially, the public key of the end host is | |||
| stored as HI record and its Rendezvous Server as A or AAAA record. | stored as a HI record and its Rendezvous Server as an A or AAAA | |||
| This way, the Rendezvous Server can act as an intermediary for the | record. This way, the Rendezvous Server can act as an intermediary | |||
| end-host and forward packets to it based on the DNS configuration. | for the end host and forward packets to it based on the DNS | |||
| Control Relay Server offers similar functionality as Rendezvous | configuration. The Control Relay Server offers similar functionality | |||
| Server, with the difference that the Control Relay Server forwards | to the Rendezvous Server, with the difference being that the Control | |||
| all control messages, not just the first I1 message. | Relay Server forwards all control messages, not just the first I1 | |||
| message. | ||||
| Prior to this document, the A and AAAA records in the DNS refer | Prior to this document, the A and AAAA records in the DNS refer | |||
| either to the HIP end-host itself or a Rendezvous Server [RFC8005], | either to the HIP end host itself or a Rendezvous Server [RFC8005], | |||
| and control and data plane communication with the associated host has | and control and data plane communication with the associated host has | |||
| been assumed to occur directly over IPv4 or IPv6. However, this | been assumed to occur directly over IPv4 or IPv6. However, this | |||
| specification extends the records to be used for UDP-based | specification extends the records to be used for UDP-based | |||
| communications. | communications. | |||
| Let us consider the case of a HIP Initiator with the default policy | Let us consider the case of a HIP Initiator with the default policy | |||
| to employ UDP encapsulation and the extensions defined in this | to employ UDP encapsulation and the extensions defined in this | |||
| document. The Initiator looks up the FQDN of a Responder, and | document. The Initiator looks up the Fully Qualified Domain Name | |||
| retrieves its HI, A and AAAA records. Since the default policy is to | (FQDN) of a Responder, and retrieves its HI, A, and AAAA records. | |||
| use UDP encapsulation, the Initiator MUST send the I1 message over | Since the default policy is to use UDP encapsulation, the Initiator | |||
| UDP to destination port 10500 (either over IPv4 in the case of a A | MUST send the I1 message over UDP to destination port 10500 (either | |||
| record or over IPv6 in the case of a AAAA record). It MAY send an I1 | over IPv4 in the case of an A record or over IPv6 in the case of an | |||
| message both with and without UDP encapsulation in parallel. In the | AAAA record). It MAY send an I1 message both with and without UDP | |||
| case the Initiator receives R1 messages both with and without UDP | encapsulation in parallel. In the case in which the Initiator | |||
| encapsulation from the Responder, the Initiator SHOULD ignore the R1 | receives R1 messages both with and without UDP encapsulation from the | |||
| messages without UDP encapsulation. | Responder, the Initiator SHOULD ignore the R1 messages without UDP | |||
| encapsulation. | ||||
| The UDP encapsulated I1 packet could be received by three different | The UDP-encapsulated I1 packet could be received by four different | |||
| types of hosts: | types of hosts: | |||
| 1. HIP Control Relay Server: in this case the A/AAAA records refers | HIP Control Relay Server: In this case, the A/AAAA records refer to | |||
| to a Control Relay Server, and it will forward the packet to the | a Control Relay Server, which will forward the packet to the | |||
| corresponding Control Relay Client based on the destination HIT | corresponding Control Relay Client based on the destination HIT in | |||
| in the I1 packet. | the I1 packet. | |||
| 2. HIP Responder supporting UDP encapsulation: in this case, the A/ | HIP Responder supporting UDP encapsulation: In this case, the A/AAAA | |||
| AAAA records refers to the end-host. Assuming the destination | records refer to the end host. Assuming the destination HIT | |||
| HIT belongs to the Responder, it receives and processes it | belongs to the Responder, the Responder receives and processes the | |||
| according to the negotiated NAT traversal mechanism. The support | I1 packet according to the negotiated NAT traversal mechanism. | |||
| for the protocol defined in this document vs [RFC5770] is | The support for the protocol defined in this document, as opposed | |||
| dynamically negotiated during the base exchange. The details are | to the support defined in [RFC5770], is dynamically negotiated | |||
| specified in Section 4.3. | during the base exchange. The details are specified in | |||
| Section 4.3. | ||||
| 3. HIP Rendezvous Server: this entity is not listening to UDP port | HIP Rendezvous Server: This entity is not listening to UDP port | |||
| 10500, so it will drop the I1 message. | 10500, so it will drop the I1 message. | |||
| 4. HIP Responder not supporting UDP encapsulation: the targeted end- | HIP Responder not supporting UDP encapsulation: The targeted end | |||
| host is not listening to UDP port 10500, so it will drop the I1 | host is not listening to UDP port 10500, so it will drop the I1 | |||
| message. | message. | |||
| The A/AAAA-record MUST NOT be configured to refer to a Data Relay | The A/AAAA record MUST NOT be configured to refer to a Data Relay | |||
| Server unless the host in question supports also Control Relay Server | Server unless the host in question also supports Control Relay Server | |||
| functionality. | functionality. | |||
| It also worth noting that SRV records are not employed in this | It is also worth noting that SRV records are not employed in this | |||
| specification. While they could be used for more flexible UDP port | specification. While they could be used for more flexible UDP port | |||
| selection, they are not suitable for end-host discovery but rather | selection, they are not suitable for end-host discovery but rather | |||
| would be more suitable for the discovery of HIP-specific | would be more suitable for the discovery of HIP-specific | |||
| infrastructure. Further extensions to this document may define SRV | infrastructure. Further extensions to this document may define SRV | |||
| records for Control and Data Relay Server discovery within a DNS | records for Control and Data Relay Server discovery within a DNS | |||
| domain. | domain. | |||
| Acknowledgments | ||||
| Thanks to Jonathan Rosenberg, Christer Holmberg, and the rest of the | ||||
| MMUSIC WG folks for the excellent work on ICE. The authors would | ||||
| also like to thank Andrei Gurtov, Simon Schuetz, Martin Stiemerling, | ||||
| Lars Eggert, Vivien Schmitt, and Abhinav Pathak for their | ||||
| contributions, and Tobias Heer, Teemu Koponen, Juhana Mattila, | ||||
| Jeffrey M. Ahrenholz, Kristian Slavov, Janne Lindqvist, Pekka | ||||
| Nikander, Lauri Silvennoinen, Jukka Ylitalo, Juha Heinanen, Joakim | ||||
| Koskela, Samu Varjonen, Dan Wing, Tom Henderson, Alex Elsayed, Jani | ||||
| Hautakorpi, Tero Kauppinen, and Timo Simanainen for their comments to | ||||
| [RFC5770] and this document. Thanks to Éric Vyncke, Alvaro Retana, | ||||
| Adam Roach, Ben Campbell, Eric Rescorla, Mirja Kühlewind, Spencer | ||||
| Dawkins, Derek Fawcus, Tianran Zhou, Amanda Barber, Colin Perkins, | ||||
| Roni Even, Alissa Cooper, Carl Wallace, Martin Duke, and Benjamin | ||||
| Kaduk for reviewing this document. | ||||
| This work has been partially funded by the Cyber Trust Program by | ||||
| Digile/Tekes in Finland. | ||||
| Contributors | ||||
| Marcelo Bagnulo, Philip Matthews, and Hannes Tschofenig have | ||||
| contributed to [RFC5770]. This document leans heavily on the work in | ||||
| that RFC. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Ari Keranen | Ari Keränen | |||
| Ericsson | Ericsson | |||
| Hirsalantie 11 | Hirsalantie 11 | |||
| 02420 Jorvas | FI-02420 Jorvas | |||
| Finland | Finland | |||
| Email: ari.keranen@ericsson.com | Email: ari.keranen@ericsson.com | |||
| Jan Melen | ||||
| Jan Melén | ||||
| Ericsson | Ericsson | |||
| Hirsalantie 11 | Hirsalantie 11 | |||
| 02420 Jorvas | FI-02420 Jorvas | |||
| Finland | Finland | |||
| Email: jan.melen@ericsson.com | Email: jan.melen@ericsson.com | |||
| Miika Komu (editor) | Miika Komu (editor) | |||
| Ericsson | Ericsson | |||
| Hirsalantie 11 | Hirsalantie 11 | |||
| 02420 Jorvas | FI-02420 Jorvas | |||
| Finland | Finland | |||
| Email: miika.komu@ericsson.com | Email: miika.komu@ericsson.com | |||
| End of changes. 346 change blocks. | ||||
| 1182 lines changed or deleted | 1247 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/ | ||||