| rfc9673v3.txt | rfc9673.txt | |||
|---|---|---|---|---|
| skipping to change at line 101 ¶ | skipping to change at line 101 ¶ | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 3. Terminology | 3. Terminology | |||
| This document uses the following loosely defined terms: | This document uses the following loosely defined terms: | |||
| Forwarding Plane: IPv6 routers exchange user or applications data | Forwarding Plane: IPv6 routers exchange user or applications data | |||
| through the forwarding plane. Routers process fields contained in | through the Forwarding Plane. Routers process fields contained in | |||
| IPv6 packet headers. However, they do not process information | IPv6 packet headers. However, they do not process information | |||
| contained in packet payloads. | contained in packet payloads. | |||
| Control Plane: IPv6 routers exchange control information through the | Control Plane: IPv6 routers exchange control information through the | |||
| control plane. The control plane processes the management and | Control Plane. The Control Plane processes the management and | |||
| routing information exchanged with other routers. | routing information exchanged with other routers. | |||
| Fast Path: A path through a router that is optimized for forwarding | Fast Path: A path through a router that is optimized for forwarding | |||
| packets. The fast path might be supported by Application-Specific | packets. The Fast Path might be supported by Application-Specific | |||
| Integrated Circuits (ASICs), a Network Processor (NP), or other | Integrated Circuits (ASICs), a Network Processor (NP), or other | |||
| special purpose hardware. This is the typical processing path | special purpose hardware. This is the typical processing path | |||
| within a router taken by the forwarding plane. | within a router taken by the Forwarding Plane. | |||
| Slow Path: A path through a router that is capable of general | Slow Path: A path through a router that is capable of general | |||
| purpose processing and is not optimized for any particular | purpose processing and is not optimized for any particular | |||
| function. This processing path is used for packets that require | function. This processing path is used for packets that require | |||
| special processing or that differ from assumptions made in fast | special processing or that differ from assumptions made in Fast | |||
| path heuristics or to process router control protocols used by the | Path heuristics or to process router control protocols used by the | |||
| control plane. | Control Plane. | |||
| Full Forwarding Rate: The rate at which a router can forward packets | Full Forwarding Rate: The rate at which a router can forward packets | |||
| without adversely impacting the aggregate forwarding rate. For | without adversely impacting the aggregate forwarding rate. For | |||
| example, a router could process packets with Hop-by-Hop options at | example, a router could process packets with Hop-by-Hop options at | |||
| a rate that allows it to maintain the full speed on its outgoing | a rate that allows it to maintain the full speed on its outgoing | |||
| interfaces, which is sometimes called "wire speed". | interfaces, which is sometimes called "wire speed". | |||
| Source: The node originating the packet. | Source: The node originating the packet. | |||
| NOTE: [RFC6192] is an example of how designs can separate control | NOTE: [RFC6192] is an example of how designs can separate Control | |||
| plane and forwarding plane functions. The separation between | Plane and Forwarding Plane functions. The separation between | |||
| hardware and software processing described in [RFC6398] does not | hardware and software processing described in [RFC6398] does not | |||
| apply to all router architectures. However, a router that performs | apply to all router architectures. However, a router that performs | |||
| all or most processing in software might still incur more processing | all or most processing in software might still incur more processing | |||
| cost when providing special processing for Hop-by-Hop options. | cost when providing special processing for Hop-by-Hop options. | |||
| 4. Background | 4. Background | |||
| In early versions of the IPv6 protocol specification [RFC1883] | In early versions of the IPv6 protocol specification [RFC1883] | |||
| [RFC2460], Hop-by-Hop options were required to be processed by all | [RFC2460], Hop-by-Hop options were required to be processed by all | |||
| nodes: routers and hosts. This proved to not be practical in current | nodes: routers and hosts. This proved to not be practical in current | |||
| high speed routers, as observed in Section 2.2 of [RFC7045]: "it is | high speed routers, as observed in Section 2.2 of [RFC7045]: "it is | |||
| to be expected that high-performance routers will either ignore it or | to be expected that high-performance routers will either ignore it or | |||
| assign packets containing it to a slow processing path". The reasons | assign packets containing it to a slow processing path". The reasons | |||
| behind this include the following: | behind this include the following: | |||
| * The inability to process Hop-by-Hop options at the full forwarding | * The inability to process Hop-by-Hop options at the Full Forwarding | |||
| rate can result in issues. In some cases, Hop-by-Hop options | Rate can result in issues. In some cases, Hop-by-Hop options | |||
| would be sent to the control/management components that run on the | would be sent to the control/management components that run on the | |||
| slow path. This could degrade a router's performance and also its | Slow Path. This could degrade a router's performance and also its | |||
| ability to process critical control traffic, both of which could | ability to process critical control traffic, both of which could | |||
| be exploited as a Denial-of-Service (DoS) attack against the | be exploited as a Denial-of-Service (DoS) attack against the | |||
| router. | router. | |||
| * If a subset of packets within a flow includes Hop-by-Hop options, | * If a subset of packets within a flow includes Hop-by-Hop options, | |||
| it could lead to an increased number of reordered packets and | it could lead to an increased number of reordered packets and | |||
| greater reordering distances for packets delivered to the | greater reordering distances for packets delivered to the | |||
| destination. Such reordering could occur if the Hop-by-Hop | destination. Such reordering could occur if the Hop-by-Hop | |||
| Options header is included only in some packets or if a specific | Options header is included only in some packets or if a specific | |||
| Hop-by-Hop option results in different processing for some of the | Hop-by-Hop option results in different processing for some of the | |||
| skipping to change at line 215 ¶ | skipping to change at line 215 ¶ | |||
| was not intended to change the processing of these options. It | was not intended to change the processing of these options. It | |||
| documented how they were being used in the Internet at the time RFC | documented how they were being used in the Internet at the time RFC | |||
| 8200 was published (see Appendix B of [RFC8200]). This was a | 8200 was published (see Appendix B of [RFC8200]). This was a | |||
| constraint on publishing the IPv6 protocol specification as an IETF | constraint on publishing the IPv6 protocol specification as an IETF | |||
| Standard. | Standard. | |||
| The main issues remain: | The main issues remain: | |||
| * Routers can be configured to drop transit packets containing Hop- | * Routers can be configured to drop transit packets containing Hop- | |||
| by-Hop Options that require processing by a processor that | by-Hop Options that require processing by a processor that | |||
| implements the control plane. This could be done to protect | implements the Control Plane. This could be done to protect | |||
| against a DoS attack on the router [RFC9098] [RFC9288]. | against a DoS attack on the router [RFC9098] [RFC9288]. | |||
| * IPv6 packets that include a Hop-by-Hop Options header are dropped | * IPv6 packets that include a Hop-by-Hop Options header are dropped | |||
| by some Internet paths. A survey in 2015 reported a high loss | by some Internet paths. A survey in 2015 reported a high loss | |||
| rate in transit Autonomous Systems (ASes) for packets that include | rate in transit Autonomous Systems (ASes) for packets that include | |||
| Hop-by-Hop options [RFC7872]. The operational implications of | Hop-by-Hop options [RFC7872]. The operational implications of | |||
| IPv6 packets that include Extension Headers are discussed in | IPv6 packets that include Extension Headers are discussed in | |||
| [RFC9098]. Measurements taken in 2023 confirm this to still be | [RFC9098]. Measurements taken in 2023 confirm this to still be | |||
| the case for many types of network paths [Cus23b]. | the case for many types of network paths [Cus23b]. | |||
| skipping to change at line 241 ¶ | skipping to change at line 241 ¶ | |||
| * Including larger or multiple Hop-by-Hop options in a Hop-by-Hop | * Including larger or multiple Hop-by-Hop options in a Hop-by-Hop | |||
| Options header increases the number of bytes that need to be | Options header increases the number of bytes that need to be | |||
| processed in forwarding, which in some designs can impact the cost | processed in forwarding, which in some designs can impact the cost | |||
| of processing a packet, and in turn could increase the probability | of processing a packet, and in turn could increase the probability | |||
| of drop [RFC7872]. A larger Extension Header could also reduce | of drop [RFC7872]. A larger Extension Header could also reduce | |||
| the probability of a router locating all the header bytes required | the probability of a router locating all the header bytes required | |||
| to successfully process an access control list operating on fields | to successfully process an access control list operating on fields | |||
| after the Hop-by-Hop Options header. | after the Hop-by-Hop Options header. | |||
| * Any option that can be used to force packets into the processor | * Any option that can be used to force packets into the processor | |||
| that implements the router's control plane can be exploited as a | that implements the router's Control Plane can be exploited as a | |||
| DoS attack on a transit router by saturating the resources needed | DoS attack on a transit router by saturating the resources needed | |||
| for router management protocols (routing protocols, network | for router management protocols (routing protocols, network | |||
| management protocols, etc.), which could cause adverse router | management protocols, etc.), which could cause adverse router | |||
| operation. This is an issue for the Router Alert Option | operation. This is an issue for the Router Alert Option | |||
| [RFC2711], which intentionally forwards packets to the control | [RFC2711], which intentionally forwards packets to the Control | |||
| plane as discussed in [RFC6398]. This impact could be mitigated | Plane as discussed in [RFC6398]. This impact could be mitigated | |||
| by limiting the use of control plane resources by a specific | by limiting the use of Control Plane resources by a specific | |||
| packet and/or by using per-function rate-limiters for packets | packet and/or by using per-function rate-limiters for packets | |||
| processed by the control plane. | processed by the Control Plane. | |||
| Section 3 of [RFC6398] includes a summary of processing the IP Router | Section 3 of [RFC6398] includes a summary of processing the IP Router | |||
| Alert Option: | Alert Option: | |||
| | In a nutshell, the IP Router Alert Option does not provide a | | In a nutshell, the IP Router Alert Option does not provide a | |||
| | convenient universal mechanism to accurately and reliably | | convenient universal mechanism to accurately and reliably | |||
| | distinguish between IP Router Alert packets of interest and | | distinguish between IP Router Alert packets of interest and | |||
| | unwanted IP Router Alert packets. This, in turn, creates a | | unwanted IP Router Alert packets. This, in turn, creates a | |||
| | security concern when the IP Router Alert Option is used, because, | | security concern when the IP Router Alert Option is used, because, | |||
| | short of appropriate router-implementation-specific mechanisms, | | short of appropriate router-implementation-specific mechanisms, | |||
| | the router slow path is at risk of being flooded by unwanted | | the router slow path is at risk of being flooded by unwanted | |||
| | traffic. | | traffic. | |||
| This is an example of the need to limit the resources that can be | This is an example of the need to limit the resources that can be | |||
| consumed when a particular function is executed and to avoid | consumed when a particular function is executed and to avoid | |||
| consuming control plane resources where support for a function has | consuming Control Plane resources where support for a function has | |||
| not been configured. | not been configured. | |||
| There has been research that has discussed the general problem with | There has been research that has discussed the general problem with | |||
| dropping packets containing IPv6 Extension Headers, including the | dropping packets containing IPv6 Extension Headers, including the | |||
| Hop-by-Hop Options header. For example, [Hendriks] states that | Hop-by-Hop Options header. For example, [Hendriks] states that | |||
| "Dropping all packets that contain Extension Headers is a bad | "Dropping all packets that contain Extension Headers is a bad | |||
| practice" and that "The share of traffic containing more than one EH | practice" and that "The share of traffic containing more than one EH | |||
| however, is very small. For the design of hardware able to handle | however, is very small. For the design of hardware able to handle | |||
| the dynamic nature of EHs, we therefore recommend to support at least | the dynamic nature of EHs, we therefore recommend to support at least | |||
| one EH". Operational aspects of the topics discussed in this section | one EH". Operational aspects of the topics discussed in this section | |||
| skipping to change at line 356 ¶ | skipping to change at line 356 ¶ | |||
| IPv6 Hop-by-Hop options by local configuration. The text is: | IPv6 Hop-by-Hop options by local configuration. The text is: | |||
| | NOTE: While [RFC2460] required that all nodes must examine and | | NOTE: While [RFC2460] required that all nodes must examine and | |||
| | process the Hop-by-Hop Options header, it is now expected that | | process the Hop-by-Hop Options header, it is now expected that | |||
| | nodes along the path only examine and process the Hop-by-Hop | | nodes along the path only examine and process the Hop-by-Hop | |||
| | Options header if explicitly configured to do so. | | Options header if explicitly configured to do so. | |||
| This document clarifies that a configuration could control whether | This document clarifies that a configuration could control whether | |||
| processing skips any specific Hop-by-Hop options carried in the Hop- | processing skips any specific Hop-by-Hop options carried in the Hop- | |||
| by-Hop Options header. A router that does not process the contents | by-Hop Options header. A router that does not process the contents | |||
| of the Hop-by-Hop Options header does not process any of the option | of the Hop-by-Hop Options header does not process any of the Option | |||
| types contained in the Hop-by-Hop Options header. | Types contained in the Hop-by-Hop Options header. | |||
| 5.2. Hop-by-Hop Options Processing | 5.2. Hop-by-Hop Options Processing | |||
| A source creating packets with a Hop-by-Hop Options header SHOULD use | A Source creating packets with a Hop-by-Hop Options header SHOULD use | |||
| a method that is robust to network nodes selectively processing only | a method that is robust to network nodes selectively processing only | |||
| some of the Hop-by-Hop options that are included in the packet or | some of the Hop-by-Hop options that are included in the packet or | |||
| that forward packets without the option(s) being processed (see | that forward packets without the option(s) being processed (see | |||
| Section 6.1). A source MAY, based on local configuration, allow only | Section 6.1). A Source MAY, based on local configuration, allow only | |||
| one Hop-by-Hop option to be included in a packet, or it could allow | one Hop-by-Hop option to be included in a packet, or it could allow | |||
| more than one Hop-by-Hop option but limit their size to increase the | more than one Hop-by-Hop option but limit their size to increase the | |||
| likelihood of successful transfer across a network path. Because | likelihood of successful transfer across a network path. Because | |||
| some routers might only process one or a limited number of options in | some routers might only process one or a limited number of options in | |||
| the Hop-by-Hop Options header, sources are motivated to order the | the Hop-by-Hop Options header, Sources are motivated to order the | |||
| placement of Hop-by-Hop options within the Hop-by-Hop Options header | placement of Hop-by-Hop options within the Hop-by-Hop Options header | |||
| in decreasing order of importance for their processing by nodes on | in decreasing order of importance for their processing by nodes on | |||
| the path. | the path. | |||
| A router configuration needs to avoid vulnerabilities that arise when | A router configuration needs to avoid vulnerabilities that arise when | |||
| it cannot process the first Hop-by-Hop option at the full forwarding | it cannot process the first Hop-by-Hop option at the Full Forwarding | |||
| rate. Therefore, a router SHOULD NOT be configured to process the | Rate. Therefore, a router SHOULD NOT be configured to process the | |||
| first Hop-by-Hop option if this adversely impacts the aggregate | first Hop-by-Hop option if this adversely impacts the aggregate | |||
| forwarding rate. A router SHOULD process additional Hop-by-Hop | forwarding rate. A router SHOULD process additional Hop-by-Hop | |||
| options, if configured to do so, providing that these also do not | options, if configured to do so, providing that these also do not | |||
| adversely impact the aggregate forwarding rate. | adversely impact the aggregate forwarding rate. | |||
| If a router is unable to process a specific Hop-by-Hop option (or is | If a router is unable to process a specific Hop-by-Hop option (or is | |||
| not configured to do so), it SHOULD behave in the same way specified | not configured to do so), it SHOULD behave in the same way specified | |||
| for an unrecognized Option Type when the action bits are set to "00", | for an unrecognized Option Type when the action bits are set to "00", | |||
| and it SHOULD skip the remaining options using the "Hdr Ext Len" | and it SHOULD skip the remaining options using the "Hdr Ext Len" | |||
| field in the Hop-by-Hop Options header. This field specifies the | field in the Hop-by-Hop Options header. This field specifies the | |||
| length of the Options Header in 8-octet units. After skipping an | length of the Options Header in 8-octet units. After skipping an | |||
| option, the router continues processing the remaining options in the | option, the router continues processing the remaining options in the | |||
| header. Skipped options do not need to be verified. | header. Skipped options do not need to be verified. | |||
| The Router Alert Option [RFC2711] is an exception to this because it | The Router Alert Option [RFC2711] is an exception to this because it | |||
| is designed to tell a router that the packet needs additional | is designed to tell a router that the packet needs additional | |||
| processing, which is usually done in the control plane; see | processing, which is usually done in the Control Plane; see | |||
| Section 5.2.1. | Section 5.2.1. | |||
| Section 4.2 of [RFC8200] defines the Option Type identifiers as | Section 4.2 of [RFC8200] defines the Option Type identifiers as | |||
| internally encoded such that their highest-order 2 bits specify the | internally encoded such that their highest-order 2 bits specify the | |||
| action that must be taken if the processing IPv6 node does not | action that must be taken if the processing IPv6 node does not | |||
| recognize the Option Type. The text is: | recognize the Option Type. The text is: | |||
| 00 - skip over this option and continue processing the header. | 00 - skip over this option and continue processing the header. | |||
| 01 - discard the packet. | 01 - discard the packet. | |||
| 10 - discard the packet and, regardless of whether or not the | 10 - discard the packet and, regardless of whether or not the | |||
| packet's Destination Address was a multicast address, send an ICMP | packet's Destination Address was a multicast address, | |||
| Parameter Problem, Code 2, message to the packet's Source Address, | send an ICMP Parameter Problem, Code 2, message to the | |||
| pointing to the unrecognized Option Type. | packet's Source Address, pointing to the unrecognized | |||
| Option Type. | ||||
| 11 - discard the packet and, only if the packet's Destination | 11 - discard the packet and, only if the packet's Destination | |||
| Address was not a multicast address, send an ICMP Parameter | Address was not a multicast address, send an ICMP Parameter | |||
| Problem, Code 2, message to the packet's Source Address, pointing | Problem, Code 2, message to the packet's Source Address, | |||
| to the unrecognized Option Type. | pointing to the unrecognized Option Type. | |||
| This document modifies this behavior for the "01", "10", and "11" | This document modifies this behavior for the "01", "10", and "11" | |||
| action bits so that if a router is unable to process a specific Hop- | action bits so that if a router is unable to process a specific Hop- | |||
| by-Hop option (or is not configured to do so), it SHOULD behave in | by-Hop option (or is not configured to do so), it SHOULD behave in | |||
| the same way specified for an unrecognized Option Type when the | the same way specified for an unrecognized Option Type when the | |||
| action bits are set to "00". It also modifies the behavior for | action bits are set to "00". It also modifies the behavior for | |||
| values "10" and "11" in the case where the packet is discarded and | values "10" and "11" in the case where the packet is discarded and | |||
| the node MAY send an ICMP Parameter Problem, Code 2 [RFC4443], | the node MAY send an ICMP Parameter Problem, Code 2 [RFC4443], | |||
| message to the packet's Source Address, pointing to the unrecognized | message to the packet's Source Address, pointing to the unrecognized | |||
| Option Type. | Option Type. | |||
| The modified text for values "01", "10", and "11" is: | The modified text for values "01", "10", and "11" is: | |||
| 01 - MAY discard the packet, if so configured. Nodes should not | 01 - MAY discard the packet, if so configured. Nodes should not | |||
| rely on routers dropping these unrecognized Option Types. | rely on routers dropping these unrecognized Option Types. | |||
| 10 - MAY discard the packet, if so configured, regardless of | 10 - MAY discard the packet, if so configured, regardless of | |||
| whether or not the packet's Destination Address was a multicast | whether or not the packet's Destination Address was a | |||
| address. If the packet was discarded, an ICMP Parameter Problem, | multicast address. If the packet was discarded, an ICMP | |||
| Code 2, message MAY be sent to the packet's Source Address, | Parameter Problem, Code 2, message MAY be sent to the | |||
| pointing to the unrecognized Option Type. | packet's Source Address, pointing to the unrecognized | |||
| Option Type. | ||||
| 11 - MAY discard the packet, if so configured. If the packet was | 11 - MAY discard the packet, if so configured. If the packet | |||
| discarded and the packet's Destination Address was not a multicast | was discarded and the packet's Destination Address was | |||
| address, an ICMP Parameter Problem, Code 2, message MAY be sent to | not a multicast address, an ICMP Parameter Problem, | |||
| the packet's Source Address, pointing to the unrecognized Option | Code 2, message MAY be sent to the packet's Source | |||
| Type. | Address, pointing to the unrecognized Option Type. | |||
| When an ICMP Parameter Problem, Code 2, message is delivered to the | When an ICMP Parameter Problem, Code 2, message is delivered to the | |||
| source, it indicates that at least one node on the path has failed to | Source, it indicates that at least one node on the path has failed to | |||
| recognize the option [RFC4443]. Generating any ICMP message incurs | recognize the option [RFC4443]. Generating any ICMP message incurs | |||
| additional router processing. Reception of this message is not | additional router processing. Reception of this message is not | |||
| guaranteed; routers might be unable to be configured so that they do | guaranteed; routers might be unable to be configured so that they do | |||
| not generate these messages, and they are not always forwarded to the | not generate these messages, and they are not always forwarded to the | |||
| source. The motivation here is to loosen the requirement to send an | Source. The motivation here is to loosen the requirement to send an | |||
| ICMPv6 Parameter Problem message when a router forwards a packet | ICMPv6 Parameter Problem message when a router forwards a packet | |||
| without processing the list of all options. | without processing the list of all options. | |||
| 5.2.1. Router Alert Option | 5.2.1. Router Alert Option | |||
| The purpose of the Router Alert Option [RFC2711] is to tell a router | The purpose of the Router Alert Option [RFC2711] is to tell a router | |||
| that the packet needs additional processing in the control plane. | that the packet needs additional processing in the Control Plane. | |||
| The Router Alert Option includes a two-octet Value field that | The Router Alert Option includes a two-octet Value field that | |||
| describes the protocol that is carried in the packet. The current | describes the protocol that is carried in the packet. The current | |||
| specified values can be found in the "IPv6 Router Alert Option | specified values can be found in the "IPv6 Router Alert Option | |||
| Values" IANA registry [IANA-RA]. | Values" IANA registry [IANA-RA]. | |||
| DISCUSSION | DISCUSSION | |||
| The function of a Router Alert Option can result in the processing | The function of a Router Alert Option can result in the processing | |||
| that this specification is proposing to eliminate, that is, | that this specification is proposing to eliminate, that is, | |||
| instructing a router to process the packet in the control plane. | instructing a router to process the packet in the Control Plane. | |||
| This processing causes concerns, which are discussed in Section 4. | This processing causes concerns, which are discussed in Section 4. | |||
| One approach would be to deprecate this, because current usage | One approach would be to deprecate this, because current usage | |||
| beyond the local network appears to be limited, and packets | beyond the local network appears to be limited, and packets | |||
| containing Hop-by-Hop options are frequently dropped. Deprecation | containing Hop-by-Hop options are frequently dropped. Deprecation | |||
| would allow current implementations to continue, and its use could | would allow current implementations to continue, and its use could | |||
| be phased out over time. | be phased out over time. | |||
| The Router Alert Option could potentially be used with new | The Router Alert Option could potentially be used with new | |||
| functions that have to be processed in the control plane. Keeping | functions that have to be processed in the Control Plane. Keeping | |||
| this as the single exception for processing in the control plane | this as the single exception for processing in the Control Plane | |||
| with the restrictions that follow is a reasonable compromise to | with the restrictions that follow is a reasonable compromise to | |||
| allow future flexibility. These restrictions are compatible with | allow future flexibility. These restrictions are compatible with | |||
| Section 5 of [RFC6398]. | Section 5 of [RFC6398]. | |||
| As noted in [RFC6398], "Implementations of the IP Router Alert Option | As noted in [RFC6398], "Implementations of the IP Router Alert Option | |||
| SHOULD offer the configuration option to simply ignore the presence | SHOULD offer the configuration option to simply ignore the presence | |||
| of 'IP Router Alert' in IPv4 and IPv6 packets." | of 'IP Router Alert' in IPv4 and IPv6 packets." | |||
| A node that is configured to process a Router Alert Option MUST | A node that is configured to process a Router Alert Option MUST | |||
| protect itself from an infrastructure attack that could result from | protect itself from an infrastructure attack that could result from | |||
| processing in the control plane. This might include some combination | processing in the Control Plane. This might include some combination | |||
| of an access control list to only permit access from trusted nodes, | of an access control list to only permit access from trusted nodes, | |||
| rate limiting of processing, or other methods [RFC6398]. | rate limiting of processing, or other methods [RFC6398]. | |||
| As specified in [RFC2711], the top two bits of the Option Type for | As specified in [RFC2711], the top two bits of the Option Type for | |||
| the Router Alert Option are always set to "00", indicating that the | the Router Alert Option are always set to "00", indicating that the | |||
| node should skip over this option as if it does not recognize the | node should skip over this option as if it does not recognize the | |||
| Option Type and continue processing the header. An implementation | Option Type and continue processing the header. An implementation | |||
| that does recognize the Router Alert Option SHOULD verify that the | that does recognize the Router Alert Option SHOULD verify that the | |||
| Router Alert Option contains a protocol, as indicated by the Value | Router Alert Option contains a protocol, as indicated by the Value | |||
| field in the Router Alert Option, that is configured as a protocol of | field in the Router Alert Option, that is configured as a protocol of | |||
| interest to that router. A verified packet SHOULD be sent to the | interest to that router. A verified packet SHOULD be sent to the | |||
| control plane for further processing [RFC6398]. Otherwise, the | Control Plane for further processing [RFC6398]. Otherwise, the | |||
| router implementation SHOULD forward this packet subject to all | router implementation SHOULD forward this packet subject to all | |||
| normal policies and forwarding rules. | normal policies and forwarding rules. | |||
| 5.2.2. Configuration of Hop-by-Hop Options Processing | 5.2.2. Configuration of Hop-by-Hop Options Processing | |||
| A router can be configured to process a specific Option. The set of | A router can be configured to process a specific Option. The set of | |||
| enabled options SHOULD be configurable by the operator of the router. | enabled options SHOULD be configurable by the operator of the router. | |||
| A possible approach to implementing this is to maintain a lookup | A possible approach to implementing this is to maintain a lookup | |||
| table based on an Option Type of the IPv6 options that can be | table based on an Option Type of the IPv6 options that can be | |||
| processed at the full forwarding rate. This would allow a router to | processed at the Full Forwarding Rate. This would allow a router to | |||
| quickly determine if an option is supported and can be processed. If | quickly determine if an option is supported and can be processed. If | |||
| the option is not supported, then the router processes the option as | the option is not supported, then the router processes the option as | |||
| described in Section 5.1 of this document. | described in Section 5.1 of this document. | |||
| The actions of the lookup table should be configurable by the | The actions of the lookup table should be configurable by the | |||
| operator of the router. | operator of the router. | |||
| 6. Defining New Hop-by-Hop Options | 6. Defining New Hop-by-Hop Options | |||
| This section updates Section 4.8 of [RFC8200]. | This section updates Section 4.8 of [RFC8200]. | |||
| Any future new IPv6 Hop-by-Hop options should be designed to be | Any future new IPv6 Hop-by-Hop options should be designed to be | |||
| processed at the full forwarding rate and should have the following | processed at the Full Forwarding Rate and should have the following | |||
| characteristics: | characteristics: | |||
| * New Hop-by-Hop options should be designed to ensure the router can | * New Hop-by-Hop options should be designed to ensure the router can | |||
| process the options at the full forwarding rate. That is, they | process the options at the Full Forwarding Rate. That is, they | |||
| should be simple to process. | should be simple to process. | |||
| * New Hop-by-Hop options should be defined with the Action type | * New Hop-by-Hop options should be defined with the Action type | |||
| (highest-order 2 bits of the Option Type) set to "00", which | (highest-order 2 bits of the Option Type) set to "00", which | |||
| enables skipping over this option and continuing with the | enables skipping over this option and continuing with the | |||
| processing of the header if a router does not recognize the | processing of the header if a router does not recognize the | |||
| option. | option. | |||
| * The size of Hop-by-Hop options should not extend beyond what can | * The size of Hop-by-Hop options should not extend beyond what can | |||
| be expected to be executed at the full forwarding rate. A larger | be expected to be executed at the Full Forwarding Rate. A larger | |||
| Hop-by-Hop Options header can increase the likelihood that a | Hop-by-Hop Options header can increase the likelihood that a | |||
| packet will be dropped [Cus23b]. | packet will be dropped [Cus23b]. | |||
| * New Hop-by-Hop options should be designed with the expectation | * New Hop-by-Hop options should be designed with the expectation | |||
| that a router might be configured to only process a subset of Hop- | that a router might be configured to only process a subset of Hop- | |||
| by-Hop options (e.g., the first option) in the Hop-by-Hop Options | by-Hop options (e.g., the first option) in the Hop-by-Hop Options | |||
| header. | header. | |||
| * The design of protocols that use new Hop-by-Hop options should | * The design of protocols that use new Hop-by-Hop options should | |||
| consider that a router may drop packets containing the new Hop-by- | consider that a router may drop packets containing the new Hop-by- | |||
| Hop option. | Hop option. | |||
| If a new Hop-by-Hop option does not meet these criteria, its | If a new Hop-by-Hop option does not meet these criteria, its | |||
| specification must include a detailed explanation why that is the | specification must include a detailed explanation why that is the | |||
| case and show that there is a reasonable expectation that the option | case and show that there is a reasonable expectation that the option | |||
| can still proceed at the full forwarding rate. This is consistent | can still proceed at the Full Forwarding Rate. This is consistent | |||
| with [RFC6564]. This is consistent with [RFC6564]. | with [RFC6564]. This is consistent with [RFC6564]. | |||
| The general issue of robust operation of packets with new Hop-by-Hop | The general issue of robust operation of packets with new Hop-by-Hop | |||
| options is described in Section 6.1. | options is described in Section 6.1. | |||
| 6.1. Example of Robust Usage | 6.1. Example of Robust Usage | |||
| Recent measurement surveys (e.g., [Cus23a]) show that packets that | Recent measurement surveys (e.g., [Cus23a]) show that packets that | |||
| include Extension Headers can cause the packets to be dropped by some | include Extension Headers can cause the packets to be dropped by some | |||
| Internet paths. In a limited domain, routers can be configured or | Internet paths. In a limited domain, routers can be configured or | |||
| skipping to change at line 576 ¶ | skipping to change at line 578 ¶ | |||
| The primary motivation of this document is to make it more practical | The primary motivation of this document is to make it more practical | |||
| to use Hop-by-Hop options beyond such a limited domain, with the | to use Hop-by-Hop options beyond such a limited domain, with the | |||
| expectation that applications can improve the quality of or add new | expectation that applications can improve the quality of or add new | |||
| features to their offered service when the path successfully forwards | features to their offered service when the path successfully forwards | |||
| packets with the required Hop-by-Hop options and otherwise refrains | packets with the required Hop-by-Hop options and otherwise refrains | |||
| from using these options. The focus is on incremental deployability. | from using these options. The focus is on incremental deployability. | |||
| A protocol feature (such as using Hop-by-Hop options) is | A protocol feature (such as using Hop-by-Hop options) is | |||
| incrementally deployable if early adopters gain some benefit on the | incrementally deployable if early adopters gain some benefit on the | |||
| paths being used, even though other paths do not support the protocol | paths being used, even though other paths do not support the protocol | |||
| feature. A source ought to order the Hop-by-Hop options that are | feature. A Source ought to order the Hop-by-Hop options that are | |||
| carried in the Hop-by-Hop Options header in decreasing order of | carried in the Hop-by-Hop Options header in decreasing order of | |||
| importance for processing by nodes on the path. | importance for processing by nodes on the path. | |||
| Methods can be developed that do not rely upon all routers to | Methods can be developed that do not rely upon all routers to | |||
| implement a specific Hop-by-Hop option (e.g., [RFC9268]) and that are | implement a specific Hop-by-Hop option (e.g., [RFC9268]) and that are | |||
| robust when the current path drops packets that contain a Hop-by-Hop | robust when the current path drops packets that contain a Hop-by-Hop | |||
| option (e.g., [RFC9098]). | option (e.g., [RFC9098]). | |||
| For example, an application can be designed to first send a test | For example, an application can be designed to first send a test | |||
| packet that includes the required option or combination of options | packet that includes the required option or combination of options | |||
| skipping to change at line 615 ¶ | skipping to change at line 617 ¶ | |||
| added this document as an additional reference for the "Destination | added this document as an additional reference for the "Destination | |||
| Options and Hop-by-Hop Options" registry in the "Internet Protocol | Options and Hop-by-Hop Options" registry in the "Internet Protocol | |||
| Version 6 (IPv6) Parameters" registry group [IANA-HBH]. | Version 6 (IPv6) Parameters" registry group [IANA-HBH]. | |||
| 8. Security Considerations | 8. Security Considerations | |||
| Security issues caused by including IPv6 Hop-by-Hop options are well | Security issues caused by including IPv6 Hop-by-Hop options are well | |||
| known and have been documented in several places, including | known and have been documented in several places, including | |||
| [RFC6398], [RFC6192], [RFC7045], and [RFC9098]. The main issue, as | [RFC6398], [RFC6192], [RFC7045], and [RFC9098]. The main issue, as | |||
| noted in Section 4, is that any mechanism that can be used to force | noted in Section 4, is that any mechanism that can be used to force | |||
| packets into the router's control plane or slow path can be exploited | packets into the router's Control Plane or Slow Path can be exploited | |||
| as a DoS attack on a router by saturating the resources needed for | as a DoS attack on a router by saturating the resources needed for | |||
| router management (routing protocols, network management protocols, | router management (routing protocols, network management protocols, | |||
| etc.), and this can cause the router to fail or perform suboptimally. | etc.), and this can cause the router to fail or perform suboptimally. | |||
| While Hop-by-Hop options are not required to be processed in the | While Hop-by-Hop options are not required to be processed in the | |||
| control plane, the Router Alert Option is the one exception that is | Control Plane, the Router Alert Option is the one exception that is | |||
| designed to be processed in the control plane. | designed to be processed in the Control Plane. | |||
| Some IPv6 nodes implement features that access more of the protocol | Some IPv6 nodes implement features that access more of the protocol | |||
| information than a typical IPv6 router (e.g., [RFC9098]). Examples | information than a typical IPv6 router (e.g., [RFC9098]). Examples | |||
| are nodes that provide DoS mitigation, firewall/access control, | are nodes that provide DoS mitigation, firewall/access control, | |||
| traffic engineering, or traffic normalization. These nodes could be | traffic engineering, or traffic normalization. These nodes could be | |||
| configured to drop packets when they are unable to access and process | configured to drop packets when they are unable to access and process | |||
| all Extension Headers or are unable to locate and process the higher- | all Extension Headers or are unable to locate and process the higher- | |||
| layer packet information. This document provides guidance on the | layer packet information. This document provides guidance on the | |||
| requirements concerning Hop-by-Hop options. | requirements concerning Hop-by-Hop options. | |||
| skipping to change at line 649 ¶ | skipping to change at line 651 ¶ | |||
| multipath forwarding or port filtering). This requirement is not | multipath forwarding or port filtering). This requirement is not | |||
| specific to Hop-by-Hop options. It is important that implementations | specific to Hop-by-Hop options. It is important that implementations | |||
| fail gracefully when a malformed or malicious Hop-by-Hop option is | fail gracefully when a malformed or malicious Hop-by-Hop option is | |||
| encountered. | encountered. | |||
| This document changes how the Hop-by-Hop Options header is processed, | This document changes how the Hop-by-Hop Options header is processed, | |||
| which significantly reduces the attack surface. These changes | which significantly reduces the attack surface. These changes | |||
| include the following: | include the following: | |||
| * A router configuration needs to avoid vulnerabilities that arise | * A router configuration needs to avoid vulnerabilities that arise | |||
| when it cannot process a Hop-by-Hop option at the full forwarding | when it cannot process a Hop-by-Hop option at the Full Forwarding | |||
| rate; therefore, it SHOULD NOT be configured to process the Hop- | Rate; therefore, it SHOULD NOT be configured to process the Hop- | |||
| by-Hop option if it adversely impacts the aggregate forwarding | by-Hop option if it adversely impacts the aggregate forwarding | |||
| rate. Instead, it SHOULD behave in the same way specified for an | rate. Instead, it SHOULD behave in the same way specified for an | |||
| unrecognized Option Type when the action bits are set to "00", as | unrecognized Option Type when the action bits are set to "00", as | |||
| specified in Section 5.2. | specified in Section 5.2. | |||
| * This document adds criteria for the Router Alert Option | * This document adds criteria for the Router Alert Option | |||
| (Section 5.2.1) to allow control over how it is processed and | (Section 5.2.1) to allow control over how it is processed and | |||
| describes how a node configured to support these options must | describes how a node configured to support these options must | |||
| protect itself from attacks by using the Router Alert Option. | protect itself from attacks by using the Router Alert Option. | |||
| * This document sets the expectation that if a packet includes a | * This document sets the expectation that if a packet includes a | |||
| Hop-by-Hop Options header, the packet will be forwarded across the | Hop-by-Hop Options header, the packet will be forwarded across the | |||
| network path. | network path. | |||
| * A source MAY include a single Hop-by-Hop option (based on local | * A Source MAY include a single Hop-by-Hop option (based on local | |||
| configuration) or MAY be configured to include more Hop-by-Hop | configuration) or MAY be configured to include more Hop-by-Hop | |||
| options. The configuration of intermediate nodes determines | options. The configuration of intermediate nodes determines | |||
| whether a node processes any of these options, and if so, which | whether a node processes any of these options, and if so, which | |||
| ones and how many. | ones and how many. | |||
| * This document adds guidance for the design of any future new Hop- | * This document adds guidance for the design of any future new Hop- | |||
| by-Hop option that reduces the computational requirements and | by-Hop option that reduces the computational requirements and | |||
| encourages a limit to their size. | encourages a limit to their size. | |||
| The intent of this document is to highlight that these changes | The intent of this document is to highlight that these changes | |||
| End of changes. 41 change blocks. | ||||
| 64 lines changed or deleted | 66 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||