BGP 的 AS_PATH属性是其在自治系统(AS)间防止路由环路的核心机制。它就像一个记录了路由“护照”盖章页的路径列表。下面我将通过一个例子详细说明其工作机制,并介绍相关的华为配置。
AS_PATH 属性防环机制概览
特性 |
说明 |
在防环中的作用 |
属性类型 |
公认必遵 (Well-known mandatory) |
所有 BGP 实现都必须识别和处理此属性。 |
记录内容 |
路由从起源 AS 到当前 AS 所经过的所有 AS 编号序列(对于 AS_SEQUENCE 类型) |
提供了路径的完整历史记录。 |
EBGP 更新规则 |
路由通告给 EBGP对等体时,在 AS_PATH 列表的最左端添加本地的 AS 号。 |
确保路径信息在 AS 间传播时得以更新。 |
IBGP 更新规则 |
路由通告给 IBGP对等体时,AS_PATH 属性保持不变。 |
保持 AS 内部对路径的一致视图。 |
环路检测 |
BGP 路由器收到路由更新时,会检查 AS_PATH 列表中是否已包含本地的 AS 号。如果包含,则丢弃该路由,防止形成环路。 |
这是防环机制的核心操作。 |
选路作用 |
在其他条件相当的情况下,AS_PATH 较短的路由更优。 |
影响 BGP 的最佳路径选择。 |
工作机制举例
假设有四个自治系统:AS 100、AS 200、AS 300和AS 400。AS 100 内有一条路由 10.0.0.0/8 需要传播给其他 AS。
1.路由始发与初次传播:
- AS 100 中的路由器 R1 始发路由 10.0.0.0/8,并通过 eBGP 将其通告给 AS 200 中的路由器 R2。此时,该路由的AS_PATH为 100。
- R2 通过 iBGP 将这条路由通告给同属 AS 200 的路由器 R3。由于是 iBGP 通告,AS_PATH 保持不变,仍为 100。
2.路由继续传播与 AS_PATH 更新:
- R3 通过 eBGP 将路由 10.0.0.0/8 通告给 AS 300 中的路由器 R4。因为是 eBGP 通告,R3 会在 AS_PATH 的最左端添加自己的 AS 号 200,此时 AS_PATH 变为 200 100。
- R4 通过 iBGP 将路由通告给同属 AS 300 的路由器 R5,AS_PATH 保持不变,仍为 200 100。
- R5 通过 eBGP 将路由通告给 AS 400 中的路由器 R6。同样,eBGP 通告会添加本地 AS 号 300,此时 AS_PATH 变为 300 200 100。
3.环路检测与防止:
假设由于某种错误配置,AS 400 中的路由器 R6 又试图将这条通往 10.0.0.0/8的路由(当前 AS_PATH 为 300 200 100)通告回给 AS 200 中的某台路由器(例如 R7)。
- 当 R7 收到这条来自 R6 的 eBGP 路由更新时,它会检查该路由的 AS_PATH 属性。
- R7 发现 AS_PATH 列表 300 200 100 中包含了自己所在的 AS 号 200。
- 根据 BGP 的防环机制,R7 会认为此路由形成了环路,从而丢弃该路由更新,不会将其加入 BGP 路由表,也不会继续传播。
华为设备相关配置解析
在华为设备上,你可以通过以下命令查看和管理 AS_PATH 属性:
查看BGP路由表的AS_PATH属性:使用 display bgp routing-table 命令可以查看 BGP 路由表,其中就包含了 AS_PATH 信息。
<HUAWEI> display bgp routing-table
在输出中,Path/Ogn 字段显示的就是 AS_PATH 信息(例如 300 200 100 i)。
配置AS_PATH过滤(基于正则表达式):你可以创建 AS_PATH 过滤器,并在 BGP 对等体上应用,以实现基于路径的路由控制。
/* 创建AS_PATH过滤器,拒绝任何包含AS300的路由 */
ip as-path-filter 1 deny _300_
ip as-path-filter 1 permit .*
/* 进入BGP视图 */
bgp 200
/* 在向特定对等体(例如10.1.1.1)发送路由时应用该过滤器 */
peer 10.1.1.1 as-path-filter 1 export
这可以用于阻止传播来自特定 AS 的路由。
修改AS_PATH属性(谨慎操作):通过路由策略(Route-Policy)可以修改 BGP 路由的 AS_PATH 属性。
/* 创建路由策略 */
route-policy MODIFY_ASPATH permit node 10
apply as-path 500 600 additive /* 在原有AS_PATH前添加500和600 */# 或者使用 overwrite 参数覆盖原有AS_PATH# apply as-path 500 600 overwrite
/* 在BGP视图下应用策略 */
bgp 200
peer 10.1.1.1 route-policy MODIFY_ASPATH export
注意:修改 AS_PATH 属性必须非常谨慎,因为错误的修改可能会破坏防环机制或导致路由不可达。
其他相关配置:
- as-path-limit limit: 用于配置 AS_PATH 属性中 AS 号的最大个数,超过此限制的路由会被丢弃。
- undo check-first-as: 取消检查 EBGP 对等体发来的更新消息中 AS_PATH 属性的第一个 AS 号是否必须是对等体所在的 AS。慎用此命令,因为它可能增大环路风险。
- peer { ipv6-address | group-name } substitute-as: 替换 AS_PATH 属性中的 AS 编号。
注意事项
- IBGP 与防环:AS_PATH 属性主要防止的是 AS 之间(eBGP)的路由环路。
- 在 AS 内部(iBGP),防止环路主要依赖 IBGP 水平分割规则(从 IBGP 对等体学到的路由不会传递给其他 IBGP 对等体)以及路由反射器(Route Reflector)或联盟(Confederation)的特定防环属性(Originator_ID 和 Cluster_List)。
- 谨慎修改 AS_PATH:虽然可以通过路由策略(如 apply as-path)手动添加或修改 AS_PATH(例如添加重复的 AS 号以人为增加路径长度,影响选路),但这必须非常谨慎。错误的修改可能会破坏防环机制或导致路由不可达。
- 伪装 AS (Fake-AS) 场景:当设备使用 fake-as 配置伪装 AS 号建立 eBGP 邻居时,BGP 防环检查依据的是设备的真实 AS 号,而不是伪装的 AS 号。
总结
BGP 的 AS_PATH 属性通过记录路由经过的自治系统序列,并在 eBGP 路由器传播路由时添加本地 AS 号,使得任何 BGP 路由器在收到路由时都能通过检查该列表中是否已包含自身 AS 号来有效防止域间路由环路。
华为设备提供了丰富的命令来查看、过滤和修改(谨慎使用)AS_PATH 属性,这为网络管理员提供了灵活的路由控制手段。
希望这个解释和例子能帮助你理解 BGP AS_PATH 属性在防止路由环路中的工作机制。