| < draft-ietf-6man-segment-routing-header-00.txt | draft-ietf-6man-segment-routing-header-01.txt > | |||
|---|---|---|---|---|
| Network Working Group S. Previdi, Ed. | Network Working Group S. Previdi, Ed. | |||
| Internet-Draft C. Filsfils | Internet-Draft C. Filsfils | |||
| Intended status: Standards Track Cisco Systems, Inc. | Intended status: Standards Track Cisco Systems, Inc. | |||
| Expires: June 16, 2016 B. Field | Expires: September 19, 2016 B. Field | |||
| Comcast | Comcast | |||
| I. Leung | I. Leung | |||
| Rogers Communications | Rogers Communications | |||
| J. Linkova | J. Linkova | |||
| E. Aries | E. Aries | |||
| T. Kosugi | T. Kosugi | |||
| NTT | NTT | |||
| E. Vyncke | E. Vyncke | |||
| Cisco Systems, Inc. | Cisco Systems, Inc. | |||
| D. Lebrun | D. Lebrun | |||
| Universite Catholique de Louvain | Universite Catholique de Louvain | |||
| December 14, 2015 | March 18, 2016 | |||
| IPv6 Segment Routing Header (SRH) | IPv6 Segment Routing Header (SRH) | |||
| draft-ietf-6man-segment-routing-header-00 | draft-ietf-6man-segment-routing-header-01 | |||
| Abstract | Abstract | |||
| Segment Routing (SR) allows a node to steer a packet through a | Segment Routing (SR) allows a node to steer a packet through a | |||
| controlled set of instructions, called segments, by prepending a SR | controlled set of instructions, called segments, by prepending an SR | |||
| header to the packet. A segment can represent any instruction, | header to the packet. A segment can represent any instruction, | |||
| topological or service-based. SR allows to enforce a flow through | topological or service-based. SR allows to enforce a flow through | |||
| any path (topological, or application/service based) while | any path (topological, or application/service based) while | |||
| maintaining per-flow state only at the ingress node to the SR domain. | maintaining per-flow state only at the ingress node to the SR domain. | |||
| Segment Routing can be applied to the IPv6 data plane with the | Segment Routing can be applied to the IPv6 data plane with the | |||
| addition of a new type of Routing Extension Header. This draft | addition of a new type of Routing Extension Header. This draft | |||
| describes the Segment Routing Extension Header Type and how it is | describes the Segment Routing Extension Header Type and how it is | |||
| used by SR capable nodes. | used by SR capable nodes. | |||
| skipping to change at page 2, line 15 ¶ | skipping to change at page 2, line 15 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on June 16, 2016. | This Internet-Draft will expire on September 19, 2016. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| 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. Segment Routing Documents . . . . . . . . . . . . . . . . . . 3 | 1. Segment Routing Documents . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Data Planes supporting Segment Routing . . . . . . . . . 4 | 2.1. Data Planes supporting Segment Routing . . . . . . . . . 4 | |||
| 2.2. Segment Routing (SR) Domain . . . . . . . . . . . . . . . 4 | 2.2. Segment Routing (SR) Domain . . . . . . . . . . . . . . . 4 | |||
| 2.2.1. SR Domain in a Service Provider Network . . . . . . . 5 | 2.2.1. SR Domain in a Service Provider Network . . . . . . . 5 | |||
| 2.2.2. SR Domain in a Overlay Network . . . . . . . . . . . 6 | 2.2.2. SR Domain in a Overlay Network . . . . . . . . . . . 6 | |||
| 3. Segment Routing Extension Header (SRH) . . . . . . . . . . . 7 | 3. Segment Routing Extension Header (SRH) . . . . . . . . . . . 8 | |||
| 3.1. SRH and RFC2460 behavior . . . . . . . . . . . . . . . . 11 | 3.1. SRH TLVs . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4. SRH Procedures . . . . . . . . . . . . . . . . . . . . . . . 11 | 3.1.1. Ingress Node TLV . . . . . . . . . . . . . . . . . . 10 | |||
| 4.1. Segment Routing Node Functions . . . . . . . . . . . . . 11 | 3.1.2. Egress Node TLV . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.1.1. Source SR Node . . . . . . . . . . . . . . . . . . . 12 | 3.1.3. Opaque Container TLV . . . . . . . . . . . . . . . . 12 | |||
| 4.1.2. SR Domain Ingress Node . . . . . . . . . . . . . . . 13 | 3.1.4. Padding TLV . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.1.3. Transit Node . . . . . . . . . . . . . . . . . . . . 13 | 3.1.5. HMAC TLV . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.1.4. SR Segment Endpoint Node . . . . . . . . . . . . . . 13 | 3.2. SRH and RFC2460 behavior . . . . . . . . . . . . . . . . 14 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | 4. SRH Procedures . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1. Threat model . . . . . . . . . . . . . . . . . . . . . . 14 | 4.1. Source SR Node . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1.1. Source routing threats . . . . . . . . . . . . . . . 15 | 4.2. Transit Node . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.1.2. Applicability of RFC 5095 to SRH . . . . . . . . . . 15 | 4.3. SR Segment Endpoint Node . . . . . . . . . . . . . . . . 16 | |||
| 5.1.3. Service stealing threat . . . . . . . . . . . . . . . 16 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.1.4. Topology disclosure . . . . . . . . . . . . . . . . . 16 | 5.1. Threat model . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.1.5. ICMP Generation . . . . . . . . . . . . . . . . . . . 16 | 5.1.1. Source routing threats . . . . . . . . . . . . . . . 18 | |||
| 5.2. Security fields in SRH . . . . . . . . . . . . . . . . . 17 | 5.1.2. Applicability of RFC 5095 to SRH . . . . . . . . . . 18 | |||
| 5.2.1. Selecting a hash algorithm . . . . . . . . . . . . . 18 | 5.1.3. Service stealing threat . . . . . . . . . . . . . . . 19 | |||
| 5.2.2. Performance impact of HMAC . . . . . . . . . . . . . 18 | 5.1.4. Topology disclosure . . . . . . . . . . . . . . . . . 19 | |||
| 5.2.3. Pre-shared key management . . . . . . . . . . . . . . 19 | 5.1.5. ICMP Generation . . . . . . . . . . . . . . . . . . . 19 | |||
| 5.3. Deployment Models . . . . . . . . . . . . . . . . . . . . 20 | 5.2. Security fields in SRH . . . . . . . . . . . . . . . . . 20 | |||
| 5.3.1. Nodes within the SR domain . . . . . . . . . . . . . 20 | 5.2.1. Selecting a hash algorithm . . . . . . . . . . . . . 21 | |||
| 5.3.2. Nodes outside of the SR domain . . . . . . . . . . . 20 | 5.2.2. Performance impact of HMAC . . . . . . . . . . . . . 21 | |||
| 5.3.3. SR path exposure . . . . . . . . . . . . . . . . . . 21 | 5.2.3. Pre-shared key management . . . . . . . . . . . . . . 22 | |||
| 5.3.4. Impact of BCP-38 . . . . . . . . . . . . . . . . . . 21 | 5.3. Deployment Models . . . . . . . . . . . . . . . . . . . . 23 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 5.3.1. Nodes within the SR domain . . . . . . . . . . . . . 23 | |||
| 7. Manageability Considerations . . . . . . . . . . . . . . . . 22 | 5.3.2. Nodes outside of the SR domain . . . . . . . . . . . 23 | |||
| 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 22 | 5.3.3. SR path exposure . . . . . . . . . . . . . . . . . . 24 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 22 | 5.3.4. Impact of BCP-38 . . . . . . . . . . . . . . . . . . 24 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 22 | 7. Manageability Considerations . . . . . . . . . . . . . . . . 25 | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 23 | 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 25 | ||||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 26 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
| 1. Segment Routing Documents | 1. Segment Routing Documents | |||
| Segment Routing terminology is defined in | Segment Routing terminology is defined in | |||
| [I-D.ietf-spring-segment-routing]. | [I-D.ietf-spring-segment-routing]. | |||
| Segment Routing use cases are described in | Segment Routing use cases are described in | |||
| [I-D.ietf-spring-problem-statement] and | [I-D.ietf-spring-problem-statement] and | |||
| [I-D.ietf-spring-ipv6-use-cases]. | [I-D.ietf-spring-ipv6-use-cases]. | |||
| Segment Routing protocol extensions are defined in | Segment Routing protocol extensions are defined in | |||
| [I-D.ietf-isis-segment-routing-extensions], and | [I-D.ietf-isis-segment-routing-extensions], and | |||
| [I-D.ietf-ospf-ospfv3-segment-routing-extensions]. | [I-D.ietf-ospf-ospfv3-segment-routing-extensions]. | |||
| 2. Introduction | 2. Introduction | |||
| Segment Routing (SR), defined in [I-D.ietf-spring-segment-routing], | Segment Routing (SR), defined in [I-D.ietf-spring-segment-routing], | |||
| allows a node to steer a packet through a controlled set of | allows a node to steer a packet through a controlled set of | |||
| instructions, called segments, by prepending a SR header to the | instructions, called segments, by prepending an SR header to the | |||
| packet. A segment can represent any instruction, topological or | packet. A segment can represent any instruction, topological or | |||
| service-based. SR allows to enforce a flow through any path | service-based. SR allows to enforce a flow through any path | |||
| (topological or service/application based) while maintaining per-flow | (topological or service/application based) while maintaining per-flow | |||
| state only at the ingress node to the SR domain. Segments can be | state only at the ingress node to the SR domain. Segments can be | |||
| derived from different components: IGP, BGP, Services, Contexts, | derived from different components: IGP, BGP, Services, Contexts, | |||
| Locators, etc. The list of segment forming the path is called the | Locators, etc. The list of segment forming the path is called the | |||
| Segment List and is encoded in the packet header. | Segment List and is encoded in the packet header. | |||
| SR allows the use of strict and loose source based routing paradigms | SR allows the use of strict and loose source based routing paradigms | |||
| without requiring any additional signaling protocols in the | without requiring any additional signaling protocols in the | |||
| skipping to change at page 5, line 22 ¶ | skipping to change at page 5, line 25 ¶ | |||
| Segment Routing Header (SRH) defined in this document equally applies | Segment Routing Header (SRH) defined in this document equally applies | |||
| to all the above examples. | to all the above examples. | |||
| While the source routing model defined in [RFC2460] doesn't mandate | While the source routing model defined in [RFC2460] doesn't mandate | |||
| which node is allowed to insert (or modify) the SRH, it is assumed in | which node is allowed to insert (or modify) the SRH, it is assumed in | |||
| this document that the SRH is inserted in the packet by its source. | this document that the SRH is inserted in the packet by its source. | |||
| For example: | For example: | |||
| o At the node originating the packet (host, server). | o At the node originating the packet (host, server). | |||
| o At the ingress node of a SR domain where the ingress node receives | o At the ingress node of an SR domain where the ingress node | |||
| an IPv6 packet and encapsulates it into an outer IPv6 header | receives an IPv6 packet and encapsulates it into an outer IPv6 | |||
| followed by a Segment Routing header. | header followed by a Segment Routing header. | |||
| 2.2.1. SR Domain in a Service Provider Network | 2.2.1. SR Domain in a Service Provider Network | |||
| The following figure illustrates an SR domain consisting of an | The following figure illustrates an SR domain consisting of an | |||
| operator's network infrastructure. | operator's network infrastructure. | |||
| (-------------------------- Operator 1 -----------------------) | (-------------------------- Operator 1 -----------------------) | |||
| ( ) | ( ) | |||
| ( (-----AS 1-----) (-------AS 2-------) (----AS 3-------) ) | ( (-----AS 1-----) (-------AS 2-------) (----AS 3-------) ) | |||
| ( ( ) ( ) ( ) ) | ( ( ) ( ) ( ) ) | |||
| skipping to change at page 7, line 24 ¶ | skipping to change at page 7, line 39 ¶ | |||
| segment list of the SRH or in the DA, segments identifying other | segment list of the SRH or in the DA, segments identifying other | |||
| overlay nodes. This implies that packets with an SRH may traverse | overlay nodes. This implies that packets with an SRH may traverse | |||
| operator's networks but, obviously, these SRHs cannot contain an | operator's networks but, obviously, these SRHs cannot contain an | |||
| address/segment of the transit operators 1, 2 and 3. The SRH | address/segment of the transit operators 1, 2 and 3. The SRH | |||
| originated by the overlay can only contain address/segment under the | originated by the overlay can only contain address/segment under the | |||
| administration of the overlay (e.g. address/segments supported by A1, | administration of the overlay (e.g. address/segments supported by A1, | |||
| A2, A3, B1, B2, B3, C1,C2 or C3). | A2, A3, B1, B2, B3, C1,C2 or C3). | |||
| In this model, the operator network nodes are transit nodes and, | In this model, the operator network nodes are transit nodes and, | |||
| according to [RFC2460], MUST NOT inspect the routing extension header | according to [RFC2460], MUST NOT inspect the routing extension header | |||
| since there are not the DA of the packet. | since they are not the DA of the packet. | |||
| It is a common practice in operators networks to filter out, at | It is a common practice in operators networks to filter out, at | |||
| ingress, any packet whose DA is the address of an internal node and | ingress, any packet whose DA is the address of an internal node and | |||
| it is also possible that an operator would filter out any packet | it is also possible that an operator would filter out any packet | |||
| destined to an internal address and having an extension header in it. | destined to an internal address and having an extension header in it. | |||
| This common practice does not impact the SR-enabled traffic between | This common practice does not impact the SR-enabled traffic between | |||
| the overlay nodes as the intermediate transit networks do never see a | the overlay nodes as the intermediate transit networks do never see a | |||
| destination address belonging to their infrastructure. These SR- | destination address belonging to their infrastructure. These SR- | |||
| enabled overlay packets will thus never be filtered by the transit | enabled overlay packets will thus never be filtered by the transit | |||
| skipping to change at page 8, line 4 ¶ | skipping to change at page 8, line 20 ¶ | |||
| 3. Segment Routing Extension Header (SRH) | 3. Segment Routing Extension Header (SRH) | |||
| A new type of the Routing Header (originally defined in [RFC2460]) is | A new type of the Routing Header (originally defined in [RFC2460]) is | |||
| defined: the Segment Routing Header (SRH) which has a new Routing | defined: the Segment Routing Header (SRH) which has a new Routing | |||
| Type, (suggested value 4) to be assigned by IANA. | Type, (suggested value 4) to be assigned by IANA. | |||
| The Segment Routing Header (SRH) is defined as follows: | The Segment Routing Header (SRH) is defined as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Next Header | Hdr Ext Len | Routing Type | Segments Left | | | Next Header | Hdr Ext Len | Routing Type | Segments Left | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | First Segment | Flags | HMAC Key ID | | | First Segment | Flags | RESERVED | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | Segment List[0] (128 bits IPv6 address) | | | Segment List[0] (128 bits IPv6 address) | | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | | | | | | |||
| ... | ... | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | Segment List[n] (128 bits IPv6 address) | | | Segment List[n] (128 bits IPv6 address) | | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | // // | |||
| | Policy List[0] (optional) | | // Optional Type Length Value objects (variable) // | |||
| | | | // // | |||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| | Policy List[1] (optional) | | ||||
| | | | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| | Policy List[2] (optional) | | ||||
| | | | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| | Policy List[3] (optional) | | ||||
| | | | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| | | | ||||
| | | | ||||
| | HMAC (256 bits) | | ||||
| | (optional) | | ||||
| | | | ||||
| | | | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| where: | where: | |||
| o Next Header: 8-bit selector. Identifies the type of header | o Next Header: 8-bit selector. Identifies the type of header | |||
| immediately following the SRH. | immediately following the SRH. | |||
| o Hdr Ext Len: 8-bit unsigned integer, is the length of the SRH | o Hdr Ext Len: 8-bit unsigned integer, is the length of the SRH | |||
| header in 8-octet units, not including the first 8 octets. | header in 8-octet units, not including the first 8 octets. | |||
| skipping to change at page 9, line 30 ¶ | skipping to change at page 9, line 23 ¶ | |||
| o First Segment: contains the index, in the Segment List, of the | o First Segment: contains the index, in the Segment List, of the | |||
| first segment of the path which is in fact the last element of the | first segment of the path which is in fact the last element of the | |||
| Segment List. | Segment List. | |||
| o Flags: 16 bits of flags. Following flags are defined: | o Flags: 16 bits of flags. Following flags are defined: | |||
| 1 | 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |C|P|R|R| Policy Flags | | |C|P|O|A|H| Unused | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| C-flag: Clean-up flag. Set when the SRH has to be removed from | C-flag: Clean-up flag. Set when the SRH has to be removed from | |||
| the packet when packet reaches the last segment. | the packet when the packet reaches the last segment. | |||
| P-flag: Protected flag. Set when the packet has been rerouted | P-flag: Protected flag. Set when the packet has been rerouted | |||
| through FRR mechanism by a SR endpoint node. | through FRR mechanism by an SR endpoint node. | |||
| R-flags. Reserved and for future use. | O-flag: OAM flag. When set, it indicates that this packet is | |||
| an operations and management (OAM) packet. | ||||
| Policy Flags. Define the type of the IPv6 addresses encoded | A-flag: Alert flag. If present, it means important Type Length | |||
| into the Policy List (see below). The following have been | Value (TLV) objects are present. See Section 3.1 for details | |||
| defined: | on TLVs objects. | |||
| Bits 4-6: determine the type of the first element after the | H-flag: HMAC flag. If set, the HMAC TLV is present and is | |||
| segment list. | encoded as the last TLV of the SRH. In other words, the last | |||
| 36 octets of the SRH represent the HMAC information. See | ||||
| Section 3.1.5 for details on the HMAC TLV. | ||||
| Bits 7-9: determine the type of the second element. | Unused: Reserved and for future use. SHOULD be unset on | |||
| transmission and MUST be ignored on receipt. | ||||
| Bits 10-12: determine the type of the third element. | o RESERVED: SHOULD be unset on transmission and MUST be ignored on | |||
| receipt. | ||||
| Bits 13-15: determine the type of the fourth element. | o Segment List[n]: 128 bit IPv6 addresses representing the nth | |||
| segment in the Segment List. The Segment List is encoded starting | ||||
| from the last segment of the path. I.e., the first element of the | ||||
| segment list (Segment List [0]) contains the last segment of the | ||||
| path while the last segment of the Segment List (Segment List[n]) | ||||
| contains the first segment of the path. The index contained in | ||||
| "Segments Left" identifies the current active segment. | ||||
| The following values are used for the type: | o Type Length Value (TLV) are described in Section 3.1. | |||
| 0x0: Not present. If value is set to 0x0, it means the | 3.1. SRH TLVs | |||
| element represented by these bits is not present. | ||||
| 0x1: SR Ingress. | This section defines TLVs of the Segment Routing Header. | |||
| 0x2: SR Egress. | Type Length Value (TLV) contain optional information that may be used | |||
| by the node identified in the DA of the packet. It has to be noted | ||||
| that the information carried in the TLVs is not intended to be used | ||||
| by the routing layer. Typically, TLVs carry information that is | ||||
| consumed by other components (e.g.: OAM) than the routing function. | ||||
| 0x3: Original Source Address. | Each TLV has its own length, format and semantic. The code-point | |||
| allocated (by IANA) to each TLV defines both the format and the | ||||
| semantic of the information carried in the TLV. Multiple TLVs may be | ||||
| encoded in the same SRH. | ||||
| 0x4 to 0x7: currently unused and SHOULD be ignored on | The "Length" field of the TLV is primarily used to skip the TLV while | |||
| reception. | inspecting the SRH in case the node doesn't support or recognize the | |||
| TLV codepoint. The "Length" defines the TLV length in octets and not | ||||
| including the "Type" and "Length" fields. | ||||
| o HMAC Key ID and HMAC field, and their use are defined in | The primary scope of TLVs is to give the receiver of the packet | |||
| Section 5. | information related to the source routed path (e.g.: where the packet | |||
| entered in the SR domain and where it is expected to exit). | ||||
| o Segment List[n]: 128 bit IPv6 addresses representing the nth | Additional TLVs may be defined in the future. | |||
| segment in the Segment List. The Segment List is encoded starting | ||||
| from the last segment of the path. I.e., the first element of the | ||||
| segment list (Segment List [0]) contains the last segment of the | ||||
| path while the last segment of the Segment List (Segment List[n]) | ||||
| contains the first segment of the path. The index contained in | ||||
| "Segments Left" identifies the current active segment. | ||||
| o Policy List. Optional addresses representing specific nodes in | 3.1.1. Ingress Node TLV | |||
| the SR path such as: | ||||
| SR Ingress: a 128 bit generic identifier representing the | The Ingress Node TLV is optional and identifies the node this packet | |||
| ingress in the SR domain (i.e.: it needs not to be a valid IPv6 | traversed when entered the SR domain. The Ingress Node TLV has | |||
| address). | following format: | |||
| SR Egress: a 128 bit generic identifier representing the egress | 0 1 2 3 | |||
| in the SR domain (i.e.: it needs not to be a valid IPv6 | 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 | |||
| address). | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | RESERVED | Flags | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| | Ingress Node (16 octets) | | ||||
| | | | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Original Source Address: IPv6 address originally present in the | where: | |||
| SA field of the packet. | ||||
| The segments in the Policy List are encoded after the segment list | o Type: to be assigned by IANA (suggested value 1). | |||
| and they are optional. If none are in the SRH, all bits of the | ||||
| Policy List Flags MUST be set to 0x0. | ||||
| 3.1. SRH and RFC2460 behavior | o Length: 18. | |||
| o RESERVED: 8 bits. SHOULD be unset on transmission and MUST be | ||||
| ignored on receipt. | ||||
| o Flags: 8 bits. No flags are defined in this document. | ||||
| o Ingress Node: 128 bits. Defines the node where the packet is | ||||
| expected to enter the SR domain. In the encapsulation case | ||||
| described in Section 2.2.1, this information corresponds to the SA | ||||
| of the encapsulating header. | ||||
| 3.1.2. Egress Node TLV | ||||
| The Egress Node TLV is optional and identifies the node this packet | ||||
| is expected to traverse when exiting the SR domain. The Egress Node | ||||
| TLV has following format: | ||||
| 0 1 2 3 | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type | Length | RESERVED | Flags | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| | Egress Node (16 octets) | | ||||
| | | | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| where: | ||||
| o Type: to be assigned by IANA (suggested value 2). | ||||
| o Length: 18. | ||||
| o RESERVED: 8 bits. SHOULD be unset on transmission and MUST be | ||||
| ignored on receipt. | ||||
| o Flags: 8 bits. No flags are defined in this document. | ||||
| o Egress Node: 128 bits. Defines the node where the packet is | ||||
| expected to exit the SR domain. In the encapsulation case | ||||
| described in Section 2.2.1, this information corresponds to the | ||||
| last segment of the SRH in the encapsulating header. | ||||
| 3.1.3. Opaque Container TLV | ||||
| The Opaque Container TLV is optional and has the following format: | ||||
| 0 1 2 3 | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type | Length | RESERVED | Flags | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| | Opaque Container (16 octets) | | ||||
| | | | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| where: | ||||
| o Type: to be assigned by IANA (suggested value 3). | ||||
| o Length: 18. | ||||
| o RESERVED: 8 bits. SHOULD be unset on transmission and MUST be | ||||
| ignored on receipt. | ||||
| o Flags: 8 bits. No flags are defined in this document. | ||||
| o Opaque Container: 128 bits of opaque data not relevant for the | ||||
| routing layer. Typically, this information is consumed by a non- | ||||
| routing component of the node receiving the packet (i.e.: the node | ||||
| in the DA). | ||||
| 3.1.4. Padding TLV | ||||
| The Padding TLV is optional and with the purpose of aligning the SRH | ||||
| on a 8 octet boundary. The Padding TLV has the following format: | ||||
| 0 1 2 3 | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type | Length | Padding (variable) | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| // Padding (variable) // | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| where: | ||||
| o Type: to be assigned by IANA (suggested value 4). | ||||
| o Length: 1 to 7 | ||||
| o Padding: from 1 to 7 octets of padding. Padding bits have no | ||||
| semantic. They SHOULD be set to 0 on transmission and MUST be | ||||
| ignored on receipt. | ||||
| The following applies to the Padding TLV: | ||||
| o Padding TLV is optional and MAY only appear once in the SRH. If | ||||
| present, it MUST have a length between 1 and 7 octets. | ||||
| o The Padding TLV is used in order to align the SRH total length on | ||||
| the 8 octet boundary. | ||||
| o When present, the Padding TLV MUST appear as the last TLV before | ||||
| the HMAC TLV (if HMAC TLV is present). | ||||
| o When present, the Padding TLV MUST have a length from 1 to 7 in | ||||
| order to align the SRH total lenght on a 8-octet boundary. | ||||
| o When a router inspecting the SRH encounters the Padding TLV, it | ||||
| MUST assume that no other TLV (other than the HMAC) follow the | ||||
| Padding TLV. | ||||
| 3.1.5. HMAC TLV | ||||
| HMAC TLV is optional and contains the HMAC information. The HMAC TLV | ||||
| has the following format: | ||||
| 0 1 2 3 | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type | Length | RESERVED | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | HMAC Key ID (4 octets) | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | // | ||||
| | HMAC (32 octets) // | ||||
| | // | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| where: | ||||
| o Type: to be assigned by IANA (suggested value 5). | ||||
| o Length: 38. | ||||
| o RESERVED: 2 octets. SHOULD be unset on transmission and MUST be | ||||
| ignored on receipt. | ||||
| o HMAC Key ID: 4 octets. | ||||
| o HMAC: 32 octets. | ||||
| o HMAC and HMAC Key ID usage is described in Section 5 | ||||
| The Following applies to the HMAC TLV: | ||||
| o When present, the HMAC TLV MUST be encoded as the last TLV of the | ||||
| SRH. | ||||
| o If the HMAC TLV is present, the SRH H-Flag (Figure 4) MUST be set. | ||||
| o When the H-flag is set in the SRH, the router inspecting the SRH | ||||
| MUST find the HMAC TLV in the last 38 octets of the SRH. | ||||
| 3.2. SRH and RFC2460 behavior | ||||
| The SRH being a new type of the Routing Header, it also has the same | The SRH being a new type of the Routing Header, it also has the same | |||
| properties: | properties: | |||
| SHOULD only appear once in the packet. | SHOULD only appear once in the packet. | |||
| Only the router whose address is in the DA field of the packet | Only the router whose address is in the DA field of the packet | |||
| header MUST inspect the SRH. | header MUST inspect the SRH. | |||
| Therefore, Segment Routing in IPv6 networks implies that the segment | Therefore, Segment Routing in IPv6 networks implies that the segment | |||
| skipping to change at page 11, line 27 ¶ | skipping to change at page 15, line 17 ¶ | |||
| DA of the packet. | DA of the packet. | |||
| The DA of the packet changes at each segment termination/completion | The DA of the packet changes at each segment termination/completion | |||
| and therefore the final DA of the packet MUST be encoded as the last | and therefore the final DA of the packet MUST be encoded as the last | |||
| segment of the path. | segment of the path. | |||
| 4. SRH Procedures | 4. SRH Procedures | |||
| In this section we describe the different procedures on the SRH. | In this section we describe the different procedures on the SRH. | |||
| 4.1. Segment Routing Node Functions | 4.1. Source SR Node | |||
| SR packets are forwarded to segments endpoints (i.e.: the segment | ||||
| endpoint is the node representing the segment and whose address is in | ||||
| the segment list and in the DA of the packet when traveling in the | ||||
| segment). The segment endpoint, when receiving a SR packet destined | ||||
| to itself, does: | ||||
| o Inspect the SRH. | ||||
| o Determine the next active segment. | ||||
| o Update the Segments Left field (or, if requested, remove the SRH | ||||
| from the packet). | ||||
| o Update the DA. | ||||
| o Forward the packet to the next segment. | ||||
| The procedures applied to the SRH are related to the node function. | ||||
| Following nodes functions are defined: | ||||
| Source SR Node. | ||||
| SR Domain Ingress Node. | ||||
| Transit Node. | ||||
| SR Endpoint Node. | ||||
| 4.1.1. Source SR Node | ||||
| A Source SR Node can be any node originating an IPv6 packet with its | A Source SR Node can be any node originating an IPv6 packet with its | |||
| IPv6 and Segment Routing Headers. This include either: | IPv6 and Segment Routing Headers. This include either: | |||
| A host originating an IPv6 packet | A host originating an IPv6 packet. | |||
| A SR domain ingress router encapsulating a received IPv6 packet | An SR domain ingress router encapsulating a received IPv6 packet | |||
| into an outer IPv6 header followed by a SRH | into an outer IPv6 header followed by an SRH. | |||
| The mechanism through which a Segment List is derived is outside of | The mechanism through which a Segment List is derived is outside of | |||
| the scope of this document. As an example, the Segment List may be | the scope of this document. As an example, the Segment List may be | |||
| obtained through: | obtained through: | |||
| Local path computation. | Local path computation. | |||
| Local configuration. | Local configuration. | |||
| Interaction with a centralized controller delivering the path. | Interaction with a centralized controller delivering the path. | |||
| Any other mechanism. | Any other mechanism. | |||
| The following are the steps of the creation of the SRH: | The following are the steps of the creation of the SRH: | |||
| Next Header and Hdr Ext Len fields are set according to [RFC2460]. | Next Header and Hdr Ext Len fields are set according to [RFC2460]. | |||
| Routing Type field is set as TBD (SRH). | Routing Type field is set as TBD (to be allocated by IANA, | |||
| suggested value 4). | ||||
| The Segment List is built with the FIRST segment of the path | The Segment List is built with the FIRST segment of the path | |||
| encoded in the LAST element of the Segment List. Subsequent | encoded in the LAST element of the Segment List. Subsequent | |||
| segments are encoded on top of the first segment. Finally, the | segments are encoded on top of the first segment. Finally, the | |||
| LAST segment of the path is encoded in the FIRST element of the | LAST segment of the path is encoded in the FIRST element of the | |||
| Segment List. In other words, the Segment List is encoded in the | Segment List. In other words, the Segment List is encoded in the | |||
| reverse order of the path. | reverse order of the path. | |||
| The final DA of the packet is encoded as the last segment of the | The final DA of the packet is encoded as the last segment of the | |||
| path (encoded in the first element of the Segment List). | path (encoded in the first element of the Segment List). | |||
| skipping to change at page 13, line 11 ¶ | skipping to change at page 16, line 20 ¶ | |||
| The Segments Left field is set to n-1 where n is the number of | The Segments Left field is set to n-1 where n is the number of | |||
| elements in the Segment List. | elements in the Segment List. | |||
| The First Segment field is set to n-1 where n is the number of | The First Segment field is set to n-1 where n is the number of | |||
| elements in the Segment List. | elements in the Segment List. | |||
| The packet is sent out towards the first segment (i.e.: | The packet is sent out towards the first segment (i.e.: | |||
| represented in the packet DA). | represented in the packet DA). | |||
| HMAC and HMAC Key ID may be set according to Section 5. | HMAC TLV may be set according to Section 5. | |||
| 4.1.2. SR Domain Ingress Node | ||||
| The SR Domain Ingress Node is the node where ingress policies are | ||||
| applied and where the packet path (and processing) is determined. | ||||
| After policies are applied and packet classification is done, the | ||||
| result may be instantiated into a Segment List representing the path | ||||
| the packet should take. In such case, the SR Domain Ingress Node | ||||
| instantiate a new outer IPv6 header to which the SRH is appended | ||||
| (with the computed Segment List). The procedures for the creation | ||||
| and insertion of the new SRH are described in Section 4.1.1. | ||||
| 4.1.3. Transit Node | 4.2. Transit Node | |||
| According to [RFC2460], the only node who is allowed to inspect the | According to [RFC2460], the only node who is allowed to inspect the | |||
| Routing Extension Header (and therefore the SRH), is the node | Routing Extension Header (and therefore the SRH), is the node | |||
| corresponding to the DA of the packet. Any other transit node MUST | corresponding to the DA of the packet. Any other transit node MUST | |||
| NOT inspect the underneath routing header and MUST forward the packet | NOT inspect the underneath routing header and MUST forward the packet | |||
| towards the DA and according to the IPv6 routing table. | towards the DA and according to the IPv6 routing table. | |||
| In the example case described in Section 2.2.2, when SR capable nodes | In the example case described in Section 2.2.2, when SR capable nodes | |||
| are connected through an overlay spanning multiple third-party | are connected through an overlay spanning multiple third-party | |||
| infrastructure, it is safe to send SRH packets (i.e.: packet having a | infrastructure, it is safe to send SRH packets (i.e.: packet having a | |||
| Segment Routing Header) between each other overlay/SR-capable nodes | Segment Routing Header) between each other overlay/SR-capable nodes | |||
| as long as the segment list does not include any of the transit | as long as the segment list does not include any of the transit | |||
| provider nodes. In addition, as a generic security measure, any | provider nodes. In addition, as a generic security measure, any | |||
| service provider will block any packet destined to one of its | service provider will block any packet destined to one of its | |||
| internal routers, especially if these packets have an extended header | internal routers, especially if these packets have an extended header | |||
| in it. | in it. | |||
| 4.1.4. SR Segment Endpoint Node | 4.3. SR Segment Endpoint Node | |||
| The SR segment endpoint node is the node whose address is in the DA. | The SR segment endpoint node is the node whose address is in the DA. | |||
| The segment endpoint node inspects the SRH and does: | The segment endpoint node inspects the SRH and does: | |||
| 1. IF DA = myself (segment endpoint) | 1. IF DA = myself (segment endpoint) | |||
| 2. IF Segments Left > 0 THEN | 2. IF Segments Left > 0 THEN | |||
| decrement Segments Left | decrement Segments Left | |||
| update DA with Segment List[Segments Left] | update DA with Segment List[Segments Left] | |||
| 3. IF Segments Left == 0 THEN | 3. IF Segments Left == 0 THEN | |||
| IF Clean-up bit is set THEN remove the SRH | IF Clean-up bit is set THEN remove the SRH | |||
| skipping to change at page 14, line 23 ¶ | skipping to change at page 17, line 23 ¶ | |||
| 5. Forward the packet out | 5. Forward the packet out | |||
| 5. Security Considerations | 5. Security Considerations | |||
| This section analyzes the security threat model, the security issues | This section analyzes the security threat model, the security issues | |||
| and proposed solutions related to the new Segment Routing Header. | and proposed solutions related to the new Segment Routing Header. | |||
| The Segment Routing Header (SRH) is simply another type of the | The Segment Routing Header (SRH) is simply another type of the | |||
| routing header as described in RFC 2460 [RFC2460] and is: | routing header as described in RFC 2460 [RFC2460] and is: | |||
| o inserted by a SR edge router when entering the segment routing | o inserted by an SR edge router when entering the segment routing | |||
| domain or by the originating host itself. The source host can | domain or by the originating host itself. The source host can | |||
| even be outside the SR domain; | even be outside the SR domain; | |||
| o inspected and acted upon when reaching the destination address of | o inspected and acted upon when reaching the destination address of | |||
| the IP header per RFC 2460 [RFC2460]. | the IP header per RFC 2460 [RFC2460]. | |||
| Per RFC2460 [RFC2460], routers on the path that simply forward an | Per RFC2460 [RFC2460], routers on the path that simply forward an | |||
| IPv6 packet (i.e. the IPv6 destination address is none of theirs) | IPv6 packet (i.e. the IPv6 destination address is none of theirs) | |||
| will never inspect and process the content of SRH. Routers whose one | will never inspect and process the content of the SRH. Routers whose | |||
| interface IPv6 address equals the destination address field of the | one interface IPv6 address equals the destination address field of | |||
| IPv6 packet MUST to parse the SRH and, if supported and if the local | the IPv6 packet MUST parse the SRH and, if supported and if the local | |||
| configuration allows it, MUST act accordingly to the SRH content. | configuration allows it, MUST act accordingly to the SRH content. | |||
| According to RFC2460 [RFC2460], the default behavior of a non SR- | According to RFC2460 [RFC2460], the default behavior of a non SR- | |||
| capable router upon receipt of an IPv6 packet with SRH destined to an | capable router upon receipt of an IPv6 packet with SRH destined to an | |||
| address of its, is to: | address of its, is to: | |||
| o ignore the SRH completely if the Segment Left field is 0 and | o ignore the SRH completely if the Segment Left field is 0 and | |||
| proceed to process the next header in the IPv6 packet; | proceed to process the next header in the IPv6 packet; | |||
| o discard the IPv6 packet if Segment Left field is greater than 0, | o discard the IPv6 packet if Segment Left field is greater than 0, | |||
| it MAY send a Parameter Problem ICMP message back to the Source | it MAY send a Parameter Problem ICMP message back to the Source | |||
| Address. | Address. | |||
| 5.1. Threat model | 5.1. Threat model | |||
| 5.1.1. Source routing threats | 5.1.1. Source routing threats | |||
| Using a SRH is similar to source routing, therefore it has some well- | Using an SRH is similar to source routing, therefore it has some | |||
| known security issues as described in RFC4942 [RFC4942] section 2.1.1 | well-known security issues as described in RFC4942 [RFC4942] section | |||
| and RFC5095 [RFC5095]: | 2.1.1 and RFC5095 [RFC5095]: | |||
| o amplification attacks: where a packet could be forged in such a | o amplification attacks: where a packet could be forged in such a | |||
| way to cause looping among a set of SR-enabled routers causing | way to cause looping among a set of SR-enabled routers causing | |||
| unnecessary traffic, hence a Denial of Service (DoS) against | unnecessary traffic, hence a Denial of Service (DoS) against | |||
| bandwidth; | bandwidth; | |||
| o reflection attack: where a hacker could force an intermediate node | o reflection attack: where a hacker could force an intermediate node | |||
| to appear as the immediate attacker, hence hiding the real | to appear as the immediate attacker, hence hiding the real | |||
| attacker from naive forensic; | attacker from naive forensic; | |||
| skipping to change at page 17, line 19 ¶ | skipping to change at page 20, line 19 ¶ | |||
| Routing Type and not limited to SRH packets. So, it is not specific | Routing Type and not limited to SRH packets. So, it is not specific | |||
| to SRH and the usual rate limiting for ICMP generation is required | to SRH and the usual rate limiting for ICMP generation is required | |||
| anyway for any IPv6 implementation and has been implemented and | anyway for any IPv6 implementation and has been implemented and | |||
| deployed for many years. | deployed for many years. | |||
| 5.2. Security fields in SRH | 5.2. Security fields in SRH | |||
| This section summarizes the use of specific fields in the SRH. They | This section summarizes the use of specific fields in the SRH. They | |||
| are based on a key-hashed message authentication code (HMAC). | are based on a key-hashed message authentication code (HMAC). | |||
| The security-related fields in SRH are: | The security-related fields in the SRH are instantiated by the HMAC | |||
| TLV, containing: | ||||
| o HMAC Key-id, 8 bits wide; | o HMAC Key-id, 16 bits wide; | |||
| o HMAC, 256 bits wide (optional, exists only if HMAC Key-id is not | o HMAC, 256 bits wide (optional, exists only if HMAC Key-id is not | |||
| 0). | 0). | |||
| The HMAC field is the output of the HMAC computation (per RFC 2104 | The HMAC field is the output of the HMAC computation (per RFC 2104 | |||
| [RFC2104]) using a pre-shared key identified by HMAC Key-id and of | [RFC2104]) using a pre-shared key identified by HMAC Key-id and of | |||
| the text which consists of the concatenation of: | the text which consists of the concatenation of: | |||
| o the source IPv6 address; | o the source IPv6 address; | |||
| o First Segment field; | o First Segment field; | |||
| o an octet whose bit-0 is the clean-up bit flag and others are 0; | o an octet whose bit-0 is the clean-up bit flag and others are 0; | |||
| o HMAC Key-id; | o HMAC Key-id; | |||
| o all addresses in the Segment List. | o all addresses in the Segment List. | |||
| The purpose of the HMAC field is to verify the validity, the | The purpose of the HMAC TLV is to verify the validity, the integrity | |||
| integrity and the authorization of the SRH itself. If an outsider of | and the authorization of the SRH itself. If an outsider of the SR | |||
| the SR domain does not have access to a current pre-shared secret, | domain does not have access to a current pre-shared secret, then it | |||
| then it cannot compute the right HMAC field and the first SR router | cannot compute the right HMAC field and the first SR router on the | |||
| on the path processing the SRH and configured to check the validity | path processing the SRH and configured to check the validity of the | |||
| of the HMAC will simply reject the packet. | HMAC will simply reject the packet. | |||
| The HMAC field is located at the end of the SRH simply because only | The HMAC TLV is located at the end of the SRH simply because only the | |||
| the router on the ingress of the SR domain needs to process it, then | router on the ingress of the SR domain needs to process it, then all | |||
| all other SR nodes can ignore it (based on local policy) because they | other SR nodes can ignore it (based on local policy) because they | |||
| trust the upstream router. This is to speed up forwarding operations | trust the upstream router. This is to speed up forwarding operations | |||
| because SR routers which do not validate the SRH do not need to parse | because SR routers which do not validate the SRH do not need to parse | |||
| the SRH until the end. | the SRH until the end. | |||
| The HMAC Key-id field allows for the simultaneous existence of | The HMAC Key-id field allows for the simultaneous existence of | |||
| several hash algorithms (SHA-256, SHA3-256 ... or future ones) as | several hash algorithms (SHA-256, SHA3-256 ... or future ones) as | |||
| well as pre-shared keys. The HMAC Key-id field is opaque, i.e., it | well as pre-shared keys. The HMAC Key-id field is opaque, i.e., it | |||
| has neither syntax nor semantic except as an index to the right | has neither syntax nor semantic except as an index to the right | |||
| combination of pre-shared key and hash algorithm and except that a | combination of pre-shared key and hash algorithm and except that a | |||
| value of 0 means that there is no HMAC field. Having a HMAC Key-id | value of 0 means that there is no HMAC field. Having an HMAC Key-id | |||
| field allows for pre-shared key roll-over when two pre-shared keys | field allows for pre-shared key roll-over when two pre-shared keys | |||
| are supported for a while when all SR nodes converged to a fresher | are supported for a while when all SR nodes converged to a fresher | |||
| pre-shared key. It could also allow for interoperation among | pre-shared key. It could also allow for interoperation among | |||
| different SR domains if allowed by local policy and assuming a | different SR domains if allowed by local policy and assuming a | |||
| collision-free HMAC Key Id allocation. | collision-free HMAC Key Id allocation. | |||
| When a specific SRH is linked to a time-related service (such as | When a specific SRH is linked to a time-related service (such as | |||
| turbo-QoS for a 1-hour period) where the DA, Segment ID (SID) are | turbo-QoS for a 1-hour period) where the DA, Segment ID (SID) are | |||
| identical, then it is important to refresh the shared-secret | identical, then it is important to refresh the shared-secret | |||
| frequently as the HMAC validity period expires only when the HMAC | frequently as the HMAC validity period expires only when the HMAC | |||
| Key-id and its associated shared-secret expires. | Key-id and its associated shared-secret expires. | |||
| 5.2.1. Selecting a hash algorithm | 5.2.1. Selecting a hash algorithm | |||
| The HMAC field in the SRH is 256 bit wide. Therefore, the HMAC MUST | The HMAC field in the HMAC TLV is 256 bit wide. Therefore, the HMAC | |||
| be based on a hash function whose output is at least 256 bits. If | MUST be based on a hash function whose output is at least 256 bits. | |||
| the output of the hash function is 256, then this output is simply | If the output of the hash function is 256, then this output is simply | |||
| inserted in the HMAC field. If the output of the hash function is | inserted in the HMAC field. If the output of the hash function is | |||
| larger than 256 bits, then the output value is truncated to 256 by | larger than 256 bits, then the output value is truncated to 256 by | |||
| taking the least-significant 256 bits and inserting them in the HMAC | taking the least-significant 256 bits and inserting them in the HMAC | |||
| field. | field. | |||
| SRH implementations can support multiple hash functions but MUST | SRH implementations can support multiple hash functions but MUST | |||
| implement SHA-2 [FIPS180-4] in its SHA-256 variant. | implement SHA-2 [FIPS180-4] in its SHA-256 variant. | |||
| NOTE: SHA-1 is currently used by some early implementations used for | NOTE: SHA-1 is currently used by some early implementations used for | |||
| quick interoperations testing, the 160-bit hash value must then be | quick interoperations testing, the 160-bit hash value must then be | |||
| right-hand padded with 96 bits set to 0. The authors understand that | right-hand padded with 96 bits set to 0. The authors understand that | |||
| this is not secure but is ok for limited tests. | this is not secure but is ok for limited tests. | |||
| 5.2.2. Performance impact of HMAC | 5.2.2. Performance impact of HMAC | |||
| While adding a HMAC to each and every SR packet increases the | While adding an HMAC to each and every SR packet increases the | |||
| security, it has a performance impact. Nevertheless, it must be | security, it has a performance impact. Nevertheless, it must be | |||
| noted that: | noted that: | |||
| o the HMAC field is used only when SRH is inserted by a device (such | o the HMAC field is used only when SRH is inserted by a device (such | |||
| as a home set-up box) which is outside of the segment routing | as a home set-up box) which is outside of the segment routing | |||
| domain. If the SRH is added by a router in the trusted segment | domain. If the SRH is added by a router in the trusted segment | |||
| routing domain, then, there is no need for a HMAC field, hence no | routing domain, then, there is no need for an HMAC field, hence no | |||
| performance impact. | performance impact. | |||
| o when present, the HMAC field MUST only be checked and validated by | o when present, the HMAC field MUST only be checked and validated by | |||
| the first router of the segment routing domain, this router is | the first router of the segment routing domain, this router is | |||
| named 'validating SR router'. Downstream routers may not inspect | named 'validating SR router'. Downstream routers may not inspect | |||
| the HMAC field. | the HMAC field. | |||
| o this validating router can also have a cache of <IPv6 header + | o this validating router can also have a cache of <IPv6 header + | |||
| SRH, HMAC field value> to improve the performance. It is not the | SRH, HMAC field value> to improve the performance. It is not the | |||
| same use case as in IPsec where HMAC value was unique per packet, | same use case as in IPsec where HMAC value was unique per packet, | |||
| skipping to change at page 20, line 9 ¶ | skipping to change at page 23, line 9 ¶ | |||
| o dynamically using a trusted key distribution such as [RFC6407] | o dynamically using a trusted key distribution such as [RFC6407] | |||
| The intent of this document is NOT to define yet-another-key- | The intent of this document is NOT to define yet-another-key- | |||
| distribution-protocol. | distribution-protocol. | |||
| 5.3. Deployment Models | 5.3. Deployment Models | |||
| 5.3.1. Nodes within the SR domain | 5.3.1. Nodes within the SR domain | |||
| A SR domain is defined as a set of interconnected routers where all | An SR domain is defined as a set of interconnected routers where all | |||
| routers at the perimeter are configured to insert and act on SRH. | routers at the perimeter are configured to insert and act on SRH. | |||
| Some routers inside the SR domain can also act on SRH or simply | Some routers inside the SR domain can also act on SRH or simply | |||
| forward IPv6 packets. | forward IPv6 packets. | |||
| The routers inside a SR domain can be trusted to generate SRH and to | The routers inside an SR domain can be trusted to generate SRH and to | |||
| process SRH received on interfaces that are part of the SR domain. | process SRH received on interfaces that are part of the SR domain. | |||
| These nodes MUST drop all SRH packets received on an interface that | These nodes MUST drop all SRH packets received on an interface that | |||
| is not part of the SR domain and containing a SRH whose HMAC field | is not part of the SR domain and containing an SRH whose HMAC field | |||
| cannot be validated by local policies. This includes obviously | cannot be validated by local policies. This includes obviously | |||
| packet with a SRH generated by a non-cooperative SR domain. | packet with an SRH generated by a non-cooperative SR domain. | |||
| If the validation fails, then these packets MUST be dropped, ICMP | If the validation fails, then these packets MUST be dropped, ICMP | |||
| error messages (parameter problem) SHOULD be generated (but rate | error messages (parameter problem) SHOULD be generated (but rate | |||
| limited) and SHOULD be logged. | limited) and SHOULD be logged. | |||
| 5.3.2. Nodes outside of the SR domain | 5.3.2. Nodes outside of the SR domain | |||
| Nodes outside of the SR domain cannot be trusted for physical | Nodes outside of the SR domain cannot be trusted for physical | |||
| security; hence, they need to request by some trusted means (outside | security; hence, they need to request by some trusted means (outside | |||
| of the scope of this document) a complete SRH for each new connection | of the scope of this document) a complete SRH for each new connection | |||
| (i.e. new destination address). The received SRH MUST include a HMAC | (i.e. new destination address). The received SRH MUST include an | |||
| Key-id and HMAC field which is computed correctly (see Section 5.2). | HMAC TLV which is computed correctly (see Section 5.2). | |||
| When an outside node sends a packet with an SRH and towards a SR | When an outside node sends a packet with an SRH and towards an SR | |||
| domain ingress node, the packet MUST contain the HMAC Key-id and HMAC | domain ingress node, the packet MUST contain the HMAC TLV (with a | |||
| field and the the destination address MUST be an address of a SR | Key-id and HMAC fields) and the the destination address MUST be an | |||
| domain ingress node . | address of an SR domain ingress node . | |||
| The ingress SR router, i.e., the router with an interface address | The ingress SR router, i.e., the router with an interface address | |||
| equals to the destination address, MUST verify the HMAC field with | equals to the destination address, MUST verify the HMAC TLV. | |||
| respect to the HMAC Key-id. | ||||
| If the validation is successful, then the packet is simply forwarded | If the validation is successful, then the packet is simply forwarded | |||
| as usual for a SR packet. As long as the packet travels within the | as usual for an SR packet. As long as the packet travels within the | |||
| SR domain, no further HMAC check needs to be done. Subsequent | SR domain, no further HMAC check needs to be done. Subsequent | |||
| routers in the SR domain MAY verify the HMAC field when they process | routers in the SR domain MAY verify the HMAC TLV when they process | |||
| the SRH (i.e. when they are the destination). | the SRH (i.e. when they are the destination). | |||
| If the validation fails, then this packet MUST be dropped, an ICMP | If the validation fails, then this packet MUST be dropped, an ICMP | |||
| error message (parameter problem) SHOULD be generated (but rate | error message (parameter problem) SHOULD be generated (but rate | |||
| limited) and SHOULD be logged. | limited) and SHOULD be logged. | |||
| 5.3.3. SR path exposure | 5.3.3. SR path exposure | |||
| As the intermediate SR nodes addresses appears in the SRH, if this | As the intermediate SR nodes addresses appears in the SRH, if this | |||
| SRH is visible to an outsider then he/she could reuse this knowledge | SRH is visible to an outsider then he/she could reuse this knowledge | |||
| skipping to change at page 21, line 40 ¶ | skipping to change at page 24, line 40 ¶ | |||
| 5.3.4. Impact of BCP-38 | 5.3.4. Impact of BCP-38 | |||
| BCP-38 [RFC2827], also known as "Network Ingress Filtering", checks | BCP-38 [RFC2827], also known as "Network Ingress Filtering", checks | |||
| whether the source address of packets received on an interface is | whether the source address of packets received on an interface is | |||
| valid for this interface. The use of loose source routing such as | valid for this interface. The use of loose source routing such as | |||
| SRH forces packets to follow a path which differs from the expected | SRH forces packets to follow a path which differs from the expected | |||
| routing. Therefore, if BCP-38 was implemented in all routers inside | routing. Therefore, if BCP-38 was implemented in all routers inside | |||
| the SR domain, then SR packets could be received by an interface | the SR domain, then SR packets could be received by an interface | |||
| which is not expected one and the packets could be dropped. | which is not expected one and the packets could be dropped. | |||
| As a SR domain is usually a subset of one administrative domain, and | As an SR domain is usually a subset of one administrative domain, and | |||
| as BCP-38 is only deployed at the ingress routers of this | as BCP-38 is only deployed at the ingress routers of this | |||
| administrative domain and as packets arriving at those ingress | administrative domain and as packets arriving at those ingress | |||
| routers have been normally forwarded using the normal routing | routers have been normally forwarded using the normal routing | |||
| information, then there is no reason why this ingress router should | information, then there is no reason why this ingress router should | |||
| drop the SRH packet based on BCP-38. Routers inside the domain | drop the SRH packet based on BCP-38. Routers inside the domain | |||
| commonly do not apply BCP-38; so, this is not a problem. | commonly do not apply BCP-38; so, this is not a problem. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| This document makes the following registrations in the Internet | This document makes the following registrations in the Internet | |||
| Protocol Version 6 (IPv6) Parameters "Routing Type" registry | Protocol Version 6 (IPv6) Parameters "Routing Type" registry | |||
| maintained by IANA: | maintained by IANA: | |||
| Suggested Description Reference | Suggested Description Reference | |||
| Value | Value | |||
| ---------------------------------------------------------- | ---------------------------------------------------------- | |||
| 4 Segment Routing Header (SRH) This document | 4 Segment Routing Header (SRH) This document | |||
| In addition, this document request IANA to create and maintain a new | ||||
| Registry: "Segment Routing Header Type-Value Objects". The following | ||||
| code-points are requested from the registry: | ||||
| Registry: Segment Routing Header Type-Value Objects | ||||
| Suggested Description Reference | ||||
| Value | ||||
| ----------------------------------------------------- | ||||
| 1 Ingress Node TLV This document | ||||
| 2 Egress Node TLV This document | ||||
| 3 Opaque Container TLV This document | ||||
| 4 Padding TLV This document | ||||
| 5 HMAC TLV This document | ||||
| 7. Manageability Considerations | 7. Manageability Considerations | |||
| TBD | TBD | |||
| 8. Contributors | 8. Contributors | |||
| Dave Barach, John Leddy, John Brzozowski, Pierre Francois, Nagendra | Dave Barach, John Leddy, John Brzozowski, Pierre Francois, Nagendra | |||
| Kumar, Mark Townsley, Christian Martin, Roberta Maglione, James | Kumar, Mark Townsley, Christian Martin, Roberta Maglione, James | |||
| Connolly, Aloys Augustin contributed to the content of this document. | Connolly, Aloys Augustin contributed to the content of this document. | |||
| skipping to change at page 23, line 15 ¶ | skipping to change at page 26, line 33 ¶ | |||
| [RFC6407] Weis, B., Rowles, S., and T. Hardjono, "The Group Domain | [RFC6407] Weis, B., Rowles, S., and T. Hardjono, "The Group Domain | |||
| of Interpretation", RFC 6407, DOI 10.17487/RFC6407, | of Interpretation", RFC 6407, DOI 10.17487/RFC6407, | |||
| October 2011, <http://www.rfc-editor.org/info/rfc6407>. | October 2011, <http://www.rfc-editor.org/info/rfc6407>. | |||
| 10.2. Informative References | 10.2. Informative References | |||
| [I-D.ietf-isis-segment-routing-extensions] | [I-D.ietf-isis-segment-routing-extensions] | |||
| Previdi, S., Filsfils, C., Bashandy, A., Gredler, H., | Previdi, S., Filsfils, C., Bashandy, A., Gredler, H., | |||
| Litkowski, S., Decraene, B., and J. Tantsura, "IS-IS | Litkowski, S., Decraene, B., and J. Tantsura, "IS-IS | |||
| Extensions for Segment Routing", draft-ietf-isis-segment- | Extensions for Segment Routing", draft-ietf-isis-segment- | |||
| routing-extensions-05 (work in progress), June 2015. | routing-extensions-06 (work in progress), December 2015. | |||
| [I-D.ietf-ospf-ospfv3-segment-routing-extensions] | [I-D.ietf-ospf-ospfv3-segment-routing-extensions] | |||
| Psenak, P., Previdi, S., Filsfils, C., Gredler, H., | Psenak, P., Previdi, S., Filsfils, C., Gredler, H., | |||
| Shakir, R., Henderickx, W., and J. Tantsura, "OSPFv3 | Shakir, R., Henderickx, W., and J. Tantsura, "OSPFv3 | |||
| Extensions for Segment Routing", draft-ietf-ospf-ospfv3- | Extensions for Segment Routing", draft-ietf-ospf-ospfv3- | |||
| segment-routing-extensions-03 (work in progress), June | segment-routing-extensions-04 (work in progress), December | |||
| 2015. | 2015. | |||
| [I-D.ietf-spring-ipv6-use-cases] | [I-D.ietf-spring-ipv6-use-cases] | |||
| Brzozowski, J., Leddy, J., Leung, I., Previdi, S., | Brzozowski, J., Leddy, J., Leung, I., Previdi, S., | |||
| Townsley, W., Martin, C., Filsfils, C., and R. Maglione, | Townsley, W., Martin, C., Filsfils, C., and R. Maglione, | |||
| "IPv6 SPRING Use Cases", draft-ietf-spring-ipv6-use- | "IPv6 SPRING Use Cases", draft-ietf-spring-ipv6-use- | |||
| cases-05 (work in progress), September 2015. | cases-06 (work in progress), March 2016. | |||
| [I-D.ietf-spring-problem-statement] | [I-D.ietf-spring-problem-statement] | |||
| Previdi, S., Filsfils, C., Decraene, B., Litkowski, S., | Previdi, S., Filsfils, C., Decraene, B., Litkowski, S., | |||
| Horneffer, M., and r. rjs@rob.sh, "SPRING Problem | Horneffer, M., and R. Shakir, "SPRING Problem Statement | |||
| Statement and Requirements", draft-ietf-spring-problem- | and Requirements", draft-ietf-spring-problem-statement-07 | |||
| statement-05 (work in progress), October 2015. | (work in progress), March 2016. | |||
| [I-D.ietf-spring-resiliency-use-cases] | [I-D.ietf-spring-resiliency-use-cases] | |||
| Francois, P., Filsfils, C., Decraene, B., and r. | Francois, P., Filsfils, C., Decraene, B., and R. Shakir, | |||
| rjs@rob.sh, "Use-cases for Resiliency in SPRING", draft- | "Use-cases for Resiliency in SPRING", draft-ietf-spring- | |||
| ietf-spring-resiliency-use-cases-02 (work in progress), | resiliency-use-cases-02 (work in progress), December 2015. | |||
| December 2015. | ||||
| [I-D.ietf-spring-segment-routing] | [I-D.ietf-spring-segment-routing] | |||
| Filsfils, C., Previdi, S., Decraene, B., Litkowski, S., | Filsfils, C., Previdi, S., Decraene, B., Litkowski, S., | |||
| and r. rjs@rob.sh, "Segment Routing Architecture", draft- | and R. Shakir, "Segment Routing Architecture", draft-ietf- | |||
| ietf-spring-segment-routing-06 (work in progress), October | spring-segment-routing-07 (work in progress), December | |||
| 2015. | 2015. | |||
| [I-D.ietf-spring-segment-routing-mpls] | [I-D.ietf-spring-segment-routing-mpls] | |||
| Filsfils, C., Previdi, S., Bashandy, A., Decraene, B., | Filsfils, C., Previdi, S., Bashandy, A., Decraene, B., | |||
| Litkowski, S., Horneffer, M., rjs@rob.sh, r., Tantsura, | Litkowski, S., Horneffer, M., Shakir, R., Tantsura, J., | |||
| J., and E. Crabbe, "Segment Routing with MPLS data plane", | and E. Crabbe, "Segment Routing with MPLS data plane", | |||
| draft-ietf-spring-segment-routing-mpls-02 (work in | draft-ietf-spring-segment-routing-mpls-03 (work in | |||
| progress), October 2015. | progress), February 2016. | |||
| [RFC1940] Estrin, D., Li, T., Rekhter, Y., Varadhan, K., and D. | [RFC1940] Estrin, D., Li, T., Rekhter, Y., Varadhan, K., and D. | |||
| Zappala, "Source Demand Routing: Packet Format and | Zappala, "Source Demand Routing: Packet Format and | |||
| Forwarding Specification (Version 1)", RFC 1940, | Forwarding Specification (Version 1)", RFC 1940, | |||
| DOI 10.17487/RFC1940, May 1996, | DOI 10.17487/RFC1940, May 1996, | |||
| <http://www.rfc-editor.org/info/rfc1940>. | <http://www.rfc-editor.org/info/rfc1940>. | |||
| [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | |||
| Hashing for Message Authentication", RFC 2104, | Hashing for Message Authentication", RFC 2104, | |||
| DOI 10.17487/RFC2104, February 1997, | DOI 10.17487/RFC2104, February 1997, | |||
| End of changes. 72 change blocks. | ||||
| 221 lines changed or deleted | 348 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||