NAT64: Move IPv6-IPv4 virtual reassembly code from MAP-T to common library (VPP-708)
[vpp.git] / src / vnet / sr / ietf_draft_05.txt
1 Network Working Group                                    S. Previdi, Ed.
2 Internet-Draft                                               C. Filsfils
3 Intended status: Standards Track                     Cisco Systems, Inc.
4 Expires: August 5, 2017                                         B. Field
5                                                                  Comcast
6                                                                 I. Leung
7                                                    Rogers Communications
8                                                               J. Linkova
9                                                                   Google
10                                                                 E. Aries
11                                                                 Facebook
12                                                                T. Kosugi
13                                                                      NTT
14                                                                E. Vyncke
15                                                      Cisco Systems, Inc.
16                                                                D. Lebrun
17                                         Universite Catholique de Louvain
18                                                         February 1, 2017
19
20
21                    IPv6 Segment Routing Header (SRH)
22                draft-ietf-6man-segment-routing-header-05
23
24 Abstract
25
26    Segment Routing (SR) allows a node to steer a packet through a
27    controlled set of instructions, called segments, by prepending an SR
28    header to the packet.  A segment can represent any instruction,
29    topological or service-based.  SR allows to enforce a flow through
30    any path (topological, or application/service based) while
31    maintaining per-flow state only at the ingress node to the SR domain.
32
33    Segment Routing can be applied to the IPv6 data plane with the
34    addition of a new type of Routing Extension Header.  This draft
35    describes the Segment Routing Extension Header Type and how it is
36    used by SR capable nodes.
37
38 Requirements Language
39
40    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
41    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
42    document are to be interpreted as described in RFC 2119 [RFC2119].
43
44 Status of This Memo
45
46    This Internet-Draft is submitted in full conformance with the
47    provisions of BCP 78 and BCP 79.
48
49
50
51
52 Previdi, et al.          Expires August 5, 2017                 [Page 1]
53  
54 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
55
56
57    Internet-Drafts are working documents of the Internet Engineering
58    Task Force (IETF).  Note that other groups may also distribute
59    working documents as Internet-Drafts.  The list of current Internet-
60    Drafts is at http://datatracker.ietf.org/drafts/current/.
61
62    Internet-Drafts are draft documents valid for a maximum of six months
63    and may be updated, replaced, or obsoleted by other documents at any
64    time.  It is inappropriate to use Internet-Drafts as reference
65    material or to cite them other than as "work in progress."
66
67    This Internet-Draft will expire on August 5, 2017.
68
69 Copyright Notice
70
71    Copyright (c) 2017 IETF Trust and the persons identified as the
72    document authors.  All rights reserved.
73
74    This document is subject to BCP 78 and the IETF Trust's Legal
75    Provisions Relating to IETF Documents
76    (http://trustee.ietf.org/license-info) in effect on the date of
77    publication of this document.  Please review these documents
78    carefully, as they describe your rights and restrictions with respect
79    to this document.  Code Components extracted from this document must
80    include Simplified BSD License text as described in Section 4.e of
81    the Trust Legal Provisions and are provided without warranty as
82    described in the Simplified BSD License.
83
84 Table of Contents
85
86    1.  Segment Routing Documents . . . . . . . . . . . . . . . . . .   3
87    2.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
88      2.1.  Data Planes supporting Segment Routing  . . . . . . . . .   4
89      2.2.  Segment Routing (SR) Domain . . . . . . . . . . . . . . .   4
90        2.2.1.  SR Domain in a Service Provider Network . . . . . . .   5
91        2.2.2.  SR Domain in a Overlay Network  . . . . . . . . . . .   6
92    3.  Segment Routing Extension Header (SRH)  . . . . . . . . . . .   7
93      3.1.  SRH TLVs  . . . . . . . . . . . . . . . . . . . . . . . .   9
94        3.1.1.  Ingress Node TLV  . . . . . . . . . . . . . . . . . .  10
95        3.1.2.  Egress Node TLV . . . . . . . . . . . . . . . . . . .  11
96        3.1.3.  Opaque Container TLV  . . . . . . . . . . . . . . . .  11
97        3.1.4.  Padding TLV . . . . . . . . . . . . . . . . . . . . .  12
98        3.1.5.  HMAC TLV  . . . . . . . . . . . . . . . . . . . . . .  13
99      3.2.  SRH and RFC2460 behavior  . . . . . . . . . . . . . . . .  14
100    4.  SRH Procedures  . . . . . . . . . . . . . . . . . . . . . . .  14
101      4.1.  Source SR Node  . . . . . . . . . . . . . . . . . . . . .  14
102      4.2.  Transit Node  . . . . . . . . . . . . . . . . . . . . . .  15
103      4.3.  SR Segment Endpoint Node  . . . . . . . . . . . . . . . .  16
104    5.  Security Considerations . . . . . . . . . . . . . . . . . . .  16
105
106
107
108 Previdi, et al.          Expires August 5, 2017                 [Page 2]
109  
110 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
111
112
113      5.1.  Threat model  . . . . . . . . . . . . . . . . . . . . . .  17
114        5.1.1.  Source routing threats  . . . . . . . . . . . . . . .  17
115        5.1.2.  Applicability of RFC 5095 to SRH  . . . . . . . . . .  17
116        5.1.3.  Service stealing threat . . . . . . . . . . . . . . .  18
117        5.1.4.  Topology disclosure . . . . . . . . . . . . . . . . .  18
118        5.1.5.  ICMP Generation . . . . . . . . . . . . . . . . . . .  18
119      5.2.  Security fields in SRH  . . . . . . . . . . . . . . . . .  19
120        5.2.1.  Selecting a hash algorithm  . . . . . . . . . . . . .  20
121        5.2.2.  Performance impact of HMAC  . . . . . . . . . . . . .  21
122        5.2.3.  Pre-shared key management . . . . . . . . . . . . . .  21
123      5.3.  Deployment Models . . . . . . . . . . . . . . . . . . . .  22
124        5.3.1.  Nodes within the SR domain  . . . . . . . . . . . . .  22
125        5.3.2.  Nodes outside of the SR domain  . . . . . . . . . . .  22
126        5.3.3.  SR path exposure  . . . . . . . . . . . . . . . . . .  23
127        5.3.4.  Impact of BCP-38  . . . . . . . . . . . . . . . . . .  23
128    6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  24
129    7.  Manageability Considerations  . . . . . . . . . . . . . . . .  24
130    8.  Contributors  . . . . . . . . . . . . . . . . . . . . . . . .  24
131    9.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  24
132    10. References  . . . . . . . . . . . . . . . . . . . . . . . . .  25
133      10.1.  Normative References . . . . . . . . . . . . . . . . . .  25
134      10.2.  Informative References . . . . . . . . . . . . . . . . .  25
135    Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  27
136
137 1.  Segment Routing Documents
138
139    Segment Routing terminology is defined in
140    [I-D.ietf-spring-segment-routing].
141
142    Segment Routing use cases are described in [RFC7855] and
143    [I-D.ietf-spring-ipv6-use-cases].
144
145    Segment Routing protocol extensions are defined in
146    [I-D.ietf-isis-segment-routing-extensions], and
147    [I-D.ietf-ospf-ospfv3-segment-routing-extensions].
148
149 2.  Introduction
150
151    Segment Routing (SR), defined in [I-D.ietf-spring-segment-routing],
152    allows a node to steer a packet through a controlled set of
153    instructions, called segments, by prepending an SR header to the
154    packet.  A segment can represent any instruction, topological or
155    service-based.  SR allows to enforce a flow through any path
156    (topological or service/application based) while maintaining per-flow
157    state only at the ingress node to the SR domain.  Segments can be
158    derived from different components: IGP, BGP, Services, Contexts,
159    Locators, etc.  The list of segment forming the path is called the
160    Segment List and is encoded in the packet header.
161
162
163
164 Previdi, et al.          Expires August 5, 2017                 [Page 3]
165  
166 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
167
168
169    SR allows the use of strict and loose source based routing paradigms
170    without requiring any additional signaling protocols in the
171    infrastructure hence delivering an excellent scalability property.
172
173    The source based routing model described in
174    [I-D.ietf-spring-segment-routing] is inherited from the ones proposed
175    by [RFC1940] and [RFC2460].  The source based routing model offers
176    the support for explicit routing capability.
177
178 2.1.  Data Planes supporting Segment Routing
179
180    Segment Routing (SR), can be instantiated over MPLS
181    ([I-D.ietf-spring-segment-routing-mpls]) and IPv6.  This document
182    defines its instantiation over the IPv6 data-plane based on the use-
183    cases defined in [I-D.ietf-spring-ipv6-use-cases].
184
185    This document defines a new type of Routing Header (originally
186    defined in [RFC2460]) called the Segment Routing Header (SRH) in
187    order to convey the Segment List in the packet header as defined in
188    [I-D.ietf-spring-segment-routing].  Mechanisms through which segment
189    are known and advertised are outside the scope of this document.
190
191    A segment is materialized by an IPv6 address.  A segment identifies a
192    topological instruction or a service instruction.  A segment can be
193    either:
194
195    o  global: a global segment represents an instruction supported by
196       all nodes in the SR domain and it is instantiated through an IPv6
197       address globally known in the SR domain.
198
199    o  local: a local segment represents an instruction supported only by
200       the node who originates it and it is instantiated through an IPv6
201       address that is known only by the local node.
202
203 2.2.  Segment Routing (SR) Domain
204
205    We define the concept of the Segment Routing Domain (SR Domain) as
206    the set of nodes participating into the source based routing model.
207    These nodes may be connected to the same physical infrastructure
208    (e.g.: a Service Provider's network) as well as nodes remotely
209    connected to each other (e.g.: an enterprise VPN or an overlay).
210
211    A non-exhaustive list of examples of SR Domains is:
212
213    o  The network of an operator, service provider, content provider,
214       enterprise including nodes, links and Autonomous Systems.
215
216
217
218
219
220 Previdi, et al.          Expires August 5, 2017                 [Page 4]
221  
222 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
223
224
225    o  A set of nodes connected as an overlay over one or more transit
226       providers.  The overlay nodes exchange SR-enabled traffic with
227       segments belonging solely to the overlay routers (the SR domain).
228       None of the segments in the SR-enabled packets exchanged by the
229       overlay belong to the transit networks
230
231    The source based routing model through its instantiation of the
232    Segment Routing Header (SRH) defined in this document equally applies
233    to all the above examples.
234
235    It is assumed in this document that the SRH is added to the packet by
236    its source, consistently with the source routing model defined in
237    [RFC2460].  For example:
238
239    o  At the node originating the packet (host, server).
240
241    o  At the ingress node of an SR domain where the ingress node
242       receives an IPv6 packet and encapsulates it into an outer IPv6
243       header followed by a Segment Routing header.
244
245 2.2.1.  SR Domain in a Service Provider Network
246
247    The following figure illustrates an SR domain consisting of an
248    operator's network infrastructure.
249
250      (-------------------------- Operator 1 -----------------------)
251      (                                                             )
252      (  (-----AS 1-----)  (-------AS 2-------)  (----AS 3-------)  )
253      (  (              )  (                  )  (               )  )
254  A1--(--(--11---13--14-)--(-21---22---23--24-)--(-31---32---34--)--)--Z1
255      (  ( /|\  /|\  /| )  ( |\  /|\  /|\  /| )  ( |\  /|\  /| \ )  )
256  A2--(--(/ | \/ | \/ | )  ( | \/ | \/ | \/ | )  ( | \/ | \/ |  \)--)--Z2
257      (  (  | /\ | /\ | )  ( | /\ | /\ | /\ | )  ( | /\ | /\ |   )  )
258      (  (  |/  \|/  \| )  ( |/  \|/  \|/  \| )  ( |/  \|/  \|   )  )
259  A3--(--(--15---17--18-)--(-25---26---27--28-)--(-35---36---38--)--)--Z3
260      (  (              )  (                  )  (               )  )
261      (  (--------------)  (------------------)  (---------------)  )
262      (                                                             )
263      (-------------------------------------------------------------)
264
265                    Figure 1: Service Provider SR Domain
266
267    Figure 1 describes an operator network including several ASes and
268    delivering connectivity between endpoints.  In this scenario, Segment
269    Routing is used within the operator networks and across the ASes
270    boundaries (all being under the control of the same operator).  In
271    this case segment routing can be used in order to address use cases
272    such as end-to-end traffic engineering, fast re-route, egress peer
273
274
275
276 Previdi, et al.          Expires August 5, 2017                 [Page 5]
277  
278 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
279
280
281    engineering, data-center traffic engineering as described in
282    [RFC7855], [I-D.ietf-spring-ipv6-use-cases] and
283    [I-D.ietf-spring-resiliency-use-cases].
284
285    Typically, an IPv6 packet received at ingress (i.e.: from outside the
286    SR domain), is classified according to network operator policies and
287    such classification results into an outer header with an SRH applied
288    to the incoming packet.  The SRH contains the list of segment
289    representing the path the packet must take inside the SR domain.
290    Thus, the SA of the packet is the ingress node, the DA (due to SRH
291    procedures described in Section 4) is set as the first segment of the
292    path and the last segment of the path is the egress node of the SR
293    domain.
294
295    The path may include intra-AS as well as inter-AS segments.  It has
296    to be noted that all nodes within the SR domain are under control of
297    the same administration.  When the packet reaches the egress point of
298    the SR domain, the outer header and its SRH are removed so that the
299    destination of the packet is unaware of the SR domain the packet has
300    traversed.
301
302    The outer header with the SRH is no different from any other
303    tunneling encapsulation mechanism and allows a network operator to
304    implement traffic engineering mechanisms so to efficiently steer
305    traffic across his infrastructure.
306
307 2.2.2.  SR Domain in a Overlay Network
308
309    The following figure illustrates an SR domain consisting of an
310    overlay network over multiple operator's networks.
311
312        (--Operator 1---)  (-----Operator 2-----)  (--Operator 3---)
313        (               )  (                    )  (               )
314    A1--(--11---13--14--)--(--21---22---23--24--)--(-31---32---34--)--C1
315        ( /|\  /|\  /|  )  (  |\  /|\  /|\  /|  )  ( |\  /|\  /| \ )
316    A2--(/ | \/ | \/ |  )  (  | \/ | \/ | \/ |  )  ( | \/ | \/ |  \)--C2
317        (  | /\ | /\ |  )  (  | /\ | /\ | /\ |  )  ( | /\ | /\ |   )
318        (  |/  \|/  \|  )  (  |/  \|/  \|/  \|  )  ( |/  \|/  \|   )
319    A3--(--15---17--18--)--(--25---26---27--28--)--(-35---36---38--)--C3
320        (               )  (  |    |         |  )  (               )
321        (---------------)  (--|----|---------|--)  (---------------)
322                              |    |         |
323                              B1   B2        B3
324
325                         Figure 2: Overlay SR Domain
326
327
328
329
330
331
332 Previdi, et al.          Expires August 5, 2017                 [Page 6]
333  
334 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
335
336
337    Figure 2 describes an overlay consisting of nodes connected to three
338    different network operators and forming a single overlay network
339    where Segment routing packets are exchanged.
340
341    The overlay consists of nodes A1, A2, A3, B1, B2, B3, C1, C2 and C3.
342    These nodes are connected to their respective network operator and
343    form an overlay network.
344
345    Each node may originate packets with an SRH which contains, in the
346    segment list of the SRH or in the DA, segments identifying other
347    overlay nodes.  This implies that packets with an SRH may traverse
348    operator's networks but, obviously, these SRHs cannot contain an
349    address/segment of the transit operators 1, 2 and 3.  The SRH
350    originated by the overlay can only contain address/segment under the
351    administration of the overlay (e.g. address/segments supported by A1,
352    A2, A3, B1, B2, B3, C1,C2 or C3).
353
354    In this model, the operator network nodes are transit nodes and,
355    according to [RFC2460], MUST NOT inspect the routing extension header
356    since they are not the DA of the packet.
357
358    It is a common practice in operators networks to filter out, at
359    ingress, any packet whose DA is the address of an internal node and
360    it is also possible that an operator would filter out any packet
361    destined to an internal address and having an extension header in it.
362
363    This common practice does not impact the SR-enabled traffic between
364    the overlay nodes as the intermediate transit networks never see a
365    destination address belonging to their infrastructure.  These SR-
366    enabled overlay packets will thus never be filtered by the transit
367    operators.
368
369    In all cases, transit packets (i.e.: packets whose DA is outside the
370    domain of the operator's network) will be forwarded accordingly
371    without introducing any security concern in the operator's network.
372    This is similar to tunneled packets.
373
374 3.  Segment Routing Extension Header (SRH)
375
376    A new type of the Routing Header (originally defined in [RFC2460]) is
377    defined: the Segment Routing Header (SRH) which has a new Routing
378    Type, (suggested value 4) to be assigned by IANA.
379
380    The Segment Routing Header (SRH) is defined as follows:
381
382
383
384
385
386
387
388 Previdi, et al.          Expires August 5, 2017                 [Page 7]
389  
390 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
391
392
393      0                   1                   2                   3
394      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
395     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
396     | Next Header   |  Hdr Ext Len  | Routing Type  | Segments Left |
397     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
398     | First Segment |     Flags     |           RESERVED            |
399     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
400     |                                                               |
401     |            Segment List[0] (128 bits IPv6 address)            |
402     |                                                               |
403     |                                                               |
404     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
405     |                                                               |
406     |                                                               |
407                                   ...
408     |                                                               |
409     |                                                               |
410     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
411     |                                                               |
412     |            Segment List[n] (128 bits IPv6 address)            |
413     |                                                               |
414     |                                                               |
415     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
416     //                                                             //
417     //         Optional Type Length Value objects (variable)       //
418     //                                                             //
419     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
420
421    where:
422
423    o  Next Header: 8-bit selector.  Identifies the type of header
424       immediately following the SRH.
425
426    o  Hdr Ext Len: 8-bit unsigned integer, is the length of the SRH
427       header in 8-octet units, not including the first 8 octets.
428
429    o  Routing Type: TBD, to be assigned by IANA (suggested value: 4).
430
431    o  Segments Left.  Defined in [RFC2460], it contains the index, in
432       the Segment List, of the next segment to inspect.  Segments Left
433       is decremented at each segment.
434
435    o  First Segment: contains the index, in the Segment List, of the
436       first segment of the path which is in fact the last element of the
437       Segment List.
438
439    o  Flags: 8 bits of flags.  Following flags are defined:
440
441
442
443
444 Previdi, et al.          Expires August 5, 2017                 [Page 8]
445  
446 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
447
448
449           0 1 2 3 4 5 6 7
450          +-+-+-+-+-+-+-+-+
451          |U|P|O|A|H|  U  |
452          +-+-+-+-+-+-+-+-+
453
454          U: Unused and for future use.  SHOULD be unset on transmission
455          and MUST be ignored on receipt.
456
457          P-flag: Protected flag.  Set when the packet has been rerouted
458          through FRR mechanism by an SR endpoint node.
459
460          O-flag: OAM flag.  When set, it indicates that this packet is
461          an operations and management (OAM) packet.
462
463          A-flag: Alert flag.  If present, it means important Type Length
464          Value (TLV) objects are present.  See Section 3.1 for details
465          on TLVs objects.
466
467          H-flag: HMAC flag.  If set, the HMAC TLV is present and is
468          encoded as the last TLV of the SRH.  In other words, the last
469          36 octets of the SRH represent the HMAC information.  See
470          Section 3.1.5 for details on the HMAC TLV.
471
472    o  RESERVED: SHOULD be unset on transmission and MUST be ignored on
473       receipt.
474
475    o  Segment List[n]: 128 bit IPv6 addresses representing the nth
476       segment in the Segment List.  The Segment List is encoded starting
477       from the last segment of the path.  I.e., the first element of the
478       segment list (Segment List [0]) contains the last segment of the
479       path while the last segment of the Segment List (Segment List[n])
480       contains the first segment of the path.  The index contained in
481       "Segments Left" identifies the current active segment.
482
483    o  Type Length Value (TLV) are described in Section 3.1.
484
485 3.1.  SRH TLVs
486
487    This section defines TLVs of the Segment Routing Header.
488
489    Type Length Value (TLV) contain optional information that may be used
490    by the node identified in the DA of the packet.  It has to be noted
491    that the information carried in the TLVs is not intended to be used
492    by the routing layer.  Typically, TLVs carry information that is
493    consumed by other components (e.g.: OAM) than the routing function.
494
495    Each TLV has its own length, format and semantic.  The code-point
496    allocated (by IANA) to each TLV defines both the format and the
497
498
499
500 Previdi, et al.          Expires August 5, 2017                 [Page 9]
501  
502 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
503
504
505    semantic of the information carried in the TLV.  Multiple TLVs may be
506    encoded in the same SRH.
507
508    The "Length" field of the TLV is primarily used to skip the TLV while
509    inspecting the SRH in case the node doesn't support or recognize the
510    TLV codepoint.  The "Length" defines the TLV length in octets and not
511    including the "Type" and "Length" fields.
512
513    The primary scope of TLVs is to give the receiver of the packet
514    information related to the source routed path (e.g.: where the packet
515    entered in the SR domain and where it is expected to exit).
516
517    Additional TLVs may be defined in the future.
518
519 3.1.1.  Ingress Node TLV
520
521    The Ingress Node TLV is optional and identifies the node this packet
522    traversed when entered the SR domain.  The Ingress Node TLV has
523    following format:
524
525     0                   1                   2                   3
526     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
527    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
528    |      Type     |    Length     |   RESERVED    |     Flags     |
529    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
530    |                                                               |
531    |                 Ingress Node (16 octets)                      |
532    |                                                               |
533    |                                                               |
534    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
535
536    where:
537
538    o  Type: to be assigned by IANA (suggested value 1).
539
540    o  Length: 18.
541
542    o  RESERVED: 8 bits.  SHOULD be unset on transmission and MUST be
543       ignored on receipt.
544
545    o  Flags: 8 bits.  No flags are defined in this document.
546
547    o  Ingress Node: 128 bits.  Defines the node where the packet is
548       expected to enter the SR domain.  In the encapsulation case
549       described in Section 2.2.1, this information corresponds to the SA
550       of the encapsulating header.
551
552
553
554
555
556 Previdi, et al.          Expires August 5, 2017                [Page 10]
557  
558 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
559
560
561 3.1.2.  Egress Node TLV
562
563    The Egress Node TLV is optional and identifies the node this packet
564    is expected to traverse when exiting the SR domain.  The Egress Node
565    TLV has following format:
566
567     0                   1                   2                   3
568     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
569    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
570    |      Type     |    Length     |   RESERVED    |     Flags     |
571    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
572    |                                                               |
573    |                  Egress Node (16 octets)                      |
574    |                                                               |
575    |                                                               |
576    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
577
578    where:
579
580    o  Type: to be assigned by IANA (suggested value 2).
581
582    o  Length: 18.
583
584    o  RESERVED: 8 bits.  SHOULD be unset on transmission and MUST be
585       ignored on receipt.
586
587    o  Flags: 8 bits.  No flags are defined in this document.
588
589    o  Egress Node: 128 bits.  Defines the node where the packet is
590       expected to exit the SR domain.  In the encapsulation case
591       described in Section 2.2.1, this information corresponds to the
592       last segment of the SRH in the encapsulating header.
593
594 3.1.3.  Opaque Container TLV
595
596    The Opaque Container TLV is optional and has the following format:
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612 Previdi, et al.          Expires August 5, 2017                [Page 11]
613  
614 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
615
616
617     0                   1                   2                   3
618     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
619    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
620    |      Type     |    Length     |   RESERVED    |     Flags     |
621    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
622    |                                                               |
623    |             Opaque Container (16 octets)                      |
624    |                                                               |
625    |                                                               |
626    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
627
628    where:
629
630    o  Type: to be assigned by IANA (suggested value 3).
631
632    o  Length: 18.
633
634    o  RESERVED: 8 bits.  SHOULD be unset on transmission and MUST be
635       ignored on receipt.
636
637    o  Flags: 8 bits.  No flags are defined in this document.
638
639    o  Opaque Container: 128 bits of opaque data not relevant for the
640       routing layer.  Typically, this information is consumed by a non-
641       routing component of the node receiving the packet (i.e.: the node
642       in the DA).
643
644 3.1.4.  Padding TLV
645
646    The Padding TLV is optional and with the purpose of aligning the SRH
647    on a 8 octet boundary.  The Padding TLV has the following format:
648
649     0                   1                   2                   3
650     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
651    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
652    |     Type      |    Length     |      Padding (variable)       |
653    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
654    //                    Padding (variable)                       //
655    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
656
657    where:
658
659    o  Type: to be assigned by IANA (suggested value 4).
660
661    o  Length: 1 to 7
662
663
664
665
666
667
668 Previdi, et al.          Expires August 5, 2017                [Page 12]
669  
670 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
671
672
673    o  Padding: from 1 to 7 octets of padding.  Padding bits have no
674       semantic.  They SHOULD be set to 0 on transmission and MUST be
675       ignored on receipt.
676
677    The following applies to the Padding TLV:
678
679    o  Padding TLV is optional and MAY only appear once in the SRH.  If
680       present, it MUST have a length between 1 and 7 octets.
681
682    o  The Padding TLV is used in order to align the SRH total length on
683       the 8 octet boundary.
684
685    o  When present, the Padding TLV MUST appear as the last TLV before
686       the HMAC TLV (if HMAC TLV is present).
687
688    o  When present, the Padding TLV MUST have a length from 1 to 7 in
689       order to align the SRH total lenght on a 8-octet boundary.
690
691    o  When a router inspecting the SRH encounters the Padding TLV, it
692       MUST assume that no other TLV (other than the HMAC) follow the
693       Padding TLV.
694
695 3.1.5.  HMAC TLV
696
697    HMAC TLV is optional and contains the HMAC information.  The HMAC TLV
698    has the following format:
699
700     0                   1                   2                   3
701     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
702    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
703    |      Type     |     Length    |          RESERVED             |
704    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
705    |                      HMAC Key ID (4 octets)                   |
706    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
707    |                                                              //
708    |                      HMAC (32 octets)                        //
709    |                                                              //
710    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
711
712    where:
713
714    o  Type: to be assigned by IANA (suggested value 5).
715
716    o  Length: 38.
717
718    o  RESERVED: 2 octets.  SHOULD be unset on transmission and MUST be
719       ignored on receipt.
720
721
722
723
724 Previdi, et al.          Expires August 5, 2017                [Page 13]
725  
726 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
727
728
729    o  HMAC Key ID: 4 octets.
730
731    o  HMAC: 32 octets.
732
733    o  HMAC and HMAC Key ID usage is described in Section 5
734
735    The Following applies to the HMAC TLV:
736
737    o  When present, the HMAC TLV MUST be encoded as the last TLV of the
738       SRH.
739
740    o  If the HMAC TLV is present, the SRH H-Flag (Figure 4) MUST be set.
741
742    o  When the H-flag is set in the SRH, the router inspecting the SRH
743       MUST find the HMAC TLV in the last 38 octets of the SRH.
744
745 3.2.  SRH and RFC2460 behavior
746
747    The SRH being a new type of the Routing Header, it also has the same
748    properties:
749
750       SHOULD only appear once in the packet.
751
752       Only the router whose address is in the DA field of the packet
753       header MUST inspect the SRH.
754
755    Therefore, Segment Routing in IPv6 networks implies that the segment
756    identifier (i.e.: the IPv6 address of the segment) is moved into the
757    DA of the packet.
758
759    The DA of the packet changes at each segment termination/completion
760    and therefore the final DA of the packet MUST be encoded as the last
761    segment of the path.
762
763 4.  SRH Procedures
764
765    In this section we describe the different procedures on the SRH.
766
767 4.1.  Source SR Node
768
769    A Source SR Node can be any node originating an IPv6 packet with its
770    IPv6 and Segment Routing Headers.  This include either:
771
772       A host originating an IPv6 packet.
773
774       An SR domain ingress router encapsulating a received IPv6 packet
775       into an outer IPv6 header followed by an SRH.
776
777
778
779
780 Previdi, et al.          Expires August 5, 2017                [Page 14]
781  
782 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
783
784
785    The mechanism through which a Segment List is derived is outside of
786    the scope of this document.  As an example, the Segment List may be
787    obtained through:
788
789       Local path computation.
790
791       Local configuration.
792
793       Interaction with a centralized controller delivering the path.
794
795       Any other mechanism.
796
797    The following are the steps of the creation of the SRH:
798
799       Next Header and Hdr Ext Len fields are set according to [RFC2460].
800
801       Routing Type field is set as TBD (to be allocated by IANA,
802       suggested value 4).
803
804       The Segment List is built with the FIRST segment of the path
805       encoded in the LAST element of the Segment List.  Subsequent
806       segments are encoded on top of the first segment.  Finally, the
807       LAST segment of the path is encoded in the FIRST element of the
808       Segment List.  In other words, the Segment List is encoded in the
809       reverse order of the path.
810
811       The final DA of the packet is encoded as the last segment of the
812       path (encoded in the first element of the Segment List).
813
814       The DA of the packet is set with the value of the first segment
815       (found in the last element of the segment list).
816
817       The Segments Left field is set to n-1 where n is the number of
818       elements in the Segment List.
819
820       The First Segment field is set to n-1 where n is the number of
821       elements in the Segment List.
822
823       The packet is sent out towards the first segment (i.e.:
824       represented in the packet DA).
825
826       HMAC TLV may be set according to Section 5.
827
828 4.2.  Transit Node
829
830    According to [RFC2460], the only node who is allowed to inspect the
831    Routing Extension Header (and therefore the SRH), is the node
832    corresponding to the DA of the packet.  Any other transit node MUST
833
834
835
836 Previdi, et al.          Expires August 5, 2017                [Page 15]
837  
838 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
839
840
841    NOT inspect the underneath routing header and MUST forward the packet
842    towards the DA and according to the IPv6 routing table.
843
844    In the example case described in Section 2.2.2, when SR capable nodes
845    are connected through an overlay spanning multiple third-party
846    infrastructure, it is safe to send SRH packets (i.e.: packet having a
847    Segment Routing Header) between each other overlay/SR-capable nodes
848    as long as the segment list does not include any of the transit
849    provider nodes.  In addition, as a generic security measure, any
850    service provider will block any packet destined to one of its
851    internal routers, especially if these packets have an extended header
852    in it.
853
854 4.3.  SR Segment Endpoint Node
855
856    The SR segment endpoint node is the node whose address is in the DA.
857    The segment endpoint node inspects the SRH and does:
858
859    1.   IF DA = myself (segment endpoint)
860    2.      IF Segments Left > 0 THEN
861               decrement Segments Left
862               update DA with Segment List[Segments Left]
863    3.      ELSE continue IPv6 processing of the packet
864                 End of processing.
865    4.   Forward the packet out
866
867 5.  Security Considerations
868
869    This section analyzes the security threat model, the security issues
870    and proposed solutions related to the new Segment Routing Header.
871
872    The Segment Routing Header (SRH) is simply another type of the
873    routing header as described in RFC 2460 [RFC2460] and is:
874
875    o  Added by an SR edge router when entering the segment routing
876       domain or by the originating host itself.  The source host can
877       even be outside the SR domain;
878
879    o  inspected and acted upon when reaching the destination address of
880       the IP header per RFC 2460 [RFC2460].
881
882    Per RFC2460 [RFC2460], routers on the path that simply forward an
883    IPv6 packet (i.e. the IPv6 destination address is none of theirs)
884    will never inspect and process the content of the SRH.  Routers whose
885    one interface IPv6 address equals the destination address field of
886    the IPv6 packet MUST parse the SRH and, if supported and if the local
887    configuration allows it, MUST act accordingly to the SRH content.
888
889
890
891
892 Previdi, et al.          Expires August 5, 2017                [Page 16]
893  
894 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
895
896
897    According to RFC2460 [RFC2460], the default behavior of a non SR-
898    capable router upon receipt of an IPv6 packet with SRH destined to an
899    address of its, is to:
900
901    o  ignore the SRH completely if the Segment Left field is 0 and
902       proceed to process the next header in the IPv6 packet;
903
904    o  discard the IPv6 packet if Segment Left field is greater than 0,
905       it MAY send a Parameter Problem ICMP message back to the Source
906       Address.
907
908 5.1.  Threat model
909
910 5.1.1.  Source routing threats
911
912    Using an SRH is similar to source routing, therefore it has some
913    well-known security issues as described in RFC4942 [RFC4942] section
914    2.1.1 and RFC5095 [RFC5095]:
915
916    o  amplification attacks: where a packet could be forged in such a
917       way to cause looping among a set of SR-enabled routers causing
918       unnecessary traffic, hence a Denial of Service (DoS) against
919       bandwidth;
920
921    o  reflection attack: where a hacker could force an intermediate node
922       to appear as the immediate attacker, hence hiding the real
923       attacker from naive forensic;
924
925    o  bypass attack: where an intermediate node could be used as a
926       stepping stone (for example in a De-Militarized Zone) to attack
927       another host (for example in the datacenter or any back-end
928       server).
929
930 5.1.2.  Applicability of RFC 5095 to SRH
931
932    First of all, the reader must remember this specific part of section
933    1 of RFC5095 [RFC5095], "A side effect is that this also eliminates
934    benign RH0 use-cases; however, such applications may be facilitated
935    by future Routing Header specifications.".  In short, it is not
936    forbidden to create new secure type of Routing Header; for example,
937    RFC 6554 (RPL) [RFC6554] also creates a new Routing Header type for a
938    specific application confined in a single network.
939
940    In the segment routing architecture described in
941    [I-D.ietf-spring-segment-routing] there are basically two kinds of
942    nodes (routers and hosts):
943
944
945
946
947
948 Previdi, et al.          Expires August 5, 2017                [Page 17]
949  
950 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
951
952
953    o  nodes within the SR domain, which is within one single
954       administrative domain, i.e., where all nodes are trusted anyway
955       else the damage caused by those nodes could be worse than
956       amplification attacks: traffic interception, man-in-the-middle
957       attacks, more server DoS by dropping packets, and so on.
958
959    o  nodes outside of the SR domain, which is outside of the
960       administrative segment routing domain hence they cannot be trusted
961       because there is no physical security for those nodes, i.e., they
962       can be replaced by hostile nodes or can be coerced in wrong
963       behaviors.
964
965    The main use case for SR consists of the single administrative domain
966    where only trusted nodes with SR enabled and configured participate
967    in SR: this is the same model as in RFC6554 [RFC6554].  All non-
968    trusted nodes do not participate as either SR processing is not
969    enabled by default or because they only process SRH from nodes within
970    their domain.
971
972    Moreover, all SR nodes ignore SRH created by outsiders based on
973    topology information (received on a peering or internal interface) or
974    on presence and validity of the HMAC field.  Therefore, if
975    intermediate nodes ONLY act on valid and authorized SRH (such as
976    within a single administrative domain), then there is no security
977    threat similar to RH-0.  Hence, the RFC 5095 [RFC5095] attacks are
978    not applicable.
979
980 5.1.3.  Service stealing threat
981
982    Segment routing is used for added value services, there is also a
983    need to prevent non-participating nodes to use those services; this
984    is called 'service stealing prevention'.
985
986 5.1.4.  Topology disclosure
987
988    The SRH may also contains IPv6 addresses of some intermediate SR-
989    nodes in the path towards the destination, this obviously reveals
990    those addresses to the potentially hostile attackers if those
991    attackers are able to intercept packets containing SRH.  On the other
992    hand, if the attacker can do a traceroute whose probes will be
993    forwarded along the SR path, then there is little learned by
994    intercepting the SRH itself.
995
996 5.1.5.  ICMP Generation
997
998    Per section 4.4 of RFC2460 [RFC2460], when destination nodes (i.e.
999    where the destination address is one of theirs) receive a Routing
1000    Header with unsupported Routing Type, the required behavior is:
1001
1002
1003
1004 Previdi, et al.          Expires August 5, 2017                [Page 18]
1005  
1006 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1007
1008
1009    o  If Segments Left is zero, the node must ignore the Routing header
1010       and proceed to process the next header in the packet.
1011
1012    o  If Segments Left is non-zero, the node must discard the packet and
1013       send an ICMP Parameter Problem, Code 0, message to the packet's
1014       Source Address, pointing to the unrecognized Routing Type.
1015
1016    This required behavior could be used by an attacker to force the
1017    generation of ICMP message by any node.  The attacker could send
1018    packets with SRH (with Segment Left set to 0) destined to a node not
1019    supporting SRH.  Per RFC2460 [RFC2460], the destination node could
1020    generate an ICMP message, causing a local CPU utilization and if the
1021    source of the offending packet with SRH was spoofed could lead to a
1022    reflection attack without any amplification.
1023
1024    It must be noted that this is a required behavior for any unsupported
1025    Routing Type and not limited to SRH packets.  So, it is not specific
1026    to SRH and the usual rate limiting for ICMP generation is required
1027    anyway for any IPv6 implementation and has been implemented and
1028    deployed for many years.
1029
1030 5.2.  Security fields in SRH
1031
1032    This section summarizes the use of specific fields in the SRH.  They
1033    are based on a key-hashed message authentication code (HMAC).
1034
1035    The security-related fields in the SRH are instantiated by the HMAC
1036    TLV, containing:
1037
1038    o  HMAC Key-id, 32 bits wide;
1039
1040    o  HMAC, 256 bits wide (optional, exists only if HMAC Key-id is not
1041       0).
1042
1043    The HMAC field is the output of the HMAC computation (per RFC 2104
1044    [RFC2104]) using a pre-shared key identified by HMAC Key-id and of
1045    the text which consists of the concatenation of:
1046
1047    o  the source IPv6 address;
1048
1049    o  First Segment field;
1050
1051    o  an octet of bit flags;
1052
1053    o  HMAC Key-id;
1054
1055    o  all addresses in the Segment List.
1056
1057
1058
1059
1060 Previdi, et al.          Expires August 5, 2017                [Page 19]
1061  
1062 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1063
1064
1065    The purpose of the HMAC TLV is to verify the validity, the integrity
1066    and the authorization of the SRH itself.  If an outsider of the SR
1067    domain does not have access to a current pre-shared secret, then it
1068    cannot compute the right HMAC field and the first SR router on the
1069    path processing the SRH and configured to check the validity of the
1070    HMAC will simply reject the packet.
1071
1072    The HMAC TLV is located at the end of the SRH simply because only the
1073    router on the ingress of the SR domain needs to process it, then all
1074    other SR nodes can ignore it (based on local policy) because they
1075    trust the upstream router.  This is to speed up forwarding operations
1076    because SR routers which do not validate the SRH do not need to parse
1077    the SRH until the end.
1078
1079    The HMAC Key-id field allows for the simultaneous existence of
1080    several hash algorithms (SHA-256, SHA3-256 ... or future ones) as
1081    well as pre-shared keys.  The HMAC Key-id field is opaque, i.e., it
1082    has neither syntax nor semantic except as an index to the right
1083    combination of pre-shared key and hash algorithm and except that a
1084    value of 0 means that there is no HMAC field.  Having an HMAC Key-id
1085    field allows for pre-shared key roll-over when two pre-shared keys
1086    are supported for a while when all SR nodes converged to a fresher
1087    pre-shared key.  It could also allow for interoperation among
1088    different SR domains if allowed by local policy and assuming a
1089    collision-free HMAC Key Id allocation.
1090
1091    When a specific SRH is linked to a time-related service (such as
1092    turbo-QoS for a 1-hour period) where the DA, Segment ID (SID) are
1093    identical, then it is important to refresh the shared-secret
1094    frequently as the HMAC validity period expires only when the HMAC
1095    Key-id and its associated shared-secret expires.
1096
1097 5.2.1.  Selecting a hash algorithm
1098
1099    The HMAC field in the HMAC TLV is 256 bit wide.  Therefore, the HMAC
1100    MUST be based on a hash function whose output is at least 256 bits.
1101    If the output of the hash function is 256, then this output is simply
1102    inserted in the HMAC field.  If the output of the hash function is
1103    larger than 256 bits, then the output value is truncated to 256 by
1104    taking the least-significant 256 bits and inserting them in the HMAC
1105    field.
1106
1107    SRH implementations can support multiple hash functions but MUST
1108    implement SHA-2 [FIPS180-4] in its SHA-256 variant.
1109
1110    NOTE: SHA-1 is currently used by some early implementations used for
1111    quick interoperations testing, the 160-bit hash value must then be
1112
1113
1114
1115
1116 Previdi, et al.          Expires August 5, 2017                [Page 20]
1117  
1118 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1119
1120
1121    right-hand padded with 96 bits set to 0.  The authors understand that
1122    this is not secure but is ok for limited tests.
1123
1124 5.2.2.  Performance impact of HMAC
1125
1126    While adding an HMAC to each and every SR packet increases the
1127    security, it has a performance impact.  Nevertheless, it must be
1128    noted that:
1129
1130    o  the HMAC field is used only when SRH is added by a device (such as
1131       a home set-up box) which is outside of the segment routing domain.
1132       If the SRH is added by a router in the trusted segment routing
1133       domain, then, there is no need for an HMAC field, hence no
1134       performance impact.
1135
1136    o  when present, the HMAC field MUST only be checked and validated by
1137       the first router of the segment routing domain, this router is
1138       named 'validating SR router'.  Downstream routers may not inspect
1139       the HMAC field.
1140
1141    o  this validating router can also have a cache of <IPv6 header +
1142       SRH, HMAC field value> to improve the performance.  It is not the
1143       same use case as in IPsec where HMAC value was unique per packet,
1144       in SRH, the HMAC value is unique per flow.
1145
1146    o  Last point, hash functions such as SHA-2 have been optimized for
1147       security and performance and there are multiple implementations
1148       with good performance.
1149
1150    With the above points in mind, the performance impact of using HMAC
1151    is minimized.
1152
1153 5.2.3.  Pre-shared key management
1154
1155    The field HMAC Key-id allows for:
1156
1157    o  key roll-over: when there is a need to change the key (the hash
1158       pre-shared secret), then multiple pre-shared keys can be used
1159       simultaneously.  The validating routing can have a table of <HMAC
1160       Key-id, pre-shared secret> for the currently active and future
1161       keys.
1162
1163    o  different algorithms: by extending the previous table to <HMAC
1164       Key-id, hash function, pre-shared secret>, the validating router
1165       can also support simultaneously several hash algorithms (see
1166       section Section 5.2.1)
1167
1168    The pre-shared secret distribution can be done:
1169
1170
1171
1172 Previdi, et al.          Expires August 5, 2017                [Page 21]
1173  
1174 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1175
1176
1177    o  in the configuration of the validating routers, either by static
1178       configuration or any SDN oriented approach;
1179
1180    o  dynamically using a trusted key distribution such as [RFC6407]
1181
1182    The intent of this document is NOT to define yet-another-key-
1183    distribution-protocol.
1184
1185 5.3.  Deployment Models
1186
1187 5.3.1.  Nodes within the SR domain
1188
1189    An SR domain is defined as a set of interconnected routers where all
1190    routers at the perimeter are configured to add and act on SRH.  Some
1191    routers inside the SR domain can also act on SRH or simply forward
1192    IPv6 packets.
1193
1194    The routers inside an SR domain can be trusted to generate SRH and to
1195    process SRH received on interfaces that are part of the SR domain.
1196    These nodes MUST drop all SRH packets received on an interface that
1197    is not part of the SR domain and containing an SRH whose HMAC field
1198    cannot be validated by local policies.  This includes obviously
1199    packet with an SRH generated by a non-cooperative SR domain.
1200
1201    If the validation fails, then these packets MUST be dropped, ICMP
1202    error messages (parameter problem) SHOULD be generated (but rate
1203    limited) and SHOULD be logged.
1204
1205 5.3.2.  Nodes outside of the SR domain
1206
1207    Nodes outside of the SR domain cannot be trusted for physical
1208    security; hence, they need to request by some trusted means (outside
1209    of the scope of this document) a complete SRH for each new connection
1210    (i.e. new destination address).  The received SRH MUST include an
1211    HMAC TLV which is computed correctly (see Section 5.2).
1212
1213    When an outside node sends a packet with an SRH and towards an SR
1214    domain ingress node, the packet MUST contain the HMAC TLV (with a
1215    Key-id and HMAC fields) and the the destination address MUST be an
1216    address of an SR domain ingress node .
1217
1218    The ingress SR router, i.e., the router with an interface address
1219    equals to the destination address, MUST verify the HMAC TLV.
1220
1221    If the validation is successful, then the packet is simply forwarded
1222    as usual for an SR packet.  As long as the packet travels within the
1223    SR domain, no further HMAC check needs to be done.  Subsequent
1224
1225
1226
1227
1228 Previdi, et al.          Expires August 5, 2017                [Page 22]
1229  
1230 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1231
1232
1233    routers in the SR domain MAY verify the HMAC TLV when they process
1234    the SRH (i.e. when they are the destination).
1235
1236    If the validation fails, then this packet MUST be dropped, an ICMP
1237    error message (parameter problem) SHOULD be generated (but rate
1238    limited) and SHOULD be logged.
1239
1240 5.3.3.  SR path exposure
1241
1242    As the intermediate SR nodes addresses appears in the SRH, if this
1243    SRH is visible to an outsider then he/she could reuse this knowledge
1244    to launch an attack on the intermediate SR nodes or get some insider
1245    knowledge on the topology.  This is especially applicable when the
1246    path between the source node and the first SR domain ingress router
1247    is on the public Internet.
1248
1249    The first remark is to state that 'security by obscurity' is never
1250    enough; in other words, the security policy of the SR domain MUST
1251    assume that the internal topology and addressing is known by the
1252    attacker.  A simple traceroute will also give the same information
1253    (with even more information as all intermediate nodes between SID
1254    will also be exposed).  IPsec Encapsulating Security Payload
1255    [RFC4303] cannot be use to protect the SRH as per RFC4303 the ESP
1256    header must appear after any routing header (including SRH).
1257
1258    To prevent a user to leverage the gained knowledge by intercepting
1259    SRH, it it recommended to apply an infrastructure Access Control List
1260    (iACL) at the edge of the SR domain.  This iACL will drop all packets
1261    from outside the SR-domain whose destination is any address of any
1262    router inside the domain.  This security policy should be tuned for
1263    local operations.
1264
1265 5.3.4.  Impact of BCP-38
1266
1267    BCP-38 [RFC2827], also known as "Network Ingress Filtering", checks
1268    whether the source address of packets received on an interface is
1269    valid for this interface.  The use of loose source routing such as
1270    SRH forces packets to follow a path which differs from the expected
1271    routing.  Therefore, if BCP-38 was implemented in all routers inside
1272    the SR domain, then SR packets could be received by an interface
1273    which is not expected one and the packets could be dropped.
1274
1275    As an SR domain is usually a subset of one administrative domain, and
1276    as BCP-38 is only deployed at the ingress routers of this
1277    administrative domain and as packets arriving at those ingress
1278    routers have been normally forwarded using the normal routing
1279    information, then there is no reason why this ingress router should
1280
1281
1282
1283
1284 Previdi, et al.          Expires August 5, 2017                [Page 23]
1285  
1286 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1287
1288
1289    drop the SRH packet based on BCP-38.  Routers inside the domain
1290    commonly do not apply BCP-38; so, this is not a problem.
1291
1292 6.  IANA Considerations
1293
1294    This document makes the following registrations in the Internet
1295    Protocol Version 6 (IPv6) Parameters "Routing Type" registry
1296    maintained by IANA:
1297
1298    Suggested            Description             Reference
1299      Value
1300    ----------------------------------------------------------
1301       4         Segment Routing Header (SRH)    This document
1302
1303    In addition, this document request IANA to create and maintain a new
1304    Registry: "Segment Routing Header Type-Value Objects".  The following
1305    code-points are requested from the registry:
1306
1307    Registry: Segment Routing Header Type-Value Objects
1308
1309    Suggested         Description            Reference
1310      Value
1311    -----------------------------------------------------
1312       1         Ingress Node TLV          This document
1313       2         Egress Node  TLV          This document
1314       3         Opaque Container TLV      This document
1315       4         Padding TLV               This document
1316       5         HMAC TLV                  This document
1317
1318 7.  Manageability Considerations
1319
1320    TBD
1321
1322 8.  Contributors
1323
1324    Dave Barach, John Leddy, John Brzozowski, Pierre Francois, Nagendra
1325    Kumar, Mark Townsley, Christian Martin, Roberta Maglione, James
1326    Connolly, Aloys Augustin contributed to the content of this document.
1327
1328 9.  Acknowledgements
1329
1330    The authors would like to thank Ole Troan, Bob Hinden, Fred Baker,
1331    Brian Carpenter, Alexandru Petrescu and Punit Kumar Jaiswal for their
1332    comments to this document.
1333
1334
1335
1336
1337
1338
1339
1340 Previdi, et al.          Expires August 5, 2017                [Page 24]
1341  
1342 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1343
1344
1345 10.  References
1346
1347 10.1.  Normative References
1348
1349    [FIPS180-4]
1350               National Institute of Standards and Technology, "FIPS
1351               180-4 Secure Hash Standard (SHS)", March 2012,
1352               <http://csrc.nist.gov/publications/fips/fips180-4/
1353               fips-180-4.pdf>.
1354
1355    [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
1356               Requirement Levels", BCP 14, RFC 2119,
1357               DOI 10.17487/RFC2119, March 1997,
1358               <http://www.rfc-editor.org/info/rfc2119>.
1359
1360    [RFC2460]  Deering, S. and R. Hinden, "Internet Protocol, Version 6
1361               (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460,
1362               December 1998, <http://www.rfc-editor.org/info/rfc2460>.
1363
1364    [RFC4303]  Kent, S., "IP Encapsulating Security Payload (ESP)",
1365               RFC 4303, DOI 10.17487/RFC4303, December 2005,
1366               <http://www.rfc-editor.org/info/rfc4303>.
1367
1368    [RFC5095]  Abley, J., Savola, P., and G. Neville-Neil, "Deprecation
1369               of Type 0 Routing Headers in IPv6", RFC 5095,
1370               DOI 10.17487/RFC5095, December 2007,
1371               <http://www.rfc-editor.org/info/rfc5095>.
1372
1373    [RFC6407]  Weis, B., Rowles, S., and T. Hardjono, "The Group Domain
1374               of Interpretation", RFC 6407, DOI 10.17487/RFC6407,
1375               October 2011, <http://www.rfc-editor.org/info/rfc6407>.
1376
1377 10.2.  Informative References
1378
1379    [I-D.ietf-isis-segment-routing-extensions]
1380               Previdi, S., Filsfils, C., Bashandy, A., Gredler, H.,
1381               Litkowski, S., Decraene, B., and j. jefftant@gmail.com,
1382               "IS-IS Extensions for Segment Routing", draft-ietf-isis-
1383               segment-routing-extensions-09 (work in progress), October
1384               2016.
1385
1386    [I-D.ietf-ospf-ospfv3-segment-routing-extensions]
1387               Psenak, P., Previdi, S., Filsfils, C., Gredler, H.,
1388               Shakir, R., Henderickx, W., and J. Tantsura, "OSPFv3
1389               Extensions for Segment Routing", draft-ietf-ospf-ospfv3-
1390               segment-routing-extensions-07 (work in progress), October
1391               2016.
1392
1393
1394
1395
1396 Previdi, et al.          Expires August 5, 2017                [Page 25]
1397  
1398 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1399
1400
1401    [I-D.ietf-spring-ipv6-use-cases]
1402               Brzozowski, J., Leddy, J., Townsley, W., Filsfils, C., and
1403               R. Maglione, "IPv6 SPRING Use Cases", draft-ietf-spring-
1404               ipv6-use-cases-08 (work in progress), January 2017.
1405
1406    [I-D.ietf-spring-resiliency-use-cases]
1407               Filsfils, C., Previdi, S., Decraene, B., and R. Shakir,
1408               "Resiliency use cases in SPRING networks", draft-ietf-
1409               spring-resiliency-use-cases-08 (work in progress), October
1410               2016.
1411
1412    [I-D.ietf-spring-segment-routing]
1413               Filsfils, C., Previdi, S., Decraene, B., Litkowski, S.,
1414               and R. Shakir, "Segment Routing Architecture", draft-ietf-
1415               spring-segment-routing-10 (work in progress), November
1416               2016.
1417
1418    [I-D.ietf-spring-segment-routing-mpls]
1419               Filsfils, C., Previdi, S., Bashandy, A., Decraene, B.,
1420               Litkowski, S., Horneffer, M., Shakir, R.,
1421               jefftant@gmail.com, j., and E. Crabbe, "Segment Routing
1422               with MPLS data plane", draft-ietf-spring-segment-routing-
1423               mpls-06 (work in progress), January 2017.
1424
1425    [RFC1940]  Estrin, D., Li, T., Rekhter, Y., Varadhan, K., and D.
1426               Zappala, "Source Demand Routing: Packet Format and
1427               Forwarding Specification (Version 1)", RFC 1940,
1428               DOI 10.17487/RFC1940, May 1996,
1429               <http://www.rfc-editor.org/info/rfc1940>.
1430
1431    [RFC2104]  Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-
1432               Hashing for Message Authentication", RFC 2104,
1433               DOI 10.17487/RFC2104, February 1997,
1434               <http://www.rfc-editor.org/info/rfc2104>.
1435
1436    [RFC2827]  Ferguson, P. and D. Senie, "Network Ingress Filtering:
1437               Defeating Denial of Service Attacks which employ IP Source
1438               Address Spoofing", BCP 38, RFC 2827, DOI 10.17487/RFC2827,
1439               May 2000, <http://www.rfc-editor.org/info/rfc2827>.
1440
1441    [RFC4942]  Davies, E., Krishnan, S., and P. Savola, "IPv6 Transition/
1442               Co-existence Security Considerations", RFC 4942,
1443               DOI 10.17487/RFC4942, September 2007,
1444               <http://www.rfc-editor.org/info/rfc4942>.
1445
1446
1447
1448
1449
1450
1451
1452 Previdi, et al.          Expires August 5, 2017                [Page 26]
1453  
1454 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1455
1456
1457    [RFC6554]  Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An IPv6
1458               Routing Header for Source Routes with the Routing Protocol
1459               for Low-Power and Lossy Networks (RPL)", RFC 6554,
1460               DOI 10.17487/RFC6554, March 2012,
1461               <http://www.rfc-editor.org/info/rfc6554>.
1462
1463    [RFC7855]  Previdi, S., Ed., Filsfils, C., Ed., Decraene, B.,
1464               Litkowski, S., Horneffer, M., and R. Shakir, "Source
1465               Packet Routing in Networking (SPRING) Problem Statement
1466               and Requirements", RFC 7855, DOI 10.17487/RFC7855, May
1467               2016, <http://www.rfc-editor.org/info/rfc7855>.
1468
1469 Authors' Addresses
1470
1471    Stefano Previdi (editor)
1472    Cisco Systems, Inc.
1473    Via Del Serafico, 200
1474    Rome  00142
1475    Italy
1476
1477    Email: sprevidi@cisco.com
1478
1479
1480    Clarence Filsfils
1481    Cisco Systems, Inc.
1482    Brussels
1483    BE
1484
1485    Email: cfilsfil@cisco.com
1486
1487
1488    Brian Field
1489    Comcast
1490    4100 East Dry Creek Road
1491    Centennial, CO  80122
1492    US
1493
1494    Email: Brian_Field@cable.comcast.com
1495
1496
1497    Ida Leung
1498    Rogers Communications
1499    8200 Dixie Road
1500    Brampton, ON  L6T 0C1
1501    CA
1502
1503    Email: Ida.Leung@rci.rogers.com
1504
1505
1506
1507
1508 Previdi, et al.          Expires August 5, 2017                [Page 27]
1509  
1510 Internet-Draft      IPv6 Segment Routing Header (SRH)      February 2017
1511
1512
1513    Jen Linkova
1514    Google
1515    1600 Amphitheatre Parkway
1516    Mountain View, CA 94043
1517    US
1518
1519    Email: furry@google.com
1520
1521
1522    Ebben Aries
1523    Facebook
1524    US
1525
1526    Email: exa@fb.com
1527
1528
1529    Tomoya Kosugi
1530    NTT
1531    3-9-11, Midori-Cho Musashino-Shi,
1532    Tokyo  180-8585
1533    JP
1534
1535    Email: kosugi.tomoya@lab.ntt.co.jp
1536
1537
1538    Eric Vyncke
1539    Cisco Systems, Inc.
1540    De Kleetlaann 6A
1541    Diegem  1831
1542    Belgium
1543
1544    Email: evyncke@cisco.com
1545
1546
1547    David Lebrun
1548    Universite Catholique de Louvain
1549    Place Ste Barbe, 2
1550    Louvain-la-Neuve, 1348
1551    Belgium
1552
1553    Email: david.lebrun@uclouvain.be
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564 Previdi, et al.          Expires August 5, 2017                [Page 28]