draft-ietf-ipsecme-ipsecha-protocol-06.txt | rfc6311.txt | |||
---|---|---|---|---|
Network Working Group R. Singh, Ed. | Internet Engineering Task Force (IETF) R. Singh, Ed. | |||
Internet-Draft G. Kalyani | Request for Comments: 6311 G. Kalyani | |||
Intended status: Standards Track Cisco | Category: Standards Track Cisco | |||
Expires: November 7, 2011 Y. Nir | ISSN: 2070-1721 Y. Nir | |||
Check Point | Check Point | |||
Y. Sheffer | Y. Sheffer | |||
Porticor | Porticor | |||
D. Zhang | D. Zhang | |||
Huawei | Huawei | |||
May 6, 2011 | July 2011 | |||
Protocol Support for High Availability of IKEv2/IPsec | Protocol Support for High Availability of IKEv2/IPsec | |||
draft-ietf-ipsecme-ipsecha-protocol-06 | ||||
Abstract | Abstract | |||
The IPsec protocol suite is widely used for business-critical network | The IPsec protocol suite is widely used for business-critical network | |||
traffic. In order to make IPsec deployments highly available, more | traffic. In order to make IPsec deployments highly available, more | |||
scalable and failure-resistant, they are often implemented as IPsec | scalable, and failure-resistant, they are often implemented as IPsec | |||
High Availability (HA) clusters. However there are many issues in | High Availability (HA) clusters. However, there are many issues in | |||
IPsec HA clustering, and in particular in IKEv2 clustering. An | IPsec HA clustering, and in particular in Internet Key Exchange | |||
earlier document, "IPsec Cluster Problem Statement", enumerates the | Protocol version 2 (IKEv2) clustering. An earlier document, "IPsec | |||
issues encountered in the IKEv2/IPsec HA cluster environment. This | Cluster Problem Statement", enumerates the issues encountered in the | |||
document resolves these issues with the least possible change to the | IKEv2/IPsec HA cluster environment. This document resolves these | |||
protocol. | issues with the least possible change to the protocol. | |||
This document defines an extension to the IKEv2 protocol to solve the | This document defines an extension to the IKEv2 protocol to solve the | |||
main issues of "IPsec Cluster Problem Statement" in the commonly | main issues of "IPsec Cluster Problem Statement" in the commonly | |||
deployed hot-standby cluster, and provides implementation advice for | deployed hot standby cluster, and provides implementation advice for | |||
other issues. The main issues solved are the synchronization of | other issues. The main issues solved are the synchronization of | |||
IKEv2 Message ID counters, and of IPsec Replay Counters. | IKEv2 Message ID counters, and of IPsec replay counters. | |||
Status of this Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | This document is a product of the Internet Engineering Task Force | |||
Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 5741. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
time. It is inappropriate to use Internet-Drafts as reference | http://www.rfc-editor.org/info/rfc6311. | |||
material or to cite them other than as "work in progress." | ||||
This Internet-Draft will expire on November 7, 2011. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2011 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
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 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction ....................................................3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology .....................................................5 | |||
3. Issues Resolved from IPsec Cluster Problem Statement . . . . . 7 | 3. Issues Resolved from IPsec Cluster Problem Statement ............7 | |||
3.1. Large Amount of State . . . . . . . . . . . . . . . . . . 7 | 3.1. Large Amount of State ......................................8 | |||
3.2. Multiple Members Using the Same SA . . . . . . . . . . . . 8 | 3.2. Multiple Members Using the Same SA .........................9 | |||
3.3. Avoiding Collisions in SPI Number Allocation . . . . . . . 8 | 3.3. Avoiding Collisions in SPI Number Allocation ...............9 | |||
3.4. Interaction with Counter Modes . . . . . . . . . . . . . . 8 | 3.4. Interaction with Counter Modes .............................9 | |||
4. The IKEv2/IPsec SA Counter Synchronization Problem . . . . . . 9 | 4. The IKEv2/IPsec SA Counter Synchronization Problem .............10 | |||
5. SA Counter Synchronization Solution . . . . . . . . . . . . . 10 | 5. SA Counter Synchronization Solution ............................11 | |||
5.1. Processing Rules for IKE Message ID Synchronization . . . 12 | 5.1. Processing Rules for IKE Message ID Synchronization .......13 | |||
5.2. Processing Rules for IPsec Replay Counter | 5.2. Processing Rules for IPsec Replay Counter | |||
Synchronization . . . . . . . . . . . . . . . . . . . . . 13 | Synchronization ...........................................14 | |||
6. IKEv2/IPsec Synchronization Notification Payloads . . . . . . 13 | 6. IKEv2/IPsec Synchronization Notification Payloads ..............14 | |||
6.1. The IKEV2_MESSAGE_ID_SYNC_SUPPORTED Notification . . . . . 14 | 6.1. The IKEV2_MESSAGE_ID_SYNC_SUPPORTED Notification ..........15 | |||
6.2. The IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED Notification . . . 14 | 6.2. The IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED Notification ......15 | |||
6.3. The IKEV2_MESSAGE_ID_SYNC Notification . . . . . . . . . . 15 | 6.3. The IKEV2_MESSAGE_ID_SYNC Notification ....................16 | |||
6.4. The IPSEC_REPLAY_COUNTER_SYNC Notification . . . . . . . . 15 | 6.4. The IPSEC_REPLAY_COUNTER_SYNC Notification ................16 | |||
7. Implementation Details . . . . . . . . . . . . . . . . . . . . 16 | 7. Implementation Details .........................................17 | |||
8. IKE SA and IPsec SA Message Sequencing . . . . . . . . . . . . 17 | 8. IKE SA and IPsec SA Message Sequencing .........................18 | |||
8.1. Handling of Pending IKE Messages . . . . . . . . . . . . . 17 | 8.1. Handling of Pending IKE Messages ..........................18 | |||
8.2. Handling of Pending IPsec Messages . . . . . . . . . . . . 17 | 8.2. Handling of Pending IPsec Messages ........................18 | |||
8.3. IKE SA Inconsistencies . . . . . . . . . . . . . . . . . . 17 | 8.3. IKE SA Inconsistencies ....................................19 | |||
9. Step by Step Details . . . . . . . . . . . . . . . . . . . . . 18 | 9. Step-by-Step Details ...........................................19 | |||
10. Interaction with other specifications . . . . . . . . . . . . 18 | 10. Interaction with Other Specifications .........................20 | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | 11. Security Considerations .......................................21 | |||
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 12. IANA Considerations ...........................................21 | |||
13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 20 | 13. Acknowledgements ..............................................22 | |||
14. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 14. References ....................................................22 | |||
14.1. Draft -06 . . . . . . . . . . . . . . . . . . . . . . . . 21 | 14.1. Normative References .....................................22 | |||
14.2. Draft -05 . . . . . . . . . . . . . . . . . . . . . . . . 21 | 14.2. Informative References ...................................22 | |||
14.3. Draft -04 . . . . . . . . . . . . . . . . . . . . . . . . 21 | Appendix A. IKEv2 Message ID Sync Examples ........................24 | |||
14.4. Draft -03 . . . . . . . . . . . . . . . . . . . . . . . . 21 | A.1. Normal Failover -- Example 1 ...............................24 | |||
14.5. Draft -02 . . . . . . . . . . . . . . . . . . . . . . . . 21 | A.2. Normal Failover -- Example 2 ...............................24 | |||
14.6. Draft -01 . . . . . . . . . . . . . . . . . . . . . . . . 21 | A.3. Normal Failover -- Example 3 ...............................25 | |||
14.7. Draft -00 . . . . . . . . . . . . . . . . . . . . . . . . 22 | A.4. Simultaneous Failover ......................................25 | |||
15. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
15.1. Normative References . . . . . . . . . . . . . . . . . . . 22 | ||||
15.2. Informative References . . . . . . . . . . . . . . . . . . 22 | ||||
Appendix A. IKEv2 Message ID Sync Examples . . . . . . . . . . . 23 | ||||
A.1. Normal Failover - Example 1 . . . . . . . . . . . . . . . 23 | ||||
A.2. Normal Failover - Example 2 . . . . . . . . . . . . . . . 24 | ||||
A.3. Normal Failover - Example 3 . . . . . . . . . . . . . . . 24 | ||||
A.4. Simultaneous Failover . . . . . . . . . . . . . . . . . . 24 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
1. Introduction | 1. Introduction | |||
The IPsec protocol suite, including IKEv2, is a major building block | The IPsec protocol suite, including the Internet Key Exchange | |||
of virtual private networks (VPNs). In order to make such VPNs | Protocol version 2 (IKEv2), is a major building block of virtual | |||
highly available, more scalable and failure-resistant, these VPNs are | private networks (VPNs). In order to make such VPNs highly | |||
implemented as IKEv2/IPsec Highly Available (HA) clusters. However | available, more scalable, and failure-resistant, these VPNs are | |||
there are many issues with the IKEv2/IPsec HA cluster. Section 3 and | implemented as IKEv2/IPsec Highly Available (HA) clusters. However, | |||
Section 4 below expand on the issues around the IKEv2/IPsec HA | there are many issues with the IKEv2/IPsec HA cluster. Sections 3 | |||
cluster solution, issues which were first described in the Problem | and 4 below expand on the issues around the IKEv2/IPsec HA cluster | |||
Statement [4]. | solution, issues which were first described in the problem | |||
statement [6]. | ||||
In the case of a hot-standby cluster implementation of IKEv2/IPsec | In the case of a hot standby cluster implementation of IKEv2/ | |||
based VPNs, the IKEv2/IPsec session is first established between the | IPsec-based VPNs, the IKEv2/IPsec session is first established | |||
peer and the active member of the cluster. Later, the active member | between the peer and the active member of the cluster. Later, the | |||
continuously syncs/updates the IKE/IPsec SA state to the standby | active member continuously syncs/updates the IKE/IPsec security | |||
member of the cluster. This primary SA state sync-up takes place | association (SA) state to the standby member of the cluster. This | |||
upon each SA bring-up and/or rekey. Performing the SA state | primary SA state sync-up takes place upon each SA bring-up and/or | |||
synchronization/update for every single IKE and IPsec message is very | rekey. Performing the SA state synchronization/update for every | |||
costly, so normally it is done periodically. As a result, when the | single IKE and IPsec message is very costly, so normally it is done | |||
failover event happens, this is first detected by the standby member | periodically. As a result, when the failover event happens, this is | |||
and, possibly after a considerable amount of time, it becomes the | first detected by the standby member and, possibly after a | |||
active member. During this failover process the peer is unaware of | considerable amount of time, it becomes the active member. During | |||
the failover event, and keeps sending IKE requests and IPsec packets | this failover process, the peer is unaware of the failover event, and | |||
to the cluster, as in fact it is allowed to do because of the IKEv2 | keeps sending IKE requests and IPsec packets to the cluster, as in | |||
windowing feature. After the newly-active member starts, it detects | fact it is allowed to do because of the IKEv2 windowing feature. | |||
the mismatch in IKE Message ID values and IPsec replay counters and | After the newly active member starts, it detects the mismatch in IKE | |||
needs to resolve this situation. Please see Section 4 for more | Message ID values and IPsec replay counters and needs to resolve this | |||
details of the problem. | situation. Please see Section 4 for more details of the problem. | |||
This document defines an extension to the IKEv2 protocol to solve the | This document defines an extension to the IKEv2 protocol to solve the | |||
main issues of IKE Message ID synchronization and IPsec SA replay | main issues of IKE Message ID synchronization and IPsec SA replay | |||
counter synchronization, and gives implementation advice to address | counter synchronization, and gives implementation advice to address | |||
other issues. Following is a summary of the solutions provided in | other issues. Following is a summary of the solutions provided in | |||
this document: | this document: | |||
o IKEv2 Message ID synchronization: this is done by syncing up the | o IKEv2 Message ID synchronization: This is done by syncing up the | |||
expected send and receive Message ID values with the peer, and | expected send and receive Message ID values with the peer, and | |||
updating the values at the newly active cluster member. | updating the values at the newly active cluster member. | |||
o IPsec Replay Counter synchronization: this is done by incrementing | ||||
o IPsec replay counter synchronization: This is done by incrementing | ||||
the cluster's outgoing SA replay counter values by a "large" | the cluster's outgoing SA replay counter values by a "large" | |||
number; in addition, the newly-active member requests the peer to | number; in addition, the newly active member requests the peer to | |||
increment the replay counter values it is using for the peer's | increment the replay counter values it is using for the peer's | |||
outgoing traffic. | outgoing traffic. | |||
Although this document describes the IKEv2 Message ID and IPsec | Although this document describes the IKEv2 Message ID and IPsec | |||
replay counter synchronization in the context of an IPsec HA cluster, | replay counter synchronization in the context of an IPsec HA cluster, | |||
the solution provided is generic and can be used in other scenarios | the solution provided is generic and can be used in other scenarios | |||
where IKEv2 Message ID or IPsec SA replay counter synchronization may | where IKEv2 Message ID or IPsec SA replay counter synchronization may | |||
be required. | be required. | |||
Implementations differ on the need to synchronize the IKEv2 Message | Implementations differ on the need to synchronize the IKEv2 Message | |||
skipping to change at page 5, line 18 | skipping to change at page 5, line 17 | |||
separately, using a separate notification for each capability. This | separately, using a separate notification for each capability. This | |||
provides the flexibility of implementing either or both of these | provides the flexibility of implementing either or both of these | |||
solutions. | solutions. | |||
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", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [1]. | document are to be interpreted as described in [1]. | |||
"SA Counter Synchronization Request/Response" are the request viz. | "SA Counter Synchronization" is the informational exchange defined in | |||
response of the informational exchange defined in this document to | this document to synchronize the IKEv2/IPsec SA counter information | |||
synchronize the IKEv2/IPsec SA counter information between one member | between one member of the cluster and the peer. | |||
of the cluster and the peer. | ||||
Some of the terms listed below are reused from [4] with further | Some of the terms listed below are reused from [6] with further | |||
clarification in the context of the current document. | clarification in the context of the current document. | |||
o "Hot Standby Cluster", or "HS Cluster" is a cluster where only one | o "Hot Standby Cluster", or "HS Cluster", is a cluster where only | |||
of the members is active at any one time. This member is also | one of the members is active at any one time. This member is also | |||
referred to as the "active" member, whereas the other(s) are | referred to as the "active" member, whereas the other(s) are | |||
referred to as "standby" members. VRRP [5] is one method of | referred to as "standby" members. The Virtual Router Redundancy | |||
building such a cluster. The goal of the Hot Standby Cluster is | Protocol (VRRP) [7] is one method of building such a cluster. The | |||
to create the illusion of a single virtual gateway to the peer(s). | goal of the hot standby cluster is to create the illusion of a | |||
o "Active Member" is the primary member in the Hot-Standby cluster. | single virtual gateway to the peer(s). | |||
o "Active Member" is the primary member in the hot standby cluster. | ||||
It is responsible for forwarding packets on behalf of the virtual | It is responsible for forwarding packets on behalf of the virtual | |||
gateway. | gateway. | |||
o "Standby Member" is the primary backup member. This member takes | o "Standby Member" is the primary backup member. This member takes | |||
control, i.e. becomes the active member, after the failover event. | control, i.e., becomes the active member, after the failover | |||
event. | ||||
o "Peer" is an IKEv2/IPsec endpoint that maintains an IPsec | o "Peer" is an IKEv2/IPsec endpoint that maintains an IPsec | |||
connection with the Hot-Standby cluster. The Peer identifies the | connection with the hot standby cluster. The peer identifies the | |||
cluster by the cluster's (single) IP address. If a failover event | cluster by the cluster's (single) IP address. If a failover event | |||
occurs, the standby member of the cluster becomes active, and the | occurs, the standby member of the cluster becomes active, and the | |||
peer normally doesn't notice that failover has taken place. | peer normally doesn't notice that failover has taken place. | |||
Although we treat the peer as a single entity, it may also be a | Although we treat the peer as a single entity, it may also be a | |||
cluster. | cluster. | |||
o "Multiple failover" is the situation where, in a cluster with | o "Multiple failover" is the situation where, in a cluster with | |||
three or more members, multiple failover events happen in rapid | three or more members, multiple failover events happen in rapid | |||
succession, e.g. from M1 to M2, and then to M3. It is our goal | succession, e.g., from M1 to M2, and then to M3. It is our goal | |||
that the implementation should be able to handle this situation, | that the implementation should be able to handle this situation, | |||
i.e. to handle the new failover event even if it is still | i.e., to handle the new failover event even if it is still | |||
processing the old failover. | processing the old failover. | |||
o "Simultaneous failover" is the situation where two clusters have | o "Simultaneous failover" is the situation where two clusters have | |||
an IPsec connection between them, and failover happens at both | an IPsec connection between them, and failover happens at both | |||
ends at the same time. It is our goal that implementations should | ends at the same time. It is our goal that implementations should | |||
be able to handle simultaneous failover. | be able to handle simultaneous failover. | |||
o "IPsec replay counter" is the Encapsulating Security Payload (ESP) | ||||
Sequence Number or Extended Sequence Number (Section 2.2 of [2]), | ||||
or the respective field in the Authentication Header (AH) protocol | ||||
(Section 2.5 of [3]). | ||||
The generic term "IKEv2/IPsec SA Counters" is used throughout this | The generic term "IKEv2/IPsec SA Counters" is used throughout this | |||
document. This term refers to both IKEv2 Message ID counters and | document. This term refers to both IKEv2 Message ID counters and | |||
IPsec replay counters. According to the IPsec standards, the IKEv2 | IPsec replay counters. According to the IPsec standards, the IKEv2 | |||
Message ID counter is mandatory, and used to ensure reliable delivery | Message ID counter is mandatory, and used to ensure reliable delivery | |||
as well as to protect against message replay in IKEv2; the IPsec SA | as well as to protect against message replay in IKEv2; the IPsec SA | |||
replay counters are optional, and are used to provide the IPsec anti- | replay counters are optional, and are used to provide the IPsec anti- | |||
replay feature. | replay feature. | |||
Some of these terms are used in the following architectural diagram. | Some of these terms are used in the following architectural diagram. | |||
skipping to change at page 6, line 33 | skipping to change at page 7, line 20 | |||
| Cluster | | | Cluster | | |||
| | | | | | |||
| +---------+ | | | +---------+ | | |||
| | | | | | | | | | |||
| | Active | | | | | Active | | | |||
| | | | | | | | | | |||
| | Member | | | | | Member | | | |||
| | | | | | | | | | |||
| +---------+ | | | +---------+ | | |||
| ^ | | | ^ | | |||
+---------+ | Sync | | | +---------+ | Synch | | | |||
| | | Channel | | | | | | Channel | | | |||
| IPsec | IKE/IPsec Traffic | | | | | IPsec | IKE/IPsec Traffic | | | | |||
| | <=============================> | | | | | | <=============================> | | | | |||
| Peer | | | | | | Peer | | | | | |||
| | | | | | | | | | | | |||
+---------+ | | | | +---------+ | | | | |||
| v | | | v | | |||
| +---------+ | | | +---------+ | | |||
| | | | | | | | | | |||
| | Standby | | | | | Standby | | | |||
| | | | | | | | | | |||
| | Member | | | | | Member | | | |||
| | | | | | | | | | |||
| +---------+ | | | +---------+ | | |||
+---------------+ | +---------------+ | |||
An IPsec Hot Standby Cluster | An IPsec Hot Standby Cluster | |||
3. Issues Resolved from IPsec Cluster Problem Statement | 3. Issues Resolved from IPsec Cluster Problem Statement | |||
The IPsec Cluster Problem Statement [4] enumerates the problems | "IPsec Cluster Problem Statement" [6] enumerates the problems raised | |||
raised by IPsec clusters. The following table lists the problem | by IPsec clusters. The following table lists the problem statement's | |||
statement's sections that are resolved by this document. | sections that are resolved by this document. | |||
o 3.2. Lots of Long Lived State | ||||
o 3.2. A Lot of Long-Lived State | ||||
o 3.3. IKE Counters | o 3.3. IKE Counters | |||
o 3.4. Outbound SA Counters | o 3.4. Outbound SA Counters | |||
o 3.5. Inbound SA Counters | o 3.5. Inbound SA Counters | |||
o 3.6. Missing Synchronization Messages | o 3.6. Missing Synch Messages | |||
o 3.7. Simultaneous use of IKE and IPsec SAs by Different Members | o 3.7. Simultaneous Use of IKE and IPsec SAs by Different Members | |||
* 3.7.1. Outbound SAs using counter modes | * 3.7.1. Outbound SAs Using Counter Modes | |||
o 3.8. Different IP addresses for IKE and IPsec | o 3.8. Different IP Addresses for IKE and IPsec | |||
o 3.9. Allocation of SPIs | o 3.9. Allocation of SPIs | |||
The main problem areas are solved using the protocol extension | The main problem areas are solved using the protocol extension | |||
defined below, starting with Section 5; additionally, this section | defined below, starting with Section 5; additionally, this section | |||
provides implementation advice for other issues in the following | provides implementation advice for other issues in the following | |||
subsections. Implementers should note that these subsections include | subsections. Implementers should note that these subsections include | |||
a number of new security-critical requirements. | a number of new security-critical requirements. | |||
3.1. Large Amount of State | 3.1. Large Amount of State | |||
Section 3.2 of the Problem Statement mentions that a lot of state | Section 3.2 of the problem statement [6] mentions that a lot of state | |||
needs to be synchronized for a cluster to be transparent. The actual | needs to be synchronized for a cluster to be transparent. The actual | |||
volume of that data is very much implementation-dependent, and even | volume of that data is very much implementation-dependent, and even | |||
for the same implementation, the amounts of data may vary wildly. An | for the same implementation, the amounts of data may vary wildly. An | |||
IPsec gateway used for inter-domain VPN with a dozen other gateways, | IPsec gateway used for inter-domain VPN with a dozen other gateways, | |||
and having SAs that are rekeyed every 8 hours, will need a lot less | and having SAs that are rekeyed every 8 hours, will need a lot less | |||
synchronization traffic than a similar gateway used for remote | synchronization traffic than a similar gateway used for remote | |||
access, and supporting 10,000 clients. This is because counter | access, and supporting 10,000 clients. This is because counter | |||
synchronization is proportional to the number of SAs and requires | synchronization is proportional to the number of SAs and requires | |||
little data, and the setting up of an SA requires a lot of data. | little data, and the setting up of an SA requires a lot of data. | |||
Additionally, remote access IKE and IPsec SA setup tend to happen at | Additionally, remote access IKE and IPsec SA setup tend to happen at | |||
skipping to change at page 7, line 52 | skipping to change at page 8, line 41 | |||
period of time. | period of time. | |||
If a large volume of traffic is necessary, it may be advisable to use | If a large volume of traffic is necessary, it may be advisable to use | |||
a dedicated high-speed network interface for synch traffic. When | a dedicated high-speed network interface for synch traffic. When | |||
packet loss can be made extremely low, it may be advisable to use a | packet loss can be made extremely low, it may be advisable to use a | |||
stateless transport such as UDP, to minimize network overhead. | stateless transport such as UDP, to minimize network overhead. | |||
If these methods are insufficient, it may be prudent that for some | If these methods are insufficient, it may be prudent that for some | |||
SAs the entire state is not synchronized. Instead, only an | SAs the entire state is not synchronized. Instead, only an | |||
indication of the SA's existence is synchronized. This, in | indication of the SA's existence is synchronized. This, in | |||
combination with a sticky solution (as described in section 3.7 of | combination with a sticky solution (as described in Section 3.7 of | |||
the problem statement) ensures that the traffic from a particular | the problem statement [6]) ensures that the traffic from a particular | |||
peer does not reach a different member before an actual failover | peer does not reach a different member before an actual failover | |||
happens. When that happens, the method described in [6] can be used | happens. When that happens, the method described in [8] can be used | |||
to quickly force the peer to set up a new SA. | to quickly force the peer to set up a new SA. | |||
3.2. Multiple Members Using the Same SA | 3.2. Multiple Members Using the Same SA | |||
In a load-sharing cluster of the "duplicate" variety (see section 3.7 | In a load-sharing cluster of the "duplicate" variety (see Section 3.7 | |||
of the problem statement) multiple members may need to send traffic | of the problem statement [6]), multiple members may need to send | |||
with the same selectors. To actually use the same SA the cluster | traffic with the same selectors. To actually use the same SA, the | |||
would have to synchronize the Replay Counter after every packet, and | cluster would have to synchronize the replay counter after every | |||
that would impose unreasonable requirements on the synch connection. | packet, and that would impose unreasonable requirements on the synch | |||
connection. | ||||
A far better solution would be to not synchronize the outbound SA, | A far better solution would be to not synchronize the outbound SA, | |||
and create multiple outbound SAs, one for each member. The problem | and create multiple outbound SAs, one for each member. The problem | |||
with this option is that the peer might view these multiple parallel | with this option is that the peer might view these multiple parallel | |||
SAs as redundant, and tear down all but one of them. | SAs as redundant, and tear down all but one of them. | |||
Section 2.8 of [2] specifically allows multiple parallel SAs, but the | Section 2.8 of [4] specifically allows multiple parallel SAs, but the | |||
reason given for this is to have multiple SAs with different QoS | reason given for this is to have multiple SAs with different Quality | |||
attributes. So while this is not a new requirement of IKEv2 | of Service (QoS) attributes. So while this is not a new requirement | |||
implementations working with QoS, we re-iterate here that IPsec peers | of IKEv2 implementations working with QoS, we re-iterate here that | |||
MUST accept the long-term existence of multiple parallel SAs, even | IPsec peers MUST accept the long-term existence of multiple parallel | |||
when QoS mechanisms are not in use. | SAs, even when QoS mechanisms are not in use. | |||
3.3. Avoiding Collisions in SPI Number Allocation | 3.3. Avoiding Collisions in SPI Number Allocation | |||
Section 3.9 of the problem statement describes the problem of two | Section 3.9 of the problem statement [6] describes the problem of two | |||
cluster members allocating the same SPI number for two different SAs. | cluster members allocating the same Security Parameter Index (SPI) | |||
This would violate section 4.4.2.1 of [3]. There are several schemes | number for two different SAs. This behavior would violate | |||
to allow implementations to avoid such collisions, such as | Section 4.4.2.1 of [5]. There are several schemes to allow | |||
partitioning the SPI space, a request-response over the synch | implementations to avoid such collisions, such as partitioning the | |||
channel, and locking mechanisms. We believe that these are | SPI space, a request-response over the synch channel, and locking | |||
sufficiently robust and available so that we don't need to make an | mechanisms. We believe that these are sufficiently robust and | |||
exception to RFC 4301, and we can leave this problem for the | available so that we don't need to make an exception to the rules in | |||
implementations to solve. Cluster members must not generate multiple | Section 4.4.2.1 of RFC 4301 [5], and we can leave this problem for | |||
inbound SAs with the same SPI. | the implementations to solve. Cluster members must not generate | |||
multiple inbound SAs with the same SPI. | ||||
3.4. Interaction with Counter Modes | 3.4. Interaction with Counter Modes | |||
For SAs involving counter mode ciphers such as CTR [7] or GCM [8] | For SAs involving counter mode ciphers such as Counter Mode (CTR) [9] | |||
there is yet another complication. The initial vector for such modes | or Galois/Counter Mode (GCM) [10], there is yet another complication. | |||
MUST NOT be repeated, and senders may use methods such as counters or | The initial vector for such modes MUST NOT be repeated, and senders | |||
LFSRs to ensure this property. For an SA shared between multiple | may use methods such as counters or linear feedback shift registers | |||
active members (load sharing cases), implementations MUST ensure that | (LFSRs) to ensure this property. For an SA shared between multiple | |||
active members (load-sharing cases), implementations MUST ensure that | ||||
no initial vector is ever repeated. Similar concerns apply to an SA | no initial vector is ever repeated. Similar concerns apply to an SA | |||
failing over from one member to another. See [9] for a discussion of | failing over from one member to another. See [11] for a discussion | |||
this problem in another context. | of this problem in another context. | |||
Just as in the SPI collision problem, there are ways to avoid a | Just as in the SPI collision problem, there are ways to avoid a | |||
collision of initial vectors, and this is left up to implementations. | collision of initial vectors, and this is left up to implementations. | |||
In the context of load sharing, parallel SAs are a simple solution to | In the context of load sharing, parallel SAs are a simple solution to | |||
this problem as well. | this problem as well. | |||
4. The IKEv2/IPsec SA Counter Synchronization Problem | 4. The IKEv2/IPsec SA Counter Synchronization Problem | |||
The IKEv2 protocol [2] states that "An IKE endpoint MUST NOT exceed | The IKEv2 protocol [4] states that "An IKE endpoint MUST NOT exceed | |||
the peer's stated window size for transmitted IKE requests". | the peer's stated window size for transmitted IKE requests". | |||
All IKEv2 messages are required to follow a request-response | All IKEv2 messages are required to follow a request-response | |||
paradigm. The initiator of an IKEv2 request MUST retransmit the | paradigm. The initiator of an IKEv2 request MUST retransmit the | |||
request, until it has received a response from the peer. IKEv2 | request, until it has received a response from the peer. IKEv2 | |||
introduces a windowing mechanism that allows multiple requests to be | introduces a windowing mechanism that allows multiple requests to be | |||
outstanding at a given point of time, but mandates that the sender's | outstanding at a given point of time, but mandates that the sender's | |||
window should not move until the oldest message it has sent is | window should not move until the oldest message it has sent is | |||
acknowledged. Loss of even a single message leads to repeated | acknowledged. Loss of even a single message leads to repeated | |||
retransmissions followed by an IKEv2 SA teardown if the | retransmissions followed by an IKEv2 SA teardown if the | |||
retransmissions remain unacknowledged. | retransmissions remain unacknowledged. | |||
An IPsec Hot Standby Cluster is required to ensure that in the case | An IPsec hot standby cluster is required to ensure that in the case | |||
of failover, the standby member becomes active immediately. The | of failover, the standby member becomes active immediately. The | |||
standby member is expected to have the exact value of the Message ID | standby member is expected to have the exact value of the Message ID | |||
counter as the active member had before failover. Even assuming the | counter as the active member had before failover. Even assuming the | |||
best effort to update the Message ID values from active to standby | best effort to update the Message ID values from active to standby | |||
member, the values at the standby member can still be stale due to | member, the values at the standby member can still be stale due to | |||
the following reasons: | the following reasons: | |||
o The standby member is unaware of the last message that was | o The standby member is unaware of the last message that was | |||
received and acknowledged by the previously active member, as the | received and acknowledged by the previously active member, as the | |||
failover event could have happened before the standby member could | failover event could have happened before the standby member could | |||
be updated. | be updated. | |||
o The standby member does not have information about on-going | o The standby member does not have information about on-going | |||
unacknowledged requests sent by the previously active member. As | unacknowledged requests sent by the previously active member. As | |||
a result after the failover event, the newly active member cannot | a result, after the failover event, the newly active member cannot | |||
retransmit those requests. | retransmit those requests. | |||
When a standby member takes over as the active member, it can only | When a standby member takes over as the active member, it can only | |||
initialize the Message ID values from the previously updated values. | initialize the Message ID values from the previously updated values. | |||
This would make it reject requests from the peer when these values | This would make it reject requests from the peer when these values | |||
are stale. Conversely, the standby member may end up reusing a stale | are stale. Conversely, the standby member may end up reusing a stale | |||
Message ID value which would cause the peer to drop the request. | Message ID value, which would cause the peer to drop the request. | |||
Eventually there is a high probability of the IKEv2 and corresponding | Eventually, there is a high probability of the IKEv2 and | |||
IPsec SAs getting torn down simply because of a transitory Message ID | corresponding IPsec SAs getting torn down simply because of a | |||
mismatch and retransmission of requests, negating the benefits of the | transitory Message ID mismatch and retransmission of requests, | |||
high availability cluster despite the periodic update between the | negating the benefits of the high-availability cluster despite the | |||
cluster members. | periodic update between the cluster members. | |||
A similar issue is also observed with IPsec anti-replay counters if | A similar issue is also observed with IPsec anti-replay counters if | |||
anti-replay protection is enabled, which is commonly the case. | anti-replay protection is enabled, which is commonly the case. | |||
Regardless of how well the ESP and AH SA counters are synchronized | Regardless of how well the ESP and AH SA counters are synchronized | |||
from the active to the standby member, there is a chance that the | from the active to the standby member, there is a chance that the | |||
standby member would end up with stale counter values. The standby | standby member would end up with stale counter values. The standby | |||
member would then use those stale counter values when sending IPsec | member would then use those stale counter values when sending IPsec | |||
packets. The peer would drop such packets since when the anti-replay | packets. The peer would drop such packets, since when the anti- | |||
protection feature is enabled, duplicate use of counters is not | replay protection feature is enabled, duplicate use of counters is | |||
allowed. Note that IPsec allows the sender to skip some counter | not allowed. Note that IPsec allows the sender to skip some counter | |||
values and continue sending with higher counter values. | values and continue sending with higher counter values. | |||
We conclude that a mechanism is required to ensure that the standby | We conclude that a mechanism is required to ensure that the standby | |||
member has correct Message ID and IPsec counter values when it | member has correct Message ID and IPsec counter values when it | |||
becomes active, so that sessions are not torn down as a result of | becomes active, so that sessions are not torn down as a result of | |||
mismatched counters. | mismatched counters. | |||
5. SA Counter Synchronization Solution | 5. SA Counter Synchronization Solution | |||
This document defines two separate approaches to resolving the issues | This document defines two separate approaches to resolving the issues | |||
of mismatched IKE Message ID values and IPsec counter values. | of mismatched IKE Message ID values and IPsec counter values. | |||
o In the case of IKE Message ID values, the newly active cluster | o In the case of IKE Message ID values, the newly active cluster | |||
member and the peer negotiate a pair of new values so that future | member and the peer negotiate a pair of new values so that future | |||
IKE messages will not be dropped. | IKE messages will not be dropped. | |||
o For IPsec counter values, the newly-active member and the peer | ||||
o For IPsec counter values, the newly active member and the peer | ||||
both increment their respective counter values, "skipping forward" | both increment their respective counter values, "skipping forward" | |||
by a large number, to ensure that no IPsec counters are ever | by a large number, to ensure that no IPsec counters are ever | |||
reused. | reused. | |||
Although conceptually separate, the two synchronization processes | Although conceptually separate, the two synchronization processes | |||
would typically take place simultaneously. | would typically take place simultaneously. | |||
First, the peer and the active member of the cluster negotiate their | First, the peer and the active member of the cluster negotiate their | |||
ability to support IKEv2 Message ID synchronization and/or IPsec | ability to support IKEv2 Message ID synchronization and/or IPsec | |||
Replay Counter synchronization. This is done by exchanging one or | replay counter synchronization. This is done by exchanging one or | |||
both of the IKEV2_MESSAGE_ID_SYNC_SUPPORTED and | both of the IKEV2_MESSAGE_ID_SYNC_SUPPORTED and | |||
IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED notifications during the IKE_AUTH | IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED notifications during the IKE_AUTH | |||
exchange. When negotiating these capabilities, the responder MUST | exchange. When negotiating these capabilities, the responder MUST | |||
NOT assert support of a capability unless such support was asserted | NOT assert support of a capability unless such support was asserted | |||
by the initiator. Only a capability whose support was asserted by | by the initiator. Only a capability whose support was asserted by | |||
both parties can be used during the lifetime of the SA. The peer's | both parties can be used during the lifetime of the SA. The peer's | |||
capabilities with regard to this extension are part of the IKEv2 SA | capabilities with regard to this extension are part of the IKEv2 SA | |||
state, and thus MUST be shared between the cluster members. | state, and thus MUST be shared between the cluster members. | |||
This per-IKE SA information is shared with the other cluster members. | This per-IKE SA information is shared with the other cluster members. | |||
Peer Active Member | Peer Active Member | |||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |||
HDR, SK {IDi, [CERT], [CERTREQ], [IDr], AUTH, | HDR, SK {IDi, [CERT], [CERTREQ], [IDr], AUTH, | |||
[N(IKEV2_MESSAGE_ID_SYNC_SUPPORTED),] | [N(IKEV2_MESSAGE_ID_SYNC_SUPPORTED),] | |||
[N(IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED),] | [N(IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED),] | |||
SAi2, TSi, TSr} ----------> | SAi2, TSi, TSr} ----------> | |||
<-------- HDR, SK {IDr, [CERT+], [CERTREQ+], AUTH, | <-------- HDR, SK {IDr, [CERT+], [CERTREQ+], AUTH, | |||
[N(IKEV2_MESSAGE_ID_SYNC_SUPPORTED),] | [N(IKEV2_MESSAGE_ID_SYNC_SUPPORTED),] | |||
[N(IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED),] SAr2, TSi, TSr} | [N(IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED),] | |||
SAr2, TSi, TSr} | ||||
After a failover event, the standby member MAY use the IKE Message ID | After a failover event, the standby member MAY use the IKE Message ID | |||
and/or IPsec Replay Counter synchronization capability when it | and/or IPsec replay counter synchronization capability when it | |||
becomes the active member, and provided support for the capabilities | becomes the active member, and provided support for the capabilities | |||
used has been negotiated. Following that, the peer MUST respond to | used has been negotiated. Following that, the peer MUST respond to | |||
any synchronization message it receives from the newly-active cluster | any synchronization message it receives from the newly active cluster | |||
member, subject to the rules noted below. | member, subject to the rules noted below. | |||
After the failover event, when the standby member becomes active, it | After the failover event, when the standby member becomes active, it | |||
has to synchronize its SA counters with the peer. There are now four | has to synchronize its SA counters with the peer. There are now four | |||
possible cases: | possible cases: | |||
1. The cluster member wishes to only perform IKE Message ID value | 1. The cluster member wishes to only perform IKE Message ID value | |||
synchronization. In this case it initiates an Informational | synchronization. In this case, it initiates an Informational | |||
exchange, with Message ID zero and the sole notification | exchange, with Message ID zero and the sole notification | |||
IKEV2_MESSAGE_ID_SYNC. | IKEV2_MESSAGE_ID_SYNC. | |||
2. If the newly-active member wishes to perform only IPsec replay | ||||
2. If the newly active member wishes to perform only IPsec replay | ||||
counter synchronization, it generates a regular IKEv2 | counter synchronization, it generates a regular IKEv2 | |||
Informational exchange using the current Message ID values, and | Informational exchange using the current Message ID values, and | |||
containing the IPSEC_REPLAY_COUNTER_SYNC notification. | containing the IPSEC_REPLAY_COUNTER_SYNC notification. | |||
3. If synchronization of both counters is needed, the cluster member | 3. If synchronization of both counters is needed, the cluster member | |||
generates a zero-Message ID message as in case #1, and includes | generates a zero-Message ID message as in case #1, and includes | |||
both notifications in this message. | both notifications in this message. | |||
4. Lastly, the peer may not support this extension. This is known | 4. Lastly, the peer may not support this extension. This is known | |||
to the newly-active member (because the cluster members must | to the newly active member (because the cluster members must | |||
share this information, as noted earlier). This case is the | share this information, as noted earlier). This case is the | |||
existing IKEv2 behavior, and the IKE and IPsec SAs may or may not | existing IKEv2 behavior, and the IKE and IPsec SAs may or may not | |||
survive the failover, depending on the exact state on the peer | survive the failover, depending on the exact state on the peer | |||
and the cluster member. | and the cluster member. | |||
This figure contains the IKE message exchange used for SA counter | This figure contains the IKE message exchange used for SA counter | |||
synchronization. The following subsections describe the details of | synchronization. The following subsections describe the details of | |||
the sender and receiver processing of each message. | the sender and receiver processing of each message. | |||
Standby [Newly Active] Member Peer | Standby [Newly Active] Member Peer | |||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |||
HDR, SK {N(IKEV2_MESSAGE_ID_SYNC), | HDR, SK {N(IKEV2_MESSAGE_ID_SYNC), | |||
[N(IPSEC_REPLAY_COUNTER_SYNC)]} --------> | [N(IPSEC_REPLAY_COUNTER_SYNC)]} --------> | |||
<--------- HDR, SK {N(IKEV2_MESSAGE_ID_SYNC)} | <--------- HDR, SK {N(IKEV2_MESSAGE_ID_SYNC)} | |||
Alternatively, if only IPsec Replay Counter synchronization is | Alternatively, if only IPsec replay counter synchronization is | |||
desired, a normal Informational exchange is used, where the Message | desired, a normal Informational exchange is used, where the Message | |||
ID is non-zero: | ID is non-zero: | |||
Standby [Newly Active] Member Peer | Standby [Newly Active] Member Peer | |||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |||
HDR, SK{N(IPSEC_REPLAY_COUNTER_SYNC)} --------> | HDR, SK{N(IPSEC_REPLAY_COUNTER_SYNC)} --------> | |||
<--------- HDR | <--------- HDR | |||
5.1. Processing Rules for IKE Message ID Synchronization | 5.1. Processing Rules for IKE Message ID Synchronization | |||
The newly-active member sends a request containing two counter | The newly active member sends a request containing two counter | |||
values, one for the member (itself) and another for the peer, as well | values, one for the member (itself) and another for the peer, as well | |||
as a random nonce. We denote the values M1 and P1. The peer | as a random nonce. We denote the values M1 and P1. The peer | |||
responds with a message containing two counter values, M2 and P2 | responds with a message containing two counter values, M2 and P2 | |||
(note that the values appear in the opposite order in the | (note that the values appear in the opposite order in the | |||
notification's payload). The goal of the rules below is to prevent | notification's payload). The goal of the rules below is to prevent | |||
an attacker from replaying a synchronization message, thereby | an attacker from replaying a synchronization message and thereby | |||
invalidating IKE messages that are currently in process. | invalidating IKE messages that are currently in process. | |||
o M1 is the next sender's Message ID to be used by the member. M1 | o M1 is the next sender's Message ID to be used by the member. M1 | |||
MUST be chosen so that it is larger than any value known to have | MUST be chosen so that it is larger than any value known to have | |||
been used. It is RECOMMENDED to increment the known value at | been used. It is RECOMMENDED to increment the known value at | |||
least by the size of the IKE sender window. | least by the size of the IKE sender window. | |||
o P1 SHOULD be 1 more than the last Message ID value received from | o P1 SHOULD be 1 more than the last Message ID value received from | |||
the peer, but may be any higher value. | the peer, but may be any higher value. | |||
o The member SHOULD communicate the sent values to the other cluster | o The member SHOULD communicate the sent values to the other cluster | |||
members, so that if a second failover event takes place, the | members, so that if a second failover event takes place, the | |||
synchronization message is not replayed. Such a replay would | synchronization message is not replayed. Such a replay would | |||
result in the eventual deletion of the IKE SA (see below). | result in the eventual deletion of the IKE SA (see below). | |||
o The peer MUST silently drop any received synchronization message | o The peer MUST silently drop any received synchronization message | |||
if M1 is lower than or equal to the highest value it has seen from | if M1 is lower than or equal to the highest value it has seen from | |||
the cluster. This includes any previous received synchronization | the cluster. This includes any previous received synchronization | |||
messages. | messages. | |||
o M2 MUST be at least the higher of the received M1, and one more | o M2 MUST be at least the higher of the received M1, and one more | |||
than the highest sender value received from the cluster. This | than the highest sender value received from the cluster. This | |||
includes any previous received synchronization messages. | includes any previous received synchronization messages. | |||
o P2 MUST be the higher of the received P1 value, and one more than | o P2 MUST be the higher of the received P1 value, and one more than | |||
the highest sender value used by the peer. | the highest sender value used by the peer. | |||
o The request contains a Nonce field. This field MUST be returned | o The request contains a Nonce field. This field MUST be returned | |||
in the response, unchanged. A response MUST be silently dropped | in the response, unchanged. A response MUST be silently dropped | |||
if the received Nonce does not match the one that was sent. | if the received nonce does not match the one that was sent. | |||
o Both the request and the response MUST NOT contain any additional | o Both the request and the response MUST NOT contain any additional | |||
payloads, other than an optional IPSEC_REPLAY_COUNTER_SYNC | payloads, other than an optional IPSEC_REPLAY_COUNTER_SYNC | |||
notification in the request. | notification in the request. | |||
o The request and the response MUST both be sent with a Message ID | o The request and the response MUST both be sent with a Message ID | |||
value of zero. | value of zero. | |||
5.2. Processing Rules for IPsec Replay Counter Synchronization | 5.2. Processing Rules for IPsec Replay Counter Synchronization | |||
Upon failover, the newly-active member MUST increment its own Replay | Upon failover, the newly active member MUST increment its own replay | |||
Counter (the counter used for outgoing traffic), so as to prevent the | counter (the counter used for outgoing traffic), so as to prevent the | |||
case of its traffic being dropped by the peer as replay. We note | case of its traffic being dropped by the peer as replay. We note | |||
that IPsec allows the replay counter to skip forward by any amount. | that IPsec allows the replay counter to skip forward by any amount. | |||
The estimate is based on the outgoing IPsec bandwidth and the | The estimate is based on the outgoing IPsec bandwidth and the | |||
frequency of synchronization between cluster members. In those | frequency of synchronization between cluster members. In those | |||
implementations where it is difficult to estimate this value, the | implementations where it is difficult to estimate this value, the | |||
counter can be incremented by a very large number, e.g. 2**30. In | counter can be incremented by a very large number, e.g., 2**30. In | |||
the latter case, a rekey SHOULD follow shortly afterwards, to ensure | the latter case, a rekey SHOULD follow shortly afterwards, to ensure | |||
that the counter never wraps around. | that the counter never wraps around. | |||
Next, the cluster member estimates the number of incoming messages it | Next, the cluster member estimates the number of incoming messages it | |||
might have missed, using similar logic. The member sends out a | might have missed, using similar logic. The member sends out an | |||
IPSEC_REPLAY_COUNTER_SYNC notification, either stand-alone or | IPSEC_REPLAY_COUNTER_SYNC notification, either stand-alone or | |||
together with a IKEV2_MESSAGE_ID_SYNC notification. | together with an IKEV2_MESSAGE_ID_SYNC notification. | |||
If the IPSEC_REPLAY_COUNTER_SYNC is included in the same message as | If the IPSEC_REPLAY_COUNTER_SYNC is included in the same message as | |||
IKEV2_MESSAGE_ID_SYNC, the peer MUST process the Message ID | IKEV2_MESSAGE_ID_SYNC, the peer MUST process the Message ID | |||
notification first (which might cause the entire message to be | notification first (which might cause the entire message to be | |||
dropped as a replay). Then, it MUST increment the replay counters | dropped as a replay). Then, it MUST increment the replay counters | |||
for all Child SAs associated with the current IKE SA by the amount | for all Child SAs associated with the current IKE SA by the amount | |||
requested by the cluster member. | requested by the cluster member. | |||
6. IKEv2/IPsec Synchronization Notification Payloads | 6. IKEv2/IPsec Synchronization Notification Payloads | |||
skipping to change at page 14, line 21 | skipping to change at page 15, line 25 | |||
1 2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Payload |C| RESERVED | Payload Length | | | Next Payload |C| RESERVED | Payload Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The 'Next Payload', 'Payload Length', 'Protocol ID', 'SPI Size', and | The 'Next Payload', 'Payload Length', 'Protocol ID', 'SPI Size', and | |||
'Notify Message Type' fields are the same as described in Section 3 | 'Notify Message Type' fields are the same as described in Section 3 | |||
of [2]. The 'SPI Size' field MUST be set to 0 to indicate that the | of [4]. The 'SPI Size' field MUST be set to 0 to indicate that the | |||
SPI is not present in this message. The 'Protocol ID' MUST be set to | SPI is not present in this message. The 'Protocol ID' MUST be set to | |||
0, since the notification is not specific to a particular security | 0, since the notification is not specific to a particular security | |||
association. The 'Payload Length' field is set to the length in | association. The 'Payload Length' field is set to the length in | |||
octets of the entire payload, including the generic payload header. | octets of the entire payload, including the generic payload header. | |||
The 'Notify Message Type' field is set to indicate | The 'Notify Message Type' field is set to indicate | |||
IKEV2_MESSAGE_ID_SYNC_SUPPORTED, value TBD by IANA. There is no data | IKEV2_MESSAGE_ID_SYNC_SUPPORTED (16420). There is no data associated | |||
associated with this notification. | with this notification. | |||
6.2. The IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED Notification | 6.2. The IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED Notification | |||
This notification payload is included in the IKE_AUTH request/ | This notification payload is included in the IKE_AUTH request/ | |||
response to indicate support for the IPsec SA Replay Counter | response to indicate support for the IPsec SA replay counter | |||
synchronization mechanism described in this document. | synchronization mechanism described in this document. | |||
1 2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Payload |C| RESERVED | Payload Length | | | Next Payload |C| RESERVED | Payload Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The 'Next Payload', 'Payload Length', 'Protocol ID', 'SPI Size', and | The 'Next Payload', 'Payload Length', 'Protocol ID', 'SPI Size', and | |||
'Notify Message Type' fields are the same as described in Section 3 | 'Notify Message Type' fields are the same as described in Section 3 | |||
of [2] . The 'SPI Size' field MUST be set to 0 to indicate that the | of [4] . The 'SPI Size' field MUST be set to 0 to indicate that the | |||
SPI is not present in this message. The 'Protocol ID' MUST be set to | SPI is not present in this message. The 'Protocol ID' MUST be set to | |||
0, since the notification is not specific to a particular security | 0, since the notification is not specific to a particular security | |||
association. The 'Payload Length' field is set to the length in | association. The 'Payload Length' field is set to the length in | |||
octets of the entire payload, including the generic payload header. | octets of the entire payload, including the generic payload header. | |||
The 'Notify Message Type' field is set to indicate | The 'Notify Message Type' field is set to indicate | |||
IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED, value TBD by IANA. There is no | IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED (16421). There is no data | |||
data associated with this notification. | associated with this notification. | |||
6.3. The IKEV2_MESSAGE_ID_SYNC Notification | 6.3. The IKEV2_MESSAGE_ID_SYNC Notification | |||
This notification payload type (value TBD by IANA) is defined to | This notification payload type (16422) is defined to synchronize the | |||
synchronize the IKEv2 Message ID values between the newly-active | IKEv2 Message ID values between the newly active (formerly standby) | |||
(formerly standby) cluster member and the peer. | cluster member and the peer. | |||
1 2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Payload |C| RESERVED | Payload Length | | | Next Payload |C| RESERVED | Payload Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Nonce Data | | | Nonce Data | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| EXPECTED_SEND_REQ_MESSAGE_ID | | | EXPECTED_SEND_REQ_MESSAGE_ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| EXPECTED_RECV_REQ_MESSAGE_ID | | | EXPECTED_RECV_REQ_MESSAGE_ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
It contains the following data. | It contains the following data. | |||
o Nonce Data (4 octets): the random nonce data. The data should be | ||||
o Nonce Data (4 octets): The random nonce data. The data should be | ||||
identical in the synchronization request and response. | identical in the synchronization request and response. | |||
o EXPECTED_SEND_REQ_MESSAGE_ID (4 octets): this field is used by the | ||||
o EXPECTED_SEND_REQ_MESSAGE_ID (4 octets): This field is used by the | ||||
sender of this notification payload to indicate the Message ID it | sender of this notification payload to indicate the Message ID it | |||
will use in the next request that it will send to the other | will use in the next request that it will send to the other | |||
protocol peer. | protocol peer. | |||
o EXPECTED_RECV_REQ_MESSAGE_ID (4 octets): this field is used by the | ||||
o EXPECTED_RECV_REQ_MESSAGE_ID (4 octets): This field is used by the | ||||
sender of this notification payload to indicate the Message ID it | sender of this notification payload to indicate the Message ID it | |||
is expecting in the next request to be received from the other | is expecting in the next request to be received from the other | |||
protocol peer. | protocol peer. | |||
6.4. The IPSEC_REPLAY_COUNTER_SYNC Notification | 6.4. The IPSEC_REPLAY_COUNTER_SYNC Notification | |||
This notification payload type (value TBD by IANA) is defined to | This notification payload type (16423) is defined to synchronize the | |||
synchronize the IPsec SA Replay Counters between the newly-active | IPsec SA replay counters between the newly active (formerly standby) | |||
(formerly standby) cluster member and the peer. Since there may be | cluster member and the peer. Since there may be numerous IPsec SAs | |||
numerous IPsec SAs established under a single IKE SA, we do not | established under a single IKE SA, we do not directly synchronize the | |||
directly synchronize the value of each one. Instead, a delta value | value of each one. Instead, a delta value is sent, and all replay | |||
is sent and all Replay Counters for Child SAs of this IKE SA are | counters for Child SAs of this IKE SA are incremented by the same | |||
incremented by the same value. Note that this solution requires that | value. Note that this solution requires that either all Child SAs | |||
either all Child SAs use Extended Sequence Numbers or else that no | use Extended Sequence Numbers (ESNs) or else that no Child SA uses | |||
Child SA uses Extended Sequence Numbers [3]. This notification is | ESNs. This notification is only sent by the cluster. | |||
only sent by the cluster. | ||||
1 2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Payload |C| RESERVED | Payload Length | | | Next Payload |C| RESERVED | Payload Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Incoming IPsec SA delta value | | | Incoming IPsec SA delta value | | |||
skipping to change at page 16, line 19 | skipping to change at page 17, line 23 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Payload |C| RESERVED | Payload Length | | | Next Payload |C| RESERVED | Payload Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |Protocol ID(=0)| SPI Size (=0) | Notify Message Type | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Incoming IPsec SA delta value | | | Incoming IPsec SA delta value | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The notification payload contains the following data. | The notification payload contains the following data. | |||
o Incoming IPsec SA delta value (4 or 8 octets): The sender requests | o Incoming IPsec SA delta value (4 or 8 octets): The sender requests | |||
that the peer should increment all the Child SA Replay Counters | that the peer should increment all the Child SA replay counters | |||
for the sender's incoming (the peer's outgoing) traffic by this | for the sender's incoming (the peer's outgoing) traffic by this | |||
value. The size of this field depends on the ESN bit associated | value. The size of this field depends on the ESN bit associated | |||
with the Child SAs: if the ESN bit is 1, the field's size is 8 | with the Child SAs: if the ESN bit is 1, the field's size is 8 | |||
octets, otherwise it is 4 octets. We note that this constrains | octets; otherwise, it is 4 octets. We note that this constrains | |||
the Child SAs of each IKE SA to either all have the ESN bit on or | the Child SAs of each IKE SA to either all have the ESN bit on | |||
off. | or off. | |||
7. Implementation Details | 7. Implementation Details | |||
This protocol does not change any of the existing IKEv2 rules | This protocol does not change any of the existing IKEv2 rules | |||
regarding Message ID values. | regarding Message ID values. | |||
The standby member can initiate the synchronization of IKEv2 Message | The standby member can initiate the synchronization of IKEv2 Message | |||
ID's under different circumstances. | IDs under different circumstances. | |||
o When it receives a problematic IKEv2/IPsec packet, i.e. a packet | ||||
o When it receives a problematic IKEv2/IPsec packet, i.e., a packet | ||||
outside its expected receive window. | outside its expected receive window. | |||
o When it has to send the first IKEv2/IPsec packet after a failover | o When it has to send the first IKEv2/IPsec packet after a failover | |||
event. | event. | |||
o When it has just received control from the active member and | o When it has just received control from the active member and | |||
wishes to update the values proactively, so that it need not start | wishes to update the values proactively, so that it need not start | |||
this exchange later, when sending or receiving the request. | this exchange later, when sending or receiving the request. | |||
To clarify the first alternative: the normal IKE behavior of | To clarify the first alternative: the normal IKE behavior of | |||
rejecting out-of-window messages is not changed, but such messages | rejecting out-of-window messages is not changed, but such messages | |||
can still be a valid trigger for the exchange defined in this | can still be a valid trigger for the exchange defined in this | |||
document. To avoid DoS attacks resulting from replayed messages, the | document. To avoid denial-of-service (DoS) attacks resulting from | |||
peer MUST NOT initiate counter synchronization for any particular IKE | replayed messages, the peer MUST NOT initiate counter synchronization | |||
SA more than once per failover event. | for any particular IKE SA more than once per failover event. | |||
The standby member can initiate the synchronization of IPsec SA | The standby member can initiate the synchronization of IPsec SA | |||
Replay Counters: | replay counters: | |||
o If there has been traffic using the IPsec SA in the recent past | o If there has been traffic using the IPsec SA in the recent past | |||
and the standby member suspects that its Replay Counter may be | and the standby member suspects that its replay counter may be | |||
stale. | stale. | |||
Since there can be a large number of sessions at the standby member, | Since there can be a large number of sessions at the standby member, | |||
and sending synchronization exchanges for all of them may result in | and sending synchronization exchanges for all of them may result in | |||
overload, the standby member can choose to initiate the exchange in a | overload, the standby member can choose to initiate the exchange in a | |||
"lazy" fashion: only when it has to send or expects to receive | "lazy" fashion: only when it has to send or expects to receive | |||
traffic from each peer. In general, the standby member is free to | traffic from each peer. In general, the standby member is free to | |||
initiate this exchange at its discretion. Implementation | initiate this exchange at its discretion. Implementation | |||
considerations include the ability to survive a certain amount of | considerations include the ability to survive a certain amount of | |||
traffic loss, and the capacity of a cluster member to initiate | traffic loss, and the capacity of a cluster member to initiate | |||
counter synchronization simultaneously with a large number of peers. | counter synchronization simultaneously with a large number of peers. | |||
8. IKE SA and IPsec SA Message Sequencing | 8. IKE SA and IPsec SA Message Sequencing | |||
The straightforward definitions of message sequence numbers, | The straightforward definitions of message sequence numbers, | |||
retransmissions and replay protection in IPsec and IKEv2 are strained | retransmissions, and replay protection in IPsec and IKEv2 are | |||
by the failover scenarios described in this document. This section | strained by the failover scenarios described in this document. This | |||
describes some policy choices that need to be made by implementations | section describes some policy choices that need to be made by | |||
in this setting. | implementations in this setting. | |||
8.1. Handling of Pending IKE Messages | 8.1. Handling of Pending IKE Messages | |||
After sending its "receive" counter, the cluster member MUST reject | After sending its "receive" counter, the cluster member MUST reject | |||
(silently drop) any incoming IKE messages that are outside its | (silently drop) any incoming IKE messages that are outside its | |||
declared window. A similar rule applies to the peer. Local policies | declared window. A similar rule applies to the peer. Local policies | |||
vary, and strict implementations will reject any incoming IKE message | vary, and strict implementations will reject any incoming IKE message | |||
arriving before Message ID synchronization is complete. | arriving before Message ID synchronization is complete. | |||
8.2. Handling of Pending IPsec Messages | 8.2. Handling of Pending IPsec Messages | |||
For IPsec, there is often a trade-off between security and | For IPsec, there is often a trade-off between security and | |||
reliability of the protected protocols. Here again there is some | reliability of the protected protocols. Here again, there is some | |||
leeway for local policy. Some implementations might accept incoming | leeway for local policy. Some implementations might accept incoming | |||
traffic that is outside the replay window for some time after the | traffic that is outside the replay window for some time after the | |||
failover event, and until the counters had been synchronized. Strict | failover event, and until the counters had been synchronized. Strict | |||
implementations will only accept traffic that's inside the "safe" | implementations will only accept traffic that's inside the "safe" | |||
window. | window. | |||
8.3. IKE SA Inconsistencies | 8.3. IKE SA Inconsistencies | |||
IKEv2 is normally a reliable protocol. As long as an IKE SA is | IKEv2 is normally a reliable protocol. As long as an IKE SA is | |||
valid, both peers share a single, consistent view of the IKE SA and | valid, both peers share a single, consistent view of the IKE SA and | |||
all associated Child SAs. Failover situations as described in this | all associated Child SAs. Failover situations as described in this | |||
document may involve forced deletion of IKE messages, resulting in | document may involve forced deletion of IKE messages, resulting in | |||
inconsistencies, such as Child SAs that exist on only one of the | inconsistencies, such as Child SAs that exist on only one of the | |||
peers. Such SAs might cause an INVALID_SPI to be returned when used | peers. Such SAs might cause an INVALID_SPI to be returned when used | |||
by that peer. Note that Sec. 1.5 of [2] allows but does not mandate | by that peer. Note that Section 1.5 of [4] allows but does not | |||
sending an INVALID_SPI notification in this case. | mandate sending an INVALID_SPI notification in this case. | |||
The Working Group discussed at some point a proposed set of rules for | The IPsecME Working Group discussed at some point a proposed set of | |||
dealing with such situations. However we believe that these | rules for dealing with such situations. However, we believe that | |||
situations should be rare in practice; as a result the "default" | these situations should be rare in practice; as a result, the | |||
behavior of tearing down the entire IKE SA is to be preferred over | "default" behavior of tearing down the entire IKE SA is to be | |||
the complexity of dealing with a multitude of edge cases. | preferred over the complexity of dealing with a multitude of edge | |||
cases. | ||||
9. Step by Step Details | 9. Step-by-Step Details | |||
This section goes through the sequence of steps of a typical failover | This section goes through the sequence of steps of a typical failover | |||
event, looking at a case where the IKEv2 Message ID values are | event, looking at a case where the IKEv2 Message ID values are | |||
synchronized. | synchronized. | |||
o The active cluster member and the peer device establish the | o The active cluster member and the peer device establish the | |||
session. They both announce the capability to synchronize counter | session. They both announce the capability to synchronize counter | |||
information by sending the IKEV2_MESSAGE_ID_SYNC_SUPPORTED | information by sending the IKEV2_MESSAGE_ID_SYNC_SUPPORTED | |||
notification in the IKE_AUTH Exchange. | notification in the IKE_AUTH exchange. | |||
o Some time later, the active member dies, and a standby member | o Some time later, the active member dies, and a standby member | |||
takes over. The standby member sends its own idea of the IKE | takes over. The standby member sends its own idea of the IKE | |||
Message IDs (both incoming and outgoing) to the peer in an | Message IDs (both incoming and outgoing) to the peer in an | |||
Informational message exchange with Message ID zero. | Informational message exchange with Message ID zero. | |||
o The peer first authenticates the message. The peer compares the | o The peer first authenticates the message. The peer compares the | |||
received values with the values available locally and picks the | received values with the values available locally and picks the | |||
higher value. It then updates its Message IDs with the higher | higher value. It then updates its Message IDs with the higher | |||
values and also propose the same values in its response. | values and also proposes the same values in its response. | |||
o The peer should not wait for any pending responses while | o The peer should not wait for any pending responses while | |||
responding with the new Message ID values. For example, if the | responding with the new Message ID values. For example, if the | |||
window size is 5 and the peer's window is 3-7, and if the peer has | window size is 5 and the peer's window is 3-7, and if the peer has | |||
sent requests 3, 4, 5, 6, 7 and received responses only for 4, 5, | sent requests 3, 4, 5, 6, and 7 and received responses only for 4, | |||
6, 7 but not for 3, then it should include the value 8 in its | 5, 6, and 7 but not for 3, then it should include the value 8 in | |||
EXPECTED_SEND_REQ_MESSAGE_ID payload and should not wait for a | its EXPECTED_SEND_REQ_MESSAGE_ID payload and should not wait for a | |||
response to message 3 anymore. | response to message 3 any more. | |||
o Similarly, the peer should also not wait for pending (incoming) | o Similarly, the peer should also not wait for pending (incoming) | |||
requests. For example if the window size is 5 and the peer's | requests. For example, if the window size is 5 and the peer's | |||
window is 3-7 and if the peer has received requests 4, 5, 6, 7 but | window is 3-7, and if the peer has received requests 4, 5, 6, and | |||
not 3, then it should send the value 8 in the | 7 but not 3, then it should send the value 8 in the | |||
EXPECTED_RECV_REQ_MESSAGE_ID payload, and should not expect to | EXPECTED_RECV_REQ_MESSAGE_ID payload, and should not expect to | |||
receive message 3 anymore. | receive message 3 any more. | |||
10. Interaction with other specifications | 10. Interaction with Other Specifications | |||
The usage scenario of this IKEv2/IPsec SA counter synchronization | The usage scenario of this IKEv2/IPsec SA counter synchronization | |||
solution is that an IKEv2 SA has been established between the active | solution is that an IKEv2 SA has been established between the active | |||
member of a hot-standby cluster and a peer, followed by a failover | member of a hot standby cluster and a peer, followed by a failover | |||
event occurring and the standby member becoming active. The solution | event occurring and the standby member becoming active. The solution | |||
further assumes that the IKEv2 SA state was continuously synchronized | further assumes that the IKEv2 SA state was continuously synchronized | |||
between the active and standby members of the cluster before the | between the active and standby members of the cluster before the | |||
failover event. | failover event. | |||
o Session resumption [10] assumes that a peer (client or initiator) | ||||
o Session resumption [12] assumes that a peer (client or initiator) | ||||
detects the need to re-establish the session. In IKEv2/IPsec SA | detects the need to re-establish the session. In IKEv2/IPsec SA | |||
counter synchronization, it is the newly-active member (a gateway | counter synchronization, it is the newly active member (a gateway | |||
or responder) that detects the need to synchronize the SA counter | or responder) that detects the need to synchronize the SA counter | |||
after the failover event. Also in a hot-standby cluster, the peer | after the failover event. Also, in a hot standby cluster, the | |||
establishes the IKEv2/IPsec session with a single IP address that | peer establishes the IKEv2/IPsec session with a single IP address | |||
represents the whole cluster, so the peer normally does not detect | that represents the whole cluster, so the peer normally does not | |||
the event of failover in the cluster unless the standby member | detect the event of failover in the cluster unless the standby | |||
takes too long to become active and the IKEv2 SA times out by use | member takes too long to become active and the IKEv2 SA times out | |||
of the IKEv2 liveness check mechanism. To conclude, session | by use of the IKEv2 liveness check mechanism. To conclude, | |||
resumption and SA counter synchronization after failover are | session resumption and SA counter synchronization after failover | |||
mutually exclusive: they are not expected to be used together, and | are mutually exclusive: they are not expected to be used together, | |||
both features can coexist within the same implementation without | and both features can coexist within the same implementation | |||
affecting each other. | without affecting each other. | |||
o The IKEv2 Redirect mechanism for load-balancing [11] can be used | ||||
o The IKEv2 Redirect mechanism for load balancing [13] can be used | ||||
either during the initial stages of SA setup (the IKE_SA_INIT and | either during the initial stages of SA setup (the IKE_SA_INIT and | |||
IKE_AUTH exchanges) or after session establishment. SA counter | IKE_AUTH exchanges) or after session establishment. SA counter | |||
synchronization is only useful after the IKE SA has been | synchronization is only useful after the IKE SA has been | |||
established and a failover event has occurred. So, unlike | established and a failover event has occurred. So, unlike | |||
Redirect, it is irrelevant during the first two exchanges. | Redirect, it is irrelevant during the first two exchanges. | |||
Redirect after the session has been established is mostly useful | Redirect after the session has been established is mostly useful | |||
for timed or planned shutdown/maintenance. A real failover event | for timed or planned shutdown/maintenance. A real failover event | |||
cannot be detected by the active member ahead of time, and so | cannot be detected by the active member ahead of time, and so | |||
using Redirect after session establishment is not possible in the | using Redirect after session establishment is not possible in the | |||
case of failover. So, Redirect and SA counter synchronization | case of failover. So, Redirect and SA counter synchronization | |||
after failover are mutually exclusive, in the sense described | after failover are mutually exclusive, in the sense described | |||
above. | above. | |||
o IKEv2 Failure Detection [6] solves a similar problem where the | ||||
o IKEv2 Failure Detection [8] solves a similar problem where the | ||||
peer can rapidly detect that a cluster member has crashed based on | peer can rapidly detect that a cluster member has crashed based on | |||
a token. It is unrelated to the current scenario because the goal | a token. It is unrelated to the current scenario, because the | |||
in failover is for the peer not to notice that a failure has | goal in failover is for the peer not to notice that a failure has | |||
occurred. | occurred. | |||
11. Security Considerations | 11. Security Considerations | |||
Since Message ID synchronization messages need to be sent with | Since Message ID synchronization messages need to be sent with | |||
Message ID zero, they are potentially vulnerable to replay attacks. | Message ID zero, they are potentially vulnerable to replay attacks. | |||
Because of the semantics of this protocol, these can only be denial- | Because of the semantics of this protocol, these can only be denial- | |||
of-service (DoS) attacks, and we are aware of two variants. | of-service (DoS) attacks, and we are aware of two variants. | |||
o Replay of Message ID synchronization request: This is countered by | o Replay of Message ID synchronization request: This is countered by | |||
the requirement that the Send counter sent by the cluster member | the requirement that the Send counter sent by the cluster member | |||
should always be monotonically increasing, a rule that the peer | should always be monotonically increasing, a rule that the peer | |||
enforces by silently dropping messages that contradict it. | enforces by silently dropping messages that contradict it. | |||
o Replay of the Message ID synchronization response: This is | o Replay of the Message ID synchronization response: This is | |||
countered by sending the nonce data along with the synchronization | countered by sending the nonce data along with the synchronization | |||
payload. The same nonce data has to be returned in the response. | payload. The same nonce data has to be returned in the response. | |||
Thus the standby member will accept a reply only for the current | Thus, the standby member will accept a reply only for the current | |||
request. After it receives a valid response, it MUST NOT process | request. After it receives a valid response, it MUST NOT process | |||
the same response again and MUST discard any additional responses. | the same response again and MUST discard any additional responses. | |||
As mentioned in Section 7, trigerring counter synchronization by out- | As mentioned in Section 7, triggering counter synchronization by out- | |||
of-window, potentially replayed messages, could open a DoS | of-window, potentially replayed messages could open a DoS | |||
vulnerability. This risk is mitigated by the solution described in | vulnerability. This risk is mitigated by the solution described in | |||
that section. | that section. | |||
12. IANA Considerations | 12. IANA Considerations | |||
This document introduces four new IKEv2 Notification Message types as | This document introduces four new IKEv2 Notification Message types as | |||
described in Section 6. The new Notify Message Types must be | described in Section 6. The new Notify Message Types have been | |||
assigned values between 16396 and 40959. | assigned values as follows. | |||
+-------------------------------------+-------------+ | +-------------------------------------+-------+ | |||
| Name | Value | | | Name | Value | | |||
+-------------------------------------+-------------+ | +-------------------------------------+-------+ | |||
| IKEV2_MESSAGE_ID_SYNC_SUPPORTED | TBD by IANA | | | IKEV2_MESSAGE_ID_SYNC_SUPPORTED | 16420 | | |||
| IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED | TBD by IANA | | | IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED | 16421 | | |||
| IKEV2_MESSAGE_ID_SYNC | TBD by IANA | | | IKEV2_MESSAGE_ID_SYNC | 16422 | | |||
| IPSEC_REPLAY_COUNTER_SYNC | TBD by IANA | | | IPSEC_REPLAY_COUNTER_SYNC | 16423 | | |||
+-------------------------------------+-------------+ | +-------------------------------------+-------+ | |||
13. Acknowledgements | 13. Acknowledgements | |||
We would like to thank Pratima Sethi and Frederic Detienne for their | We would like to thank Pratima Sethi and Frederic Detienne for their | |||
review comments and valuable suggestions for the initial version of | review comments and valuable suggestions for the initial version of | |||
the document. | the document. | |||
We would also like to thank the following people (in alphabetical | We would also like to thank the following people (in alphabetical | |||
order) for their review comments and valuable suggestions: Dan | order) for their review comments and valuable suggestions: Dan | |||
Harkins, Paul Hoffman, Steve Kent, Tero Kivinen, David McGrew, and | Harkins, Paul Hoffman, Steve Kent, Tero Kivinen, David McGrew, and | |||
Pekka Riikonen. | Pekka Riikonen. | |||
14. Change Log | 14. References | |||
This section lists all the changes in this document. | ||||
NOTE TO RFC EDITOR: Please remove this section before publication. | ||||
14.1. Draft -06 | ||||
Applied multiple review comments, from Pekka Riikonen, Alexey | ||||
Melnikov, Stephen Farrel, Robert Sparks, Pete Resnick, Russ Housley | ||||
and Adrian Farrel. Added an architectural reference diagram. Added | ||||
a MUST requirement for cluster members to share peers' support of | ||||
this protocol, which had been implicit in previous versions. | ||||
14.2. Draft -05 | ||||
Applied Sean Turner's review comments. | ||||
14.3. Draft -04 | ||||
Extended Sec. 3 for better coverage of other IPsec cluster-related | ||||
issues, and how they are resolved within the existing standards. | ||||
14.4. Draft -03 | ||||
Clarified the rules for Message ID sync, so that replay attacks can | ||||
be avoided without a failover counter. | ||||
Added wording regarding inconsistent IKE state (basically choosing to | ||||
ignore the problem) and further rules dealing with pending traffic. | ||||
The IPsec replay counter delta value now refers to incoming traffic. | ||||
The associated notification is only sent from the cluster to the | ||||
peer, and not back. | ||||
14.5. Draft -02 | ||||
Addressed comments by Yaron Sheffer posted on the WG mailing list. | ||||
Numerous editorial changes. | ||||
14.6. Draft -01 | ||||
Added "Multiple and Simultaneous failover" scenarios as pointed out | ||||
by Pekka Riikonen. | ||||
Now document provides a mechanism to sync either IKEv2 message or | ||||
IPsec replay counter or both to cater different types of | ||||
implementations. | ||||
HA cluster's "failover count' is used to encounter replay of sync | ||||
requests by attacker. | ||||
The sync of IPsec SA replay counter optimized to to have just one | ||||
global bumped-up outgoing IPsec SA counter of ALL Child SAs under an | ||||
IKEv2 SA. | ||||
The examples added for IKEv2 Message ID sync to provide more clarity. | ||||
Some edits as per comments on mailing list to enhance clarity. | ||||
14.7. Draft -00 | ||||
Version 00 is identical to | ||||
draft-kagarigi-ipsecme-ikev2-windowsync-04, started as WG document. | ||||
Added IPSECME WG HA design team members as authors. | ||||
Added comment in Introduction to discuss the window sync process on | ||||
WG mailing list to solve some concerns. | ||||
15. References | ||||
15.1. Normative References | 14.1. Normative References | |||
[1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
Levels", BCP 14, RFC 2119, March 1997. | Levels", BCP 14, RFC 2119, March 1997. | |||
[2] Kaufman, C., Hoffman, P., Nir, Y., and P. Eronen, "Internet Key | [2] Kent, S., "IP Encapsulating Security Payload (ESP)", RFC 4303, | |||
December 2005. | ||||
[3] Kent, S., "IP Authentication Header", RFC 4302, December 2005. | ||||
[4] Kaufman, C., Hoffman, P., Nir, Y., and P. Eronen, "Internet Key | ||||
Exchange Protocol Version 2 (IKEv2)", RFC 5996, September 2010. | Exchange Protocol Version 2 (IKEv2)", RFC 5996, September 2010. | |||
[3] Kent, S. and K. Seo, "Security Architecture for the Internet | [5] Kent, S. and K. Seo, "Security Architecture for the Internet | |||
Protocol", RFC 4301, December 2005. | Protocol", RFC 4301, December 2005. | |||
15.2. Informative References | 14.2. Informative References | |||
[4] Nir, Y., "IPsec Cluster Problem Statement", RFC 6027, | [6] Nir, Y., "IPsec Cluster Problem Statement", RFC 6027, | |||
October 2010. | October 2010. | |||
[5] Nadas, S., "Virtual Router Redundancy Protocol (VRRP) Version 3 | [7] Nadas, S., Ed., "Virtual Router Redundancy Protocol (VRRP) | |||
for IPv4 and IPv6", RFC 5798, March 2010. | Version 3 for IPv4 and IPv6", RFC 5798, March 2010. | |||
[6] Nir, Y., Wierbowski, D., Detienne, F., and P. Sethi, "A Quick | [8] Nir, Y., Ed., Wierbowski, D., Detienne, F., and P. Sethi, "A | |||
Crash Detection Method for IKE", | Quick Crash Detection Method for the Internet Key Exchange | |||
draft-ietf-ipsecme-failure-detection-08 (work in progress), | Protocol (IKE)", RFC 6290, June 2011. | |||
April 2011. | ||||
[7] Housley, R., "Using Advanced Encryption Standard (AES) Counter | [9] Housley, R., "Using Advanced Encryption Standard (AES) Counter | |||
Mode With IPsec Encapsulating Security Payload (ESP)", | Mode With IPsec Encapsulating Security Payload (ESP)", | |||
RFC 3686, January 2004. | RFC 3686, January 2004. | |||
[8] Viega, J. and D. McGrew, "The Use of Galois/Counter Mode (GCM) | [10] Viega, J. and D. McGrew, "The Use of Galois/Counter Mode (GCM) | |||
in IPsec Encapsulating Security Payload (ESP)", RFC 4106, | in IPsec Encapsulating Security Payload (ESP)", RFC 4106, | |||
June 2005. | June 2005. | |||
[9] McGrew, D. and B. Weis, "Using Counter Modes with Encapsulating | [11] McGrew, D. and B. Weis, "Using Counter Modes with Encapsulating | |||
Security Payload (ESP) and Authentication Header (AH) to | Security Payload (ESP) and Authentication Header (AH) to | |||
Protect Group Traffic", RFC 6054, November 2010. | Protect Group Traffic", RFC 6054, November 2010. | |||
[10] Sheffer, Y. and H. Tschofenig, "Internet Key Exchange Protocol | [12] Sheffer, Y. and H. Tschofenig, "Internet Key Exchange Protocol | |||
Version 2 (IKEv2) Session Resumption", RFC 5723, January 2010. | Version 2 (IKEv2) Session Resumption", RFC 5723, January 2010. | |||
[11] Devarapalli, V. and K. Weniger, "Redirect Mechanism for the | [13] Devarapalli, V. and K. Weniger, "Redirect Mechanism for the | |||
Internet Key Exchange Protocol Version 2 (IKEv2)", RFC 5685, | Internet Key Exchange Protocol Version 2 (IKEv2)", RFC 5685, | |||
November 2009. | November 2009. | |||
Appendix A. IKEv2 Message ID Sync Examples | Appendix A. IKEv2 Message ID Sync Examples | |||
This (non-normative) section presents some examples that illustrate | This (non-normative) section presents some examples that illustrate | |||
how the IKEv2 Message ID values are synchronized. We use a tuple | how the IKEv2 Message ID values are synchronized. We use a tuple | |||
notation, denoting the two counters EXPECTED_SEND_REQ_MESSAGE_ID and | notation, denoting the two counters EXPECTED_SEND_REQ_MESSAGE_ID and | |||
EXPECTED_RECV_REQ_MESSAGE_ID on each protocol party as | EXPECTED_RECV_REQ_MESSAGE_ID on each protocol party as | |||
(EXPECTED_SEND_REQ_MESSAGE_ID, EXPECTED_RECV_REQ_MESSAGE_ID). | (EXPECTED_SEND_REQ_MESSAGE_ID, EXPECTED_RECV_REQ_MESSAGE_ID). | |||
Note that if the IKE message counters are already synchronized (as in | Note that if the IKE message counters are already synchronized (as in | |||
the first example), we expect the numbers to be reversed between the | the first example), we expect the numbers to be reversed between the | |||
two sides. If one protocol party intends to send the next request as | two sides. If one protocol party intends to send the next request as | |||
4, then the other expects the next received request to be 4. | 4, then the other expects the next received request to be 4. | |||
A.1. Normal Failover - Example 1 | A.1. Normal Failover -- Example 1 | |||
Standby (Newly Active) Member Peer | Standby (Newly Active) Member Peer | |||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |||
Sync Request (0, 5) --------> | Sync Request (0, 5) --------> | |||
Peer has the values (5, 0) so it sends | Peer has the values (5, 0), so it sends | |||
<------------- (5, 0) as the Sync Response | <------------- (5, 0) as the Sync Response | |||
In this example, the peer has most recently sent an IKE request with | In this example, the peer has most recently sent an IKE request with | |||
Message ID 4, and has never received a request. So the peer's | Message ID 4, and has never received a request. So the peer's | |||
expected values for the next pair of messages are (5, 0). These are | expected values for the next pair of messages are (5, 0). These are | |||
the same values as received from the member and therefore they are | the same values as received from the member, and therefore they are | |||
sent as-is. | sent as-is. | |||
A.2. Normal Failover - Example 2 | A.2. Normal Failover -- Example 2 | |||
Standby (Newly Active) Member Peer | Standby (Newly Active) Member Peer | |||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |||
Sync Request (2, 3) --------> | Sync Request (2, 3) --------> | |||
Peer has the values (4, 5) so it sends | Peer has the values (4, 5), so it sends | |||
<------------- (4, 5) as the Sync Response | <------------- (4, 5) as the Sync Response | |||
In this example, the peer has most recently sent an IKE message with | In this example, the peer has most recently sent an IKE message with | |||
the Message ID 3, and received one with ID 4. So the peer's expected | the Message ID 3, and received one with ID 4. So the peer's expected | |||
values for the next pair of messages are (4, 5). These are both | values for the next pair of messages are (4, 5). These are both | |||
higher than the corresponding values just received from the member | higher than the corresponding values just received from the member | |||
(the order of tuple members is reversed when doing this comparison!), | (the order of tuple members is reversed when doing this comparison!), | |||
and therefore they are sent as-is. | and therefore they are sent as-is. | |||
A.3. Normal Failover - Example 3 | A.3. Normal Failover -- Example 3 | |||
Standby (Newly Active) Member Peer | Standby (Newly Active) Member Peer | |||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |||
Sync Request (2, 5) --------> | Sync Request (2, 5) --------> | |||
Peer has the values (2, 4) so it sends | Peer has the values (2, 4), so it sends | |||
<-------------(5, 4) as the Sync Response | <-------------(5, 4) as the Sync Response | |||
In this example, the newly active member expects to send the next IKE | In this example, the newly active member expects to send the next IKE | |||
message with ID 2. It sends an expected receive value of 5, which is | message with ID 2. It sends an expected receive value of 5, which is | |||
higher than the last ID value it has seen from the peer, because it | higher than the last ID value it has seen from the peer, because it | |||
believes some incoming messages may have been lost. The peer has | believes some incoming messages may have been lost. The peer has | |||
last sent a message with ID 1, and received one with ID 3, indicating | last sent a message with ID 1, and received one with ID 3, indicating | |||
that the a couple of messages sent by the previously active member | that a couple of messages sent by the previously active member had | |||
had not been synchronized into the other member. So the peer's next | not been synchronized into the other member. So the peer's next | |||
expected (send, receive) values are (2, 4). The peer replies with | expected (send, receive) values are (2, 4). The peer replies with | |||
the maximum of the received and the expected value for both send and | the maximum of the received and the expected value for both send and | |||
receive counters: (max(2, 5), max(4, 2)) = (5, 4). | receive counters: (max(2, 5), max(4, 2)) = (5, 4). | |||
A.4. Simultaneous Failover | A.4. Simultaneous Failover | |||
In the case of simultaneous failover, both sides send their | In the case of simultaneous failover, both sides send their | |||
synchronization requests simultaneously. The eventual outcome of | synchronization requests simultaneously. The eventual outcome of | |||
synchronization consists of the higher counter values. This is | synchronization consists of the higher counter values. This is | |||
demonstrated in the following figure. | demonstrated in the following figure. | |||
skipping to change at page 25, line 18 | skipping to change at page 26, line 7 | |||
Sync Request (4,4) -----> | Sync Request (4,4) -----> | |||
<-------------- Sync Request (5,5) | <-------------- Sync Request (5,5) | |||
Sync Response (5,5) ----> | Sync Response (5,5) ----> | |||
<-------- Sync Response (5,5) | <-------- Sync Response (5,5) | |||
Authors' Addresses | Authors' Addresses | |||
Raj Singh (Editor) | Raj Singh (editor) | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
Divyashree Chambers, B Wing, O'Shaugnessy Road | Divyashree Chambers, B Wing, O'Shaugnessy Road | |||
Bangalore, Karnataka 560025 | Bangalore, Karnataka 560025 | |||
India | India | |||
Phone: +91 80 4301 3320 | Phone: +91 80 4301 3320 | |||
Email: rsj@cisco.com | EMail: rsj@cisco.com | |||
Kalyani Garigipati | Kalyani Garigipati | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
Divyashree Chambers, B Wing, O'Shaugnessy Road | Divyashree Chambers, B Wing, O'Shaugnessy Road | |||
Bangalore, Karnataka 560025 | Bangalore, Karnataka 560025 | |||
India | India | |||
Phone: +91 80 4426 4831 | Phone: +91 80 4426 4831 | |||
Email: kagarigi@cisco.com | EMail: kagarigi@cisco.com | |||
Yoav Nir | Yoav Nir | |||
Check Point Software Technologies Ltd. | Check Point Software Technologies Ltd. | |||
5 Hasolelim St. | 5 Hasolelim St. | |||
Tel Aviv 67897 | Tel Aviv 67897 | |||
Israel | Israel | |||
Email: ynir@checkpoint.com | EMail: ynir@checkpoint.com | |||
Yaron Sheffer | Yaron Sheffer | |||
Porticor Cloud Security | Porticor Cloud Security | |||
Email: yaronf.ietf@gmail.com | EMail: yaronf.ietf@gmail.com | |||
Dacheng Zhang | Dacheng Zhang | |||
Huawei Technologies Ltd. | Huawei Technologies Ltd. | |||
Email: zhangdacheng@huawei.com | EMail: zhangdacheng@huawei.com | |||
End of changes. 141 change blocks. | ||||
382 lines changed or deleted | 352 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |