rfc9774.original | rfc9774.txt | |||
---|---|---|---|---|
Network Working Group W. Kumari | Internet Engineering Task Force (IETF) W. Kumari | |||
Internet-Draft Google, Inc. | Request for Comments: 9774 Google, Inc. | |||
Obsoletes: 6472 (if approved) K. Sriram | Obsoletes: 6472 K. Sriram | |||
Updates: 4271 5065 (if approved) L. Hannachi | Updates: 4271, 5065 L. Hannachi | |||
Intended status: Standards Track USA NIST | Category: Standards Track USA NIST | |||
Expires: 8 September 2025 J. Haas | ISSN: 2070-1721 J. Haas | |||
Juniper Networks, Inc. | Juniper Networks, Inc. | |||
7 March 2025 | May 2025 | |||
Deprecation of AS_SET and AS_CONFED_SET in BGP | Deprecation of AS_SET and AS_CONFED_SET in BGP | |||
draft-ietf-idr-deprecate-as-set-confed-set-18 | ||||
Abstract | Abstract | |||
BCP 172 (i.e., RFC 6472) recommends not using AS_SET and | BCP 172 (i.e., RFC 6472) recommends not using AS_SET and | |||
AS_CONFED_SET AS_PATH segment types in the Border Gateway Protocol | AS_CONFED_SET AS_PATH segment types in the Border Gateway Protocol | |||
(BGP). This document advances that recommendation to a standards | (BGP). This document advances that recommendation to a standards | |||
requirement in BGP; it prohibits the use of the AS_SET and | requirement in BGP; it prohibits the use of the AS_SET and | |||
AS_CONFED_SET path segment types in the AS_PATH. This is done to | AS_CONFED_SET path segment types in the AS_PATH. This is done to | |||
simplify the design and implementation of BGP and to make the | simplify the design and implementation of BGP and to make the | |||
semantics of the originator of a BGP route clearer. This will also | semantics of the originator of a BGP route clearer. This will also | |||
simplify the design, implementation, and deployment of various BGP | simplify the design, implementation, and deployment of various BGP | |||
security mechanisms. This document updates RFC 4271 by deprecating | security mechanisms. This document updates RFC 4271 by deprecating | |||
the origination of BGP routes with AS_SET (Type 1 AS_PATH segment) | the origination of BGP routes with AS_SET (Type 1 AS_PATH segment) | |||
and updates RFC 5065 by deprecating the origination of BGP routes | and updates RFC 5065 by deprecating the origination of BGP routes | |||
with AS_CONFED_SET (Type 4 AS_PATH segment). Finally, it obsoletes | with AS_CONFED_SET (Type 4 AS_PATH segment). Finally, it obsoletes | |||
RFC 6472. | RFC 6472. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 8 September 2025. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9774. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2025 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 4 | 2. Requirements Language | |||
3. Updates to the Requirements of RFC 4271 and RFC 5065 . . . . 4 | 3. Updates to the Requirements of RFCs 4271 and 5065 | |||
4. Treatment of Routes with AS_SET in RPKI-based BGP Security . 4 | 4. Treatment of Routes with AS_SET in RPKI-Based BGP Security | |||
5. BGP AS_PATH "Brief" Aggregation . . . . . . . . . . . . . . . 4 | 5. BGP AS_PATH "Brief" Aggregation | |||
5.1. Issues with "Brief" AS_PATH Aggregation and RPKI-ROV . . 5 | 5.1. Issues with "Brief" AS_PATH Aggregation and RPKI-ROV | |||
5.2. Recommendations to Mitigate Unpredictable AS_PATH Origins | 5.2. Recommendations to Mitigate Unpredictable AS_PATH Origins | |||
for RPKI-ROV Purposes . . . . . . . . . . . . . . . . . . 6 | for RPKI-ROV Purposes | |||
6. Operational Considerations . . . . . . . . . . . . . . . . . 6 | 6. Operational Considerations | |||
6.1. Implementing Consistent Brief Aggregation . . . . . . . . 6 | 6.1. Implementing Consistent Brief Aggregation | |||
6.2. Not Advertising Aggregate Routes to Contributing ASes . . 6 | 6.2. Not Advertising Aggregate Routes to Contributing ASes | |||
6.3. Mitigating Forwarding Loops . . . . . . . . . . . . . . . 6 | 6.3. Mitigating Forwarding Loops | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 7 | 7. Security Considerations | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | 8. IANA Considerations | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 7 | 9. References | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 9.1. Normative References | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 7 | 9.2. Informative References | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 8 | ||||
Appendix A. Example of Route Filtering for Aggregate Routes and | Appendix A. Example of Route Filtering for Aggregate Routes and | |||
their Contributors . . . . . . . . . . . . . . . . . . . 10 | Their Contributors | |||
Appendix B. Examples of Consistent and Inconsistent BGP Origin-AS | Appendix B. Examples of Consistent and Inconsistent BGP Origin AS | |||
Generated by Traditional Brief Aggregation . . . . . . . 11 | Generated by Traditional Brief Aggregation | |||
B.1. Scenario 1: First one route, then another, each with a | B.1. Scenario 1: First one route, then another, each with a | |||
fully disjoint AS_PATH . . . . . . . . . . . . . . . . . 12 | fully disjoint AS_PATH | |||
B.2. Scenario 2: First one route, then another, the AS_PATHs | B.2. Scenario 2: First one route, then another, and the AS_PATHs | |||
overlap at the origin AS. . . . . . . . . . . . . . . . . 13 | overlap at the origin AS | |||
B.3. Scenario 3: First one route, then another, the AS_PATHs | B.3. Scenario 3: First one route, then another, and the AS_PATHs | |||
overlap at the neighbor AS . . . . . . . . . . . . . . . 13 | overlap at the neighbor AS | |||
B.4. Achieving Consistent Origin-AS During Aggregation . . . . 13 | B.4. Achieving Consistent Origin AS During Aggregation | |||
Appendix C. Discussion on Forwarding Loops and AS_SETs . . . . . 14 | Appendix C. Discussion on Forwarding Loops and AS_SETs | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | Acknowledgements | |||
Authors' Addresses | ||||
1. Introduction | 1. Introduction | |||
BCP 172 [RFC6472] makes a recommendation for not using AS_SET (see | BCP 172 [RFC6472] recommends not using AS_SET [RFC4271] and | |||
[RFC4271]) and AS_CONFED_SET (see [RFC5065]) AS_PATH path segment | AS_CONFED_SET [RFC5065] AS_PATH path segment types in the Border | |||
types in the Border Gateway Protocol (BGP). This document advances | Gateway Protocol (BGP). This document advances the BCP | |||
the BCP recommendation to a standards requirement in BGP; it | recommendation to a standards requirement in BGP; it prohibits the | |||
prohibits the use of the AS_SET and AS_CONFED_SET types of path | use of the AS_SET and AS_CONFED_SET types of path segments in the | |||
segments in the AS_PATH. The purpose is to simplify the design and | AS_PATH. The purpose is to simplify the design and implementation of | |||
implementation of BGP and to make the semantics of the originator of | BGP and to make the semantics of the originator of a BGP route | |||
a BGP route clearer. This will also simplify the design, | clearer. This will also simplify the design, implementation, and | |||
implementation, and deployment of various BGP security mechanisms. | deployment of various BGP security mechanisms. In particular, the | |||
In particular, the prohibition of AS_SETs and AS_CONFED_SETs removes | prohibition of AS_SETs and AS_CONFED_SETs removes any ambiguity about | |||
the possibility of ambiguity about origin AS in RPKI-based route | the origin AS in RPKI-based Route Origin Validation (RPKI-ROV) | |||
origin validation (RPKI-ROV) [RFC6811] [RFC6907] [RFC9319]. | [RFC6811] [RFC6907] [RFC9319]. | |||
The AS_SET path segment in the AS_PATH attribute (Sections 4.3 and | The AS_SET path segment in the AS_PATH attribute (Sections 4.3 and | |||
5.1.2 of [RFC4271]) is created by a router that is performing route | 5.1.2 of [RFC4271]) is created by a router that is performing route | |||
aggregation and contains an unordered set of Autonomous Systems | aggregation and contains an unordered set of Autonomous Systems | |||
(ASes) that contributing prefixes in the aggregate have traversed. | (ASes) that contributing prefixes in the aggregate have traversed. | |||
The AS_CONFED_SET path segment (see [RFC5065]) in the AS_PATH | The AS_CONFED_SET path segment [RFC5065] in the AS_PATH attribute is | |||
attribute is created by a router that is performing route aggregation | created by a router that is performing route aggregation and contains | |||
and contains an unordered set of Member AS Numbers in the local | an unordered set of Member AS Numbers in the local confederation that | |||
confederation that contributing prefixes in the aggregate have | contributing prefixes in the aggregate have traversed. It is very | |||
traversed. It is very similar to an AS_SET but is used within a | similar to an AS_SET but is used within a confederation. | |||
confederation. | ||||
By performing aggregation, a router is combining multiple BGP routes | By performing aggregation, a router is combining multiple BGP routes | |||
for more specific destinations into a new route for a less specific | for more specific destinations into a new route for a less specific | |||
destination ([RFC4271], Section 9.1.2.2.). Aggregation may blur the | destination (see [RFC4271], Section 9.1.2.2). Aggregation may blur | |||
semantics of the origin AS for the prefix being announced by | the semantics of the origin AS for the prefix being announced by | |||
producing an AS_SET or AS_CONFED_SET. Such sets can cause | producing an AS_SET or AS_CONFED_SET. Such sets can cause | |||
operational issues, such as not being able to authenticate a route | operational issues, such as not being able to authenticate a route | |||
origin for the aggregate prefix in new BGP security technologies such | origin for the aggregate prefix in new BGP security technologies such | |||
as those that take advantage of X.509 extensions for IP addresses and | as those that take advantage of X.509 extensions for IP addresses and | |||
AS identifiers ([RFC6480], [RFC6811], [RFC6907], [RFC8205], | AS identifiers (see [RFC6480], [RFC6811], [RFC6907], [RFC8205], and | |||
[RFC9319]). This could result in reachability problems for the | [RFC9319]). This could result in reachability problems for the | |||
destinations covered by the aggregated prefix. | destinations covered by the aggregated prefix. | |||
From analysis of historical Internet routing data, it is apparent | From analysis of historical Internet routing data, it is apparent | |||
that aggregation that involves AS_SETs is very seldom used in | that aggregation that involves AS_SETs is very seldom used in | |||
practice on the public Internet (see [Analysis]). When it is used, | practice on the public Internet (see [Analysis]). When it is used, | |||
it is often used incorrectly; only a single AS in the AS_SET is the | it is often used incorrectly; only a single AS in the AS_SET is the | |||
most common case [Analysis]. Also, very often the same AS appears in | most common case [Analysis]. Also, very often the same AS appears in | |||
the AS_SEQUENCE and the AS_SET in the BGP update. The occurrence of | the AS_SEQUENCE and the AS_SET in the BGP update. The occurrence of | |||
reserved AS numbers ([IANA-SP-ASN]) is also somewhat frequent. | reserved AS numbers [IANA-SP-ASN] is also somewhat frequent. | |||
2. Requirements Language | 2. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Updates to the Requirements of RFC 4271 and RFC 5065 | 3. Updates to the Requirements of RFCs 4271 and 5065 | |||
Unless explicitly configured by a network operator to do otherwise | Unless explicitly configured by a network operator to do otherwise | |||
(e.g., during a transition phase), BGP speakers: | (e.g., during a transition phase), BGP speakers: | |||
* MUST NOT advertise BGP UPDATE messages containing AS_SETs or | * MUST NOT advertise BGP UPDATE messages containing AS_SETs or | |||
AS_CONFED_SETs, and | AS_CONFED_SETs and | |||
* Upon reception of BGP UPDATE messages containing AS_SETs or | * MUST use the "treat-as-withdraw" error handling behavior per | |||
AS_CONFED_SETs in the AS_PATH or AS4_PATH [RFC6793], MUST use the | [RFC7606] upon reception of BGP UPDATE messages containing AS_SETs | |||
"treat-as-withdraw" error handling behavior as per [RFC7606]. | or AS_CONFED_SETs in the AS_PATH or AS4_PATH [RFC6793]. | |||
Per above specifications, this document updates RFC 4271 and RFC 5065 | Per the above specifications, this document updates [RFC4271] and | |||
by deprecating AS_SET (see [RFC4271], Section 4.3) and AS_CONFED_SET | [RFC5065] by deprecating AS_SET (see [RFC4271], Section 4.3) and | |||
(see [RFC5065], Section 3), respectively. | AS_CONFED_SET (see [RFC5065], Section 3), respectively. | |||
4. Treatment of Routes with AS_SET in RPKI-based BGP Security | 4. Treatment of Routes with AS_SET in RPKI-Based BGP Security | |||
Resource Public Key Infrastructure (RPKI) [RFC6480] uses X.509 | Resource Public Key Infrastructure (RPKI) [RFC6480] uses X.509 | |||
extensions for IP addresses and AS identifiers [RFC3779]. RPKI-based | extensions for IP addresses and AS identifiers [RFC3779]. RPKI-ROV | |||
Route Origin Validation (ROV) [RFC6811] [RFC6907] is a BGP security | [RFC6811] [RFC6907] is a BGP security technology that never allows a | |||
technology that never allows a route with AS_SET to be considered | route with AS_SET to be considered Valid. BGPsec [RFC8205] and | |||
Valid. BGPsec [RFC8205] and Autonomous System Provider Authorization | Autonomous System Provider Authorization (ASPA) [ASPA-VERIFICATION] | |||
(ASPA) [I-D.ietf-sidrops-aspa-verification] are also BGP security | are also BGP security technologies based on RPKI. BGPsec does not | |||
technologies based on RPKI. BGPsec does not support AS_SETs. In | support AS_SETs. In ASPA-based AS_PATH verification, a route with | |||
ASPA-based AS_PATH verification, a route with AS_SET is always | AS_SET is always considered Invalid and hence ineligible for route | |||
considered Invalid and hence ineligible for route selection. | selection. | |||
5. BGP AS_PATH "Brief" Aggregation | 5. BGP AS_PATH "Brief" Aggregation | |||
Sections 9.1.4 and 9.2.2.2 of [RFC4271] describe BGP aggregation | Sections 9.1.4 and 9.2.2.2 of [RFC4271] describe BGP aggregation | |||
procedures. Appendix F.6 in [RFC4271] describes a generally less | procedures. Appendix F.6 of [RFC4271] describes a generally less | |||
utilized "Complex AS_PATH Aggregation" procedure. | utilized "Complex AS_PATH Aggregation" procedure. | |||
[RFC4271], Section 5.1.6, describing the ATOMIC_AGGREGATE Path | [RFC4271], Section 5.1.6 describes the ATOMIC_AGGREGATE Path | |||
Attribute, notes that: | Attribute and notes that: | |||
| When a BGP speaker aggregates several routes for the purpose of | | When a BGP speaker aggregates several routes for the purpose of | |||
| advertisement to a particular peer, the AS_PATH of the aggregated | | advertisement to a particular peer, the AS_PATH of the aggregated | |||
| route normally includes an AS_SET formed from the set of ASes from | | route normally includes an AS_SET formed from the set of ASes from | |||
| which the aggregate was formed. In many cases, the network | | which the aggregate was formed. In many cases, the network | |||
| administrator can determine if the aggregate can safely be | | administrator can determine if the aggregate can safely be | |||
| advertised without the AS_SET, and without forming route loops. | | advertised without the AS_SET, and without forming route loops. | |||
| | | | |||
| If an aggregate excludes at least some of the AS numbers present | | If an aggregate excludes at least some of the AS numbers present | |||
| in the AS_PATH of the routes that are aggregated as a result of | | in the AS_PATH of the routes that are aggregated as a result of | |||
| dropping the AS_SET, the aggregated route, when advertised to the | | dropping the AS_SET, the aggregated route, when advertised to the | |||
| peer, SHOULD include the ATOMIC_AGGREGATE attribute. | | peer, SHOULD include the ATOMIC_AGGREGATE attribute. | |||
When BGP AS_PATH aggregation is done according to the [RFC4271], | When BGP AS_PATH aggregation is done according to the procedures in | |||
Section 9.2.2.2 procedures, and any resulting AS_SETs are discarded, | [RFC4271], Section 9.2.2.2, and any resulting AS_SETs are discarded, | |||
this is typically referred to as "brief" aggregation in | it is typically referred to as "brief" aggregation in | |||
implementations. Brief aggregation results in an AS_PATH that has | implementations. Brief aggregation results in an AS_PATH that has | |||
the property (from [RFC4271], Section 9.2.2.2): | the property (from [RFC4271], Section 9.2.2.2): | |||
| determine the longest leading sequence of tuples (as defined | | [D]etermine the longest leading sequence of tuples (as defined | |||
| above) common to all the AS_PATH attributes of the routes to be | | above) common to all the AS_PATH attributes of the routes to be | |||
| aggregated. Make this sequence the leading sequence of the | | aggregated. Make this sequence the leading sequence of the | |||
| aggregated AS_PATH attribute. | | aggregated AS_PATH attribute. | |||
The ATOMIC_AGGREGATE Path Attribute is subsequently attached to the | The ATOMIC_AGGREGATE Path Attribute is subsequently attached to the | |||
BGP route, if AS_SETs are dropped. | BGP route, if AS_SETs are dropped. | |||
5.1. Issues with "Brief" AS_PATH Aggregation and RPKI-ROV | 5.1. Issues with "Brief" AS_PATH Aggregation and RPKI-ROV | |||
While brief AS_PATH aggregation has the desirable property of not | While brief AS_PATH aggregation has the desirable property of not | |||
containing AS_SETs, the resulting aggregated AS_PATH may contain an | containing AS_SETs, the resulting aggregated AS_PATH may contain an | |||
unpredictable origin AS. This is because the aggregating AS may be | unpredictable origin AS. This is because the aggregating AS may be | |||
different from the purported origin AS (for the aggregate), which may | different from the purported origin AS (for the aggregate), which may | |||
vary as explained below. Such an unpredictable origin ASes may | vary as explained below. Such unpredictable origin ASes may result | |||
result in RPKI-ROV validation issues: | in RPKI-ROV validation issues: | |||
* Depending on the contributing routes to the aggregate route, the | * Depending on the contributing routes to the aggregate route, the | |||
resulting origin AS may vary. | resulting origin AS may vary. | |||
* The presence of expected contributing routes may be unpredictable | * The presence of expected contributing routes may be unpredictable | |||
due to route availability from BGP neighbors. | due to route availability from BGP neighbors. | |||
* In the presence of such varying origin ASes, it would be necessary | * In the presence of such varying origin ASes, it would be necessary | |||
for the resource holder to register Route Origin Authorizations | for the resource holder to register ROAs [RFC9582] for each | |||
(ROAs) [RFC9582] for each potential origin AS that may result from | potential origin AS that may result from the expected aggregated | |||
the expected aggregated AS_PATHs. | AS_PATHs. | |||
5.2. Recommendations to Mitigate Unpredictable AS_PATH Origins for | 5.2. Recommendations to Mitigate Unpredictable AS_PATH Origins for | |||
RPKI-ROV Purposes | RPKI-ROV Purposes | |||
To ensure a consistent BGP origin AS is announced for aggregate BGP | To ensure a consistent BGP origin AS is announced for aggregate BGP | |||
routes for implementations of "brief" BGP aggregation, the | routes for implementations of "brief" BGP aggregation, the | |||
implementation MUST be configured to truncate the AS_PATH after the | implementation MUST be configured to truncate the AS_PATH after the | |||
right-most instance of the desired origin AS for the aggregate. The | right-most instance of the desired origin AS for the aggregate. The | |||
desired origin AS could be the aggregating AS itself. A ROA would be | desired origin AS could be the aggregating AS itself. A ROA would be | |||
necessary for the aggregate prefix with the desired origin AS. | necessary for the aggregate prefix with the desired origin AS. | |||
skipping to change at page 6, line 50 ¶ | skipping to change at line 274 ¶ | |||
6.2. Not Advertising Aggregate Routes to Contributing ASes | 6.2. Not Advertising Aggregate Routes to Contributing ASes | |||
An aggregate prefix SHOULD NOT be announced to the contributing ASes. | An aggregate prefix SHOULD NOT be announced to the contributing ASes. | |||
Instead, more specific prefixes (from the aggregate) SHOULD be | Instead, more specific prefixes (from the aggregate) SHOULD be | |||
announced to each contributing AS, excluding any that were learned | announced to each contributing AS, excluding any that were learned | |||
from the contributing AS in consideration. See Appendix A for an | from the contributing AS in consideration. See Appendix A for an | |||
example of this filtering policy. | example of this filtering policy. | |||
6.3. Mitigating Forwarding Loops | 6.3. Mitigating Forwarding Loops | |||
As discussed in Section 5.1 of [RFC4632], the presence of both less | When both less specific and more specific destinations are present, | |||
specific and more specific destinations has the possibility to create | it's possible to create forwarding loops between networks, as | |||
forwarding loops between networks. | discussed in Section 5.1 of [RFC4632]. | |||
As a reminder, Rule #2 of Section 5.1 of [RFC4632] requires that BGP | As a reminder, Rule #2 in Section 5.1 of [RFC4632] requires that BGP | |||
implementations performing aggregation discard packets that match the | implementations performing aggregation discard packets that match the | |||
aggregate route but do not match any of the more-specific routes. | aggregate route but do not match any of the more specific routes. | |||
Further discussion of forwarding loops and their relationship to | Further discussion of forwarding loops and their relationship to | |||
AS_SETs can be found in Appendix C. | AS_SETs can be found in Appendix C. | |||
7. Security Considerations | 7. Security Considerations | |||
This document deprecates the use of aggregation techniques that | This document deprecates the use of aggregation techniques that | |||
create AS_SETs or AS_CONFED_SETs. Obsoleting these path segment | create AS_SETs or AS_CONFED_SETs. Obsoleting these path segment | |||
types from BGP and removal of the related code from implementations | types from BGP and the removal of the related code from | |||
would potentially decrease the attack surface for BGP. Deployments | implementations would potentially decrease the attack surface for | |||
of new BGP security technologies (e.g., [RFC6480], [RFC6811], | BGP. Deployments of new BGP security technologies (e.g., [RFC6480], | |||
[RFC8205]) benefit greatly if AS_SETs and AS_CONFED_SETs are not used | [RFC6811], and [RFC8205]) benefit greatly if AS_SETs and | |||
in BGP. | AS_CONFED_SETs are not used in BGP. | |||
8. IANA Considerations | 8. IANA Considerations | |||
This document requires no IANA actions. | This document has no IANA actions. | |||
9. Acknowledgements | ||||
The authors would like to thank Alvaro Retana, John Scudder, Ketan | ||||
Talaulikar, Keyur Patel, Susan Hares, Claudio Jeker, Nick Hilliard, | ||||
Robert Raszuk, John Heasley, Job Snijders, Jared Mauch, Jakob Heitz, | ||||
Tony Przygienda, Douglas Montgomery, Randy Bush, Curtis Villamizar, | ||||
Danny McPherson, Chris Morrow, Tom Petch, Ilya Varlashkin, Enke Chen, | ||||
Tony Li, Florian Weimer, John Leslie, Paul Jakma, Rob Austein, Russ | ||||
Housley, Sandra Murphy, Steve Bellovin, Steve Kent, Steve Padgett, | ||||
and Alfred Hoenes for comments and suggestions. The comments and | ||||
suggestions received from the IESG reviewers are also much | ||||
appreciated. | ||||
10. References | 9. References | |||
10.1. Normative References | 9.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | |||
Border Gateway Protocol 4 (BGP-4)", RFC 4271, | Border Gateway Protocol 4 (BGP-4)", RFC 4271, | |||
DOI 10.17487/RFC4271, January 2006, | DOI 10.17487/RFC4271, January 2006, | |||
<https://www.rfc-editor.org/info/rfc4271>. | <https://www.rfc-editor.org/info/rfc4271>. | |||
skipping to change at page 8, line 34 ¶ | skipping to change at line 342 ¶ | |||
[RFC7606] Chen, E., Ed., Scudder, J., Ed., Mohapatra, P., and K. | [RFC7606] Chen, E., Ed., Scudder, J., Ed., Mohapatra, P., and K. | |||
Patel, "Revised Error Handling for BGP UPDATE Messages", | Patel, "Revised Error Handling for BGP UPDATE Messages", | |||
RFC 7606, DOI 10.17487/RFC7606, August 2015, | RFC 7606, DOI 10.17487/RFC7606, August 2015, | |||
<https://www.rfc-editor.org/info/rfc7606>. | <https://www.rfc-editor.org/info/rfc7606>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
10.2. Informative References | 9.2. Informative References | |||
[Analysis] Hannachi, L. and K. Sriram, "Detailed analysis of AS_SETs | [Analysis] "Detailed analysis of AS_SETs in BGP updates", commit | |||
in BGP updates", NIST Robust Inter-domain Routing Project | eb0fc22, March 2022, | |||
Website , October 2019, | ||||
<https://github.com/ksriram25/IETF/blob/main/Detailed- | <https://github.com/ksriram25/IETF/blob/main/Detailed- | |||
AS_SET-analysis.txt>. | AS_SET-analysis.txt>. | |||
[I-D.ietf-sidrops-aspa-verification] | [ASPA-VERIFICATION] | |||
Azimov, A., Bogomazov, E., Bush, R., Patel, K., Snijders, | Azimov, A., Bogomazov, E., Bush, R., Patel, K., Snijders, | |||
J., and K. Sriram, "BGP AS_PATH Verification Based on | J., and K. Sriram, "BGP AS_PATH Verification Based on | |||
Autonomous System Provider Authorization (ASPA) Objects", | Autonomous System Provider Authorization (ASPA) Objects", | |||
Work in Progress, Internet-Draft, draft-ietf-sidrops-aspa- | Work in Progress, Internet-Draft, draft-ietf-sidrops-aspa- | |||
verification-20, 4 January 2025, | verification-22, 23 March 2025, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-sidrops- | <https://datatracker.ietf.org/doc/html/draft-ietf-sidrops- | |||
aspa-verification-20>. | aspa-verification-22>. | |||
[IANA-SP-ASN] | [IANA-SP-ASN] | |||
"Special-Purpose Autonomous System (AS) Numbers", | IANA, "Special-Purpose Autonomous System (AS) Numbers", | |||
<https://www.iana.org/assignments/iana-as-numbers-special- | <https://www.iana.org/assignments/iana-as-numbers-special- | |||
registry/iana-as-numbers-special-registry.xhtml>. | registry>. | |||
[RFC3779] Lynn, C., Kent, S., and K. Seo, "X.509 Extensions for IP | [RFC3779] Lynn, C., Kent, S., and K. Seo, "X.509 Extensions for IP | |||
Addresses and AS Identifiers", RFC 3779, | Addresses and AS Identifiers", RFC 3779, | |||
DOI 10.17487/RFC3779, June 2004, | DOI 10.17487/RFC3779, June 2004, | |||
<https://www.rfc-editor.org/info/rfc3779>. | <https://www.rfc-editor.org/info/rfc3779>. | |||
[RFC6480] Lepinski, M. and S. Kent, "An Infrastructure to Support | [RFC6480] Lepinski, M. and S. Kent, "An Infrastructure to Support | |||
Secure Internet Routing", RFC 6480, DOI 10.17487/RFC6480, | Secure Internet Routing", RFC 6480, DOI 10.17487/RFC6480, | |||
February 2012, <https://www.rfc-editor.org/info/rfc6480>. | February 2012, <https://www.rfc-editor.org/info/rfc6480>. | |||
skipping to change at page 10, line 5 ¶ | skipping to change at line 398 ¶ | |||
Maddison, "The Use of maxLength in the Resource Public Key | Maddison, "The Use of maxLength in the Resource Public Key | |||
Infrastructure (RPKI)", BCP 185, RFC 9319, | Infrastructure (RPKI)", BCP 185, RFC 9319, | |||
DOI 10.17487/RFC9319, October 2022, | DOI 10.17487/RFC9319, October 2022, | |||
<https://www.rfc-editor.org/info/rfc9319>. | <https://www.rfc-editor.org/info/rfc9319>. | |||
[RFC9582] Snijders, J., Maddison, B., Lepinski, M., Kong, D., and S. | [RFC9582] Snijders, J., Maddison, B., Lepinski, M., Kong, D., and S. | |||
Kent, "A Profile for Route Origin Authorizations (ROAs)", | Kent, "A Profile for Route Origin Authorizations (ROAs)", | |||
RFC 9582, DOI 10.17487/RFC9582, May 2024, | RFC 9582, DOI 10.17487/RFC9582, May 2024, | |||
<https://www.rfc-editor.org/info/rfc9582>. | <https://www.rfc-editor.org/info/rfc9582>. | |||
Appendix A. Example of Route Filtering for Aggregate Routes and their | Appendix A. Example of Route Filtering for Aggregate Routes and Their | |||
Contributors | Contributors | |||
Presented here is an illustration of how an AS_SET is not used when | The illustration presented below shows how an AS_SET is not used when | |||
aggregating and still data-plane route loops are avoided. Consider | aggregating and how data plane route loops are avoided. Consider | |||
that p1/24 (from AS 64501), p2/24 (from AS 64502), p3/24 (from AS | that p1/24 (from AS 64501), p2/24 (from AS 64502), p3/24 (from AS | |||
64503), and p4/24 (from AS 64504) are aggregated by AS 64505 to p/22. | 64503), and p4/24 (from AS 64504) are aggregated by AS 64505 to p/22. | |||
AS_SET is not used with the aggregate p/22 but AGGREGATOR and ATOMIC | AS_SET is not used with the aggregate p/22 but AGGREGATOR and ATOMIC | |||
AGGREGATE are used. Data-plane route loops are avoided by not | AGGREGATE are used. Data plane route loops are avoided by not | |||
announcing the aggregate p/22 to the contributing ASes, i.e., AS | announcing the aggregate p/22 to the contributing ASes, i.e., AS | |||
64501, AS 64502, AS 64503, and AS 64504. Instead, as further | 64501, AS 64502, AS 64503, and AS 64504. Instead, as further | |||
illustration, p1/24, p2/24, and p4/24 are announced to AS 64503. The | illustrated, p1/24, p2/24, and p4/24 are announced to AS 64503. The | |||
routing tables (post aggregation) of each of the ASes are depicted in | routing tables (post aggregation) of each of the ASes are depicted in | |||
the diagram below. | the diagram below. | |||
( ) ( ) ( ) ( ) | ( ) ( ) ( ) ( ) | |||
( AS64501 ) ( AS64502 ) ( AS64503 ) ( AS64504 ) | ( AS64501 ) ( AS64502 ) ( AS64503 ) ( AS64504 ) | |||
( ) ( ) ( ) ( ) | ( ) ( ) ( ) ( ) | |||
p1/24 p2/24 p3/24 p4/24 | p1/24 p2/24 p3/24 p4/24 | |||
| | | | | | | | | | |||
| +--> ( ) <--+ | | | +--> ( ) <--+ | | |||
| ( AS64505 ) | | | ( AS64505 ) | | |||
skipping to change at page 11, line 39 ¶ | skipping to change at line 447 ¶ | |||
p4/24 AS_PATH "64505 64504" p4/24 AS_PATH "" | p4/24 AS_PATH "64505 64504" p4/24 AS_PATH "" | |||
AS 64505 | AS 64505 | |||
========================== | ========================== | |||
p/22 AS_PATH "" AGGREGATOR 64505 ATOMIC_AGGREGATE | p/22 AS_PATH "" AGGREGATOR 64505 ATOMIC_AGGREGATE | |||
p1/24 AS_PATH "64501" | p1/24 AS_PATH "64501" | |||
p2/24 AS_PATH "64502" | p2/24 AS_PATH "64502" | |||
p3/24 AS_PATH "64503" | p3/24 AS_PATH "64503" | |||
p4/24 AS_PATH "64504" | p4/24 AS_PATH "64504" | |||
Appendix B. Examples of Consistent and Inconsistent BGP Origin-AS | Appendix B. Examples of Consistent and Inconsistent BGP Origin AS | |||
Generated by Traditional Brief Aggregation | Generated by Traditional Brief Aggregation | |||
In the examples below, it is illustrated how traditional brief | The examples below illustrate how traditional brief aggregation may | |||
aggregation may result in an inconsistent origin AS. | result in an inconsistent origin AS. | |||
AS 64500 aggregates more specific routes into 192.0.2.0/24. | AS 64500 aggregates more specific routes into 192.0.2.0/24. | |||
Consider the following scenarios where brief aggregation is done by | Consider the following scenarios where brief aggregation is done by | |||
AS 64500 and what the resultant origin ASes would be. | AS 64500 and what the resultant origin ASes would be. | |||
Routes: | Routes: | |||
R1 - 192.0.2.0/26 AS_PATH "64501" | R1 - 192.0.2.0/26 AS_PATH "64501" | |||
R2 - 192.0.2.64/26 AS_PATH "64502" | R2 - 192.0.2.64/26 AS_PATH "64502" | |||
R3 - 192.0.2.128/26 AS_PATH "64504 64502" | R3 - 192.0.2.128/26 AS_PATH "64504 64502" | |||
skipping to change at page 13, line 5 ¶ | skipping to change at line 503 ¶ | |||
(Note: AS numbers within square brackets represent an AS_SET.) | (Note: AS numbers within square brackets represent an AS_SET.) | |||
Receive R2. Aggregate 192.0.2.0/24 AS_PATH "[ 64501 64502 ]" | Receive R2. Aggregate 192.0.2.0/24 AS_PATH "[ 64501 64502 ]" | |||
If brief aggregation is in use, the AS_PATH would be truncated to the | If brief aggregation is in use, the AS_PATH would be truncated to the | |||
empty AS_PATH, "". | empty AS_PATH, "". | |||
The resulting AS_PATH is thus not stable and depends on the presence | The resulting AS_PATH is thus not stable and depends on the presence | |||
of specific routes. | of specific routes. | |||
B.2. Scenario 2: First one route, then another, the AS_PATHs overlap at | B.2. Scenario 2: First one route, then another, and the AS_PATHs | |||
the origin AS. | overlap at the origin AS | |||
Receive R1. Aggregate 192.0.2.0/24 AS_PATH "64501" | Receive R1. Aggregate 192.0.2.0/24 AS_PATH "64501" | |||
Receive R4. Aggregate 192.0.2.0/24 AS_PATH "[ 64504 64501 ]" | Receive R4. Aggregate 192.0.2.0/24 AS_PATH "[ 64504 64501 ]" | |||
If brief aggregation is in use, the AS_PATH is truncated to "". | If brief aggregation is in use, the AS_PATH is truncated to "". | |||
The resulting AS_PATH is thus not stable and depends on the presence | The resulting AS_PATH is thus not stable and depends on the presence | |||
of specific routes. | of specific routes. | |||
B.3. Scenario 3: First one route, then another, the AS_PATHs overlap at | B.3. Scenario 3: First one route, then another, and the AS_PATHs | |||
the neighbor AS | overlap at the neighbor AS | |||
Receive R3. Aggregate 192.0.2.0/24 AS_PATH "64504 64501". | Receive R3. Aggregate 192.0.2.0/24 AS_PATH "64504 64501". | |||
Receive R4. Aggregate 192.0.2.0/24 AS_PATH "64504 [ 64501 64502 ]" | Receive R4. Aggregate 192.0.2.0/24 AS_PATH "64504 [ 64501 64502 ]" | |||
If brief aggregation is in use, the AS_PATH is truncated to "64504". | If brief aggregation is in use, the AS_PATH is truncated to "64504". | |||
The resulting AS_PATH is thus not stable and depends on the presence | The resulting AS_PATH is thus not stable and depends on the presence | |||
of specific routes. | of specific routes. | |||
B.4. Achieving Consistent Origin-AS During Aggregation | B.4. Achieving Consistent Origin AS During Aggregation | |||
In the three scenarios above, the aggregating AS 64500 is using | In the three scenarios above, the aggregating AS 64500 is using | |||
traditional brief aggregation. This results in inconsistent origin | traditional brief aggregation. This results in inconsistent origin | |||
ASes as the contributing routes are learned. This motivates the | ASes as the contributing routes are learned. This motivates the | |||
"consistent brief" BGP aggregation mentioned in Section 5.2 and | "consistent brief" BGP aggregation mentioned in Section 5.2 and | |||
discussed further with examples below. | discussed further with examples below. | |||
The trivial solution to addressing the issue is to simply discard all | The trivial solution to addressing the issue is to simply discard all | |||
of the ASes for the contributing routes. In simple BGP aggregation | of the ASes for the contributing routes. In simple BGP aggregation | |||
topologies, this is likely the correct thing to do. The AS | topologies, this is likely the correct thing to do. The AS | |||
originating the aggregate, 192.0.2.0/24 in this example, is likely | originating the aggregate, 192.0.2.0/24 in this example, is likely | |||
the resource holder for the route in question. In such a case, | the resource holder for the route in question. In such a case, | |||
simply originating the route to its BGP upstream neighbors in the | simply originating the route to its BGP upstream neighbors in the | |||
Internet with its own AS, 64500, means that a consistent Route Origin | Internet with its own AS, 64500, means that a consistent ROA could be | |||
Authorization (ROA) could be registered in the RPKI for this prefix. | registered in the RPKI for this prefix. This satisfies the need for | |||
This satisfies the need for a consistent (unambiguous) origin AS. | a consistent (unambiguous) origin AS. | |||
If the contributing ASes are themselves multihomed to the Internet | If the contributing ASes are themselves multihomed to the Internet | |||
outside of their connections to AS 64500, then additional ROAs would | outside of their connections to AS 64500, then additional ROAs would | |||
need to be created for each of the more specific prefixes. | need to be created for each of the more specific prefixes. | |||
In more complex proxy aggregation scenarios, there may be a desire to | In more complex proxy aggregation scenarios, there may be a desire to | |||
permit some stable (i.e., common) portion of the contributing | permit some stable (i.e., common) portion of the contributing | |||
AS_PATHs to be kept in the aggregate route. Consider the case for | AS_PATHs to be kept in the aggregate route. Consider the case for | |||
Scenario 3, where the neighbor AS is the same for both R3 and R4 - AS | Scenario 3, where the neighbor AS is the same for both R3 and R4 -- | |||
64504. In such a case, an implementation may permit the aggregate's | AS 64504. In such a case, an implementation may permit the | |||
brief AS_PATH to be "64504", and a ROA would be created for the | aggregate's brief AS_PATH to be "64504", and a ROA would be created | |||
aggregate prefix with 64504 as the origin AS. | for the aggregate prefix with 64504 as the origin AS. | |||
Appendix C. Discussion on Forwarding Loops and AS_SETs | Appendix C. Discussion on Forwarding Loops and AS_SETs | |||
Although BGP-4 was designed to carry CIDR routes, [RFC4271] does not | Although BGP-4 was designed to carry Classless Inter-Domain Routing | |||
discuss the installation of "discard" or "null" routes when | (CIDR) routes, [RFC4271] does not discuss the installation of | |||
implementing its aggregation procedures. Implementations could | "discard" or "null" routes when implementing its aggregation | |||
originate an aggregate prefix without a covering route for a more- | procedures. Implementations could originate an aggregate prefix | |||
specific prefix (subsumed by the aggregate prefix) present in the | without a covering route for a more specific prefix (subsumed by the | |||
local routing table. | aggregate prefix) present in the local routing table. | |||
When aggregating more specific routes according to [RFC4271] | When aggregating more specific routes according to the aggregation | |||
aggregation procedures, the aggregating BGP speaker will place | procedures of [RFC4271], the aggregating BGP speaker will place | |||
contributing routes into the generated AS_PATH, perhaps using | contributing routes into the generated AS_PATH, perhaps using | |||
AS_SETs. As a result, a contributing AS will not install the | AS_SETs. As a result, a contributing AS will not install the | |||
aggregated route into its RIB since the route is an AS_PATH loop. | aggregated route into its RIB since the route is an AS_PATH loop. | |||
This provides a form of protection against forwarding loops created | This provides a form of protection against forwarding loops created | |||
by BGP aggregation. | by BGP aggregation. | |||
When brief aggregation methods are used, a BGP speaker may receive a | When brief aggregation methods are used, a BGP speaker may receive a | |||
route containing such less specific destination covering a local more | route containing a less specific destination covering a local more | |||
specific destination and install it in its routing table since it is | specific destination and install it in its routing table since it is | |||
not prevented from doing so by BGP AS_PATH loop detection. This | not prevented from doing so by BGP AS_PATH loop detection. This | |||
gives rise to the possibility of forwarding loops. To help prevent | gives rise to the possibility of forwarding loops. To help prevent | |||
forwarding loops, it is critical to adhere to the following: | forwarding loops, it is critical to adhere to the following: | |||
1. Rule #2 of Section 5.1 of [RFC4632]: "A router that generates an | 1. Rule #2 in Section 5.1 of [RFC4632]: | |||
aggregate route for multiple, more-specific routes must discard | ||||
packets that match the aggregate route, but not any of the more- | | A router that generates an aggregate route for multiple, more- | |||
specific routes. In other words, the "next hop" for the | | specific routes must discard packets that match the aggregate | |||
aggregate route should be the null destination." | | route, but not any of the more-specific routes. In other words, | |||
| the "next hop" for the aggregate route should be the null | ||||
| destination. | ||||
2. Not advertising aggregate routes to contributing ASes as | 2. Not advertising aggregate routes to contributing ASes as | |||
specified in Section 6.2 of this document (also see Appendix A). | specified in Section 6.2 of this document (also see Appendix A). | |||
Acknowledgements | ||||
The authors would like to thank Alvaro Retana, John Scudder, Ketan | ||||
Talaulikar, Keyur Patel, Susan Hares, Claudio Jeker, Nick Hilliard, | ||||
Robert Raszuk, John Heasley, Job Snijders, Jared Mauch, Jakob Heitz, | ||||
Tony Przygienda, Douglas Montgomery, Randy Bush, Curtis Villamizar, | ||||
Danny McPherson, Chris Morrow, Tom Petch, Ilya Varlashkin, Enke Chen, | ||||
Tony Li, Florian Weimer, John Leslie, Paul Jakma, Rob Austein, Russ | ||||
Housley, Sandra Murphy, Steven M. Bellovin, Steve Kent, Steve | ||||
Padgett, and Alfred Hoenes for comments and suggestions. The | ||||
comments and suggestions received from the IESG reviewers are also | ||||
much appreciated. | ||||
Authors' Addresses | Authors' Addresses | |||
Warren Kumari | Warren Kumari | |||
Google, Inc. | Google, Inc. | |||
1600 Amphitheatre Parkway | 1600 Amphitheatre Parkway | |||
Mountain View, CA 94043 | Mountain View, CA 94043 | |||
United States of America | United States of America | |||
Phone: +1 571 748 4373 | Phone: +1 571 748 4373 | |||
Email: warren@kumari.net | Email: warren@kumari.net | |||
End of changes. 59 change blocks. | ||||
177 lines changed or deleted | 174 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |