通向HCIP之路:第四步:边界网关路由协议—BGP(概念、配置、特点、常见问题及其解决方案)

目录

一、BGP基本概念

二、BGP特点

三、BGP名词

四、BGP数据包

五、BGP工作过程

(1)建立TCP连接与邻居关系

(2)路由信息交换与BGP表生成

(3)收敛完成与周期保活

(4)结构突变处理

(5)错误处理

总结:

六、BGP路由黑洞问题

七、BGP防环机制

八、BGP基本配置

(1)直连EBGP邻居

(2)IBGP邻居(使用环回接口)

(3)EBGP邻居使用环回接口

(4)宣告路由

(5)下一跳本地配置(IBGP场景)

九、BGP认证配置

十、BGP状态说明表

(1)BGP路由表状态码

(2)Origin属性状态(路由来源)

(3)BGP邻居状态

(4)常见状态组合说明

[十一、BGP 宣告的深层剖析与最佳实践](#十一、BGP 宣告的深层剖析与最佳实践)

(1)可宣告路由的来源与本质

[(2)关键属性:MULTI_EXIT_DISC (MED) 的传递与影响](#(2)关键属性:MULTI_EXIT_DISC (MED) 的传递与影响)

[十二、BGP 自动汇总:历史、原理与现代配置](#十二、BGP 自动汇总:历史、原理与现代配置)

(1)核心原理

(2)开启与关闭的详细对比

(3)结论和建议

[十三、BGP 聚合(汇总)策略全解](#十三、BGP 聚合(汇总)策略全解)

(1)基本聚合命令

(2)高级策略:抑制部分明细(允许部分明细)

[十四、有条件打破 IBGP 水平分割](#十四、有条件打破 IBGP 水平分割)

(1)路由反射器 (Route Reflector: RR)

(2)联邦 (Confederation)

[十五、MA(多路访问)网络中的 BGP 下一跳优化](#十五、MA(多路访问)网络中的 BGP 下一跳优化)

(1)问题场景

(2)优化原理与条件

(3)相关查看命令

十六、BGP属性详解与配置

(1)PrefVal(权重优先级)

(2)LocPrf(本地优先级)

(3)下一跳属性规则

(4)AS-PATH属性

(5)起源属性(Origin)

(6)MED(多出口鉴别属性)

十七、BGP选路规则详解

十八、BGP社团属性(Community)

(1)基本概念

(2)配置示例:

(3)常用预定义社团属性

附:关键命令查看


一、BGP基本概念

  1. BGP:边界网关路由协议 ,属于无类别的路径矢量协议;是EGP协议中最流行的技术,工作在AS之间。
  2. EGP:外部网关路由协议------BGP
  3. IGP:内部网关路由协议------RIP、OSPF、EIGRP
  4. AS:自治系统,指一个全球网络范围或管理域。①标准AS号:16位二进制构成,范围0-65535,其中1-64511为公有,64512-65535为私有。②扩展AS号:32位二进制构成。
  5. BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目。
  6. AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此管理员需要进行策略来干涉选路。

二、BGP特点

  1. 无类别路径矢量------距离矢量的升级版,采用AS-BY-AS方式传递。
  2. 使用单播更新发送所有信息;基于TCP 179端口工作。
  3. 增量更新------仅触发,无周期更新。
  4. 具有丰富的属性来取代IGP中度量进行选路------属于多个参数控制协议。
  5. 可以在进项和出项对流量实施强大的策略------可控性强。
  6. 默认不被用于负载均衡------通过各种选路规则仅产生一条最佳路径。
  7. 支持认证和聚合(汇总)。

三、BGP名词

  1. 邻居:BGP中称为毗邻关系,支持非直连建邻。
  2. EBGP邻居关系:建邻设备处于不同的AS中
  3. IBGP邻居关系:建邻设备处于相同的AS中

四、BGP数据包

基于TCP 179端口工作,所有BGP数据包均需在TCP会话建立后传输。

  1. Open:仅负责邻居关系的建立,正常仅收发一次,携带Route-ID。
  2. Keepalive:保活,周期1分钟,实际保活TCP会话;Hold Time 默认3分钟。
  3. Update:携带路由条目,包括目标网络号 + 各种属性。
  4. Notification:出现错误数据时收发。

| 数据包类型 | 功能 | 触发条件 |
| Open | 建立邻居关系 | TCP会话建立后立即发送 |
| Keepalive | 保活邻居 | 每一分周期性发送 |
| Update | 传递路由信息 | 路由变更或初始同步时发送 |

Notification 错误通知 协议错误或会话异常时发送

五、BGP工作过程

(1)建立TCP连接与邻居关系

  1. 配置完成后,邻居间通过单播TCP三次握手建立会话,目标端口为179。
  2. TCP会话建立后,邻居间正常收发一次Open报文,建立BGP的邻居关系,生成邻居表。(Open报文中携带本地RID(生成方式与OSPF一致,需本地及所有邻居唯一))。
  3. 邻居关系建立后,默认每1分钟使用Keepalive报文周期保活邻居关系(实际是保活TCP会话)。

(2)路由信息交换与BGP表生成

  1. 邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目向BGP协议中进行宣告。(使用Update数据包进行邻居间路由共享)。
  2. 宣告后生成BGP表,装载本地发出及接收到的所有路由条目。
  3. BGP协议默认将最优路径加载于路由表中。("最优"仅基于BGP的选路规则,不一定为最佳路径。BGP默认不支持负载均衡)。

(3)收敛完成与周期保活

  1. 路由信息同步完成后,进入稳定状态。
  2. 此时仅依靠Keepalive报文周期保活即可。

Keepalive每1分钟发送一次,用于维护邻居关系。

Hold Time默认为3分钟,连续3次未收到Keepalive则判定邻居失效。

(4)结构突变处理

  1. 新增路由:【1】本地使用Update报文向所有邻居告知。【2】前提是该路由不被已经发出的聚合路由包含。
  2. 断开路由:【1】本地使用Update报文 向所有邻居告知。【2】同样要求该路由不被已经发出的聚合路由包含【3】只有聚合条目中包含的所有明细路由均在本地失效,才告知邻居删除聚合条目
  3. 无法沟通:【1】Hold Time为3分钟,连续3次未收到邻居的Keepalive报文。【2】系统将:①断开BGP邻居关系②断开TCP会话③删除从该邻居处学习到的所有路由

(5)错误处理

若出现错误信息,邻居间将使用Notification报文进行报错操作。

总结:

阶段 动作 使用的报文
连接建立 TCP三次握手(端口179) TCP
邻居建立 交换Open报文 Open
路由交换 发送Update报文 Update
周期保活 每1分钟发送Keepalive Keepalive
路由更新 新增/断开路由时发送Update UPdate
错误处理 发送Notification报文 Notification
邻居失效 Hold Time超时(3分钟)

六、BGP路由黑洞问题

问题描述:非直连建邻时,控制层面路由可传递,但数据层面流量经过未运行BGP的设备时无法通过。

解决方案

  1. 物理、逻辑拓扑全连(物理链路直连、或者vpn)。

  2. 邻居关系全连------所有设备运行BGP。

  3. BGP重发布到IGP(实验做法)。

  4. MPLS 多协议标签交换(推荐做法)。

七、BGP防环机制

  1. EBGP水平分割 :通过AS-PATH属性防环,拒绝包含本地AS号的路由条目进入。
  2. IBGP水平分割 :从一个IBGP邻居学到的路由不得传递给其他IBGP邻居

缺点:IBGP邻居需全互联,配置量大。

解决方案:联邦、路由反射器

八、BGP基本配置

(1)直连EBGP邻居

bash 复制代码
[r1]bgp 1   #启动BGP协议,启动时需要键入AS号;没有多进程概念
[r1-bgp]router-id 1.1.1.1   #建议配置RID;若不配置将自动生成---规则同OSPF相同
[r1-bgp]peer  12.1.1.2 as-number 2  #对端IP地址,及对端所在的AS编号

(2)IBGP邻居(使用环回接口)

  • IBGP邻居关系建立,在一个AS内部,拓扑正常较为复杂;建议使用环回接口地址作为源、目标ip地址;存在备份链路,同时可以多条物理链路传递
bash 复制代码
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 as-number 2
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
#切记:一旦使用环回接口建立BGP的邻居关系;必须将源地址也修改为环回接口

(3)EBGP邻居使用环回接口

  • EBGP邻居间存在多条物理链路时,也建议使用环回接口地址来建立
bash 复制代码
[r4]bgp 4
[r4-bgp]peer 5.5.5.5 as-number 5
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
#默认IBGP邻居间数据包的TTL值为255,EBGP邻居间TTL为1;故一旦使用环回建立ebgp邻居关系,必须修改TTL值,否则无法建立

(4)宣告路由

宣告条目必须与本地路由表完全一致:

bash 复制代码
[r1-bgp]network 1.1.1.0 24

(5)下一跳本地配置(IBGP场景)

IBGP路由传递时不修改下一跳,可能导致不可达:

bash 复制代码
[r2-bgp]peer 3.3.3.3 next-hop-local

九、BGP认证配置

用于确保 BGP 对等体(邻居)之间建立会话的安全性,防止非法设备建立邻居关系并注入虚假路由。

bash 复制代码
# 配置命令
[r1-bgp] peer 12.1.1.2 password cipher huawei@123

# 验证命令
[r1] display bgp peer verbose 12.1.1.2 | include Auth
  • cipher 表示密码以密文方式存储和传递。
  • 两端邻居的密码必须完全一致,否则 TCP 连接可以建立,但 BGP 状态将卡在 Active 或 OpenConfirm,无法进入 Established。
  • 这是生产网络中必须配置的基础安全措施。

十、BGP状态说明表

(1)BGP路由表状态码

| 状态符号 | 全称 | 说明 |
| * | valid(可用) | 路由条目可用,但不一定优秀 |
| > | best(优秀) | 路由条目优秀,是基于BGP选路规则的最佳路径 |
| *> | valid & best(可用且优秀) | 路由条目可用且优秀,可以加表(加入路由表)并可以传递给其他BGP邻居 |
| d | damped(抑制) | 路由被阻尼抑制,通常因路由抖动导致 |
| h | history(历史) | 路由条目处于历史状态,当前不可用但保留记录 |
| i | internal(内部) | 该条目是本地通过IBGP邻居学习到的 |
| s | suppressed(被抑制) | 路由被策略或聚合抑制 |

S Stale(陈旧) 路由条目陈旧,通常与GR(Graceful Restart)相关

(2)Origin属性状态(路由来源)

符号 全称 说明
i IGP(内部网关协议) 路由来源于IGP(如network命令宣告)
e EGP(外部网关协议) 路由来源于EGP(历史协议,现很少使用)
? incomplete(不完整) 路由来源于其他方式(如重发布引入)

(3)BGP邻居状态

| 状态 | 说明 |
| Idle | 初始状态,BGP未尝试建立连接 |
| Connect | TCP连接尝试中 |
| Active | TCP连接失败,正在尝试重新连接 |
| OpenSent | Open报文已发送,等待对方Open报文 |
| OpenConfirm | Open报文已确认,等待Keepalive报文 |
| Established | 邻居关系已建立,正常交换路由信息 |

其他非Established状态 表示邻居关系异常,需排查配置或网络问题

(4)常见状态组合说明

| 状态组合 | 含义 | 是否加表 | 是否传递 |
| *> | 最优路由 | 是 | 是 |
| * i | 来自IBGP的可用路由 | 是 | 否(受水平分割限制) |
| *>(带i) | 来自IBGP的可用路由 | 是 | 否(除非打破水平分割) |
| * e | 来自EGP的可用路由 | 视策略而定 | 视策略而定 |
| * ? | 来源不明的可用路由 | 视策略而定 | 视策略而定 |
| s | 被抑制的路由 | 否 | 否 |

d 被抑制的抖动路由

十一、BGP 宣告的深层剖析与最佳实践

(1)可宣告路由的来源与本质

  • BGP 并不自行发现路由,其核心功能是传递和控制路由信息。它可以宣告以下存在于本地路由表中的路由条目:
  1. 本地直连接口路由:最基本、最稳定的路由来源。
  2. 静态路由:由管理员手动配置。
  3. 动态 IGP 路由(如 OSPF、IS-IS、RIP 等学习到的):这是实现 BGP 与 IGP 协同的关键,允许 BGP 发布来自未运行 BGP 的内部网络设备的路由。

(2)关键属性:MULTI_EXIT_DISC (MED) 的传递与影响

  • 作用 :MED 属性相当于 BGP 的"度量值",用于向外部邻居(其他 AS)提示进入本 AS 的优选路径。数值越小越优先。
  • 传递规则 :①当在 BGP 中宣告一条从 IGP 学来的路由时,BGP 会自动将该路由在 IGP 中的度量值填入 MED 属性,并随路由传递给 EBGP 邻居。②例如,AS 100 中的两台边界路由器 R1 和 R2 都将路由 192.168.1.0/24 宣告给 AS 200。如果 R1 到达该网段的 IGP 开销是 10,MED 就是 10;R2 的开销是 50,MED 就是 50。那么对于 AS 200 来说,从 R1 进入 AS 100 的路径更优。
  • 关键问题与"黑洞"问题 :MED 属性在AS 内部(IBGP 邻居之间)传递时默认被保留 ,但 传递给外部 EBGP 邻居时,默认不传递 MED 。这意味着,如果 AS 内部只有部分边界路由器宣告了某条路由,那么外部 AS 在选择进入路径时,将缺乏 MED 作为参考依据 ,可能无法选择到离目标最近的入口点。最佳实践 :为了向外部 AS 提供一致的、有效的选路参考,建议在一个 AS 内,对于需要对外发布的路由,所有运行 BGP 的边界设备均应一致地进行宣告。这确保了外部 AS 能从所有可能的入口点收到该路由,并能通过比较 MED 值做出最优选择。

十二、BGP 自动汇总:历史、原理与现代配置

(1)核心原理

  • 自动汇总功能仅作用于通过 import-route(重发布)命令从 IGP 引入到 BGP 的路由。它不会影响通过 network 命令宣告的路由。

(2)开启与关闭的详细对比

| 特性 | 自动汇总开启 | 自动汇总关闭(默认) |
| 影响的操作 | 仅 import-route(重发布) | 仅 import-route(重发布) |
| 掩码处理 | 忽略原始子网掩码,**按主类网络边界(A/B/C类)**进行汇总并发布 | 保留原始子网掩码进行发布 |
| MED 值 | 强制设置为 0,丢失了 IGP 的度量信息 | 携带原始 IGP 路由的度量值作为 MED |
| 起源属性 | 标记为 incomplete (?),表示来源不明确(重发布引入) | 标记为 incomplete (?),表示来源不明确(重发布引入) |

与 network 宣告对比 差异巨大(掩码和度量均丢失) 起源属性不同(network 为 i,重发布为 ?),其他属性(掩码、MED)相同

(3)结论和建议

  • 强烈建议保持自动汇总关闭。这是现代设备的默认行为,也是最佳实践。
  • 关闭后,重发布进入 BGP 的路由能保留完整的网络信息和原始度量,使得路由策略更加精细和可预测。
  • 配合"所有边界设备一致宣告/重发布"的原则,可以确保网络行为的统一性。

十三、BGP 聚合(汇总)策略全解

BGP 聚合旨在减少路由表规模,并隐藏网络细节,但其核心挑战在于如何在汇总的同时,不影响必要的路径选择

(1)基本聚合命令

bash 复制代码
[r5-bgp] aggregate 100.100.0.0 22
# 同时发布聚合路由和所有明细路由

[r5-bgp] aggregate 100.100.0.0 22 detail-suppressed
# 仅发布聚合路由,**抑制所有明细路由**

(2)高级策略:抑制部分明细(允许部分明细)

在实际工程中,为了进行精准的流量工程(Traffic Engineering),常需要在发布汇总路由的同时,有选择地发布部分关键明细路由。以下是四种等效的实现方法:

场景目标 :聚合 100.100.0.0/22,但允许明细 100.100.1.0/24 继续传播。

| 方法 | 配置示例 | 核心逻辑与特点 |
| 抑制策略 (suppress-policy) | bash [r5] ip ip-prefix SUPPR permit 100.100.1.0 24 [r5] route-policy SUPPR permit node 10 [r5-route-policy]if-match ip-prefix SUPPR [r5-bgp]aggregate 100.100.0.0 22 suppress-policy SUPPR | 反向逻辑 :在策略中 permit 的条目,在聚合时会被 suppress(抑制)。其他未被 permit 的明细默认被抑制。 |
| 出口策略 (route-policy export) | bash [r5]ip ip-prefix b permit 100.100.1.0 24 [r5]route-policy b deny node 10 [r5-route-policy]if-match ip-prefix b [r5]route-policy b permit node 20 [r5]bgp 3 [r5-bgp]peer 4.4.4.4 route-policy b ? export Specify export policy 控制层面的出项 import Specify import policy 控制层面的入向 [r5-bgp]peer 4.4.4.4 route-policy b export | 正向逻辑:在发给特定邻居的出方向策略中,deny 掉要放行的明细(使其不被过滤),然后 permit 其他所有。需单独对每个邻居应用。 |
| 过滤策略 (filter-policy export) | bash [r5]ip ip-prefix c deny 100.100.1.0 24 [r5]ip ip-prefix c permit 0.0.0.0 0 le 32 [r5-bgp]filter-policy ip-prefix c export(控制层面方向) | 正向逻辑:前缀列表本身定义允许(permit)或拒绝(deny)。调用后,只有被前缀列表 permit 的路由(包括聚合和指定的明细)才会被发布。注意:这可能会过滤掉其他不相关的路由,需谨慎使用 0.0.0.0/0 le 32 作为最后一条 permit。 |

基于前缀列表的过滤 (peer ip-prefix export) bash [r5]ip ip-prefix d deny 100.100.1.0 24 [r5]ip ip-prefix d permit 0.0.0.0 0 le 32 [r5-bgp]peer 4.4.4.4 ip-prefix d export 正向逻辑:与 route-policy 逻辑类似,直接在前缀列表中定义规则。deny 要放行的明细,最后用 permit 0.0.0.0/0 le 32 允许其他所有。这是最简洁的方法之一。

十四、有条件打破 IBGP 水平分割

IBGP 水平分割规则(从一个 IBGP 邻居学到的路由,不能传给另一个 IBGP 邻居)导致 AS 内需要全互联,N 台设备需要建立 N(N-1)/2 条邻居关系。以下两种技术用于解决此问题。

(1)路由反射器 (Route Reflector: RR)

1、角色:①RR (反射器) :负责反射路由的中心设备。②Client (客户端) :与 RR 建立 IBGP 邻居,并享受路由反射服务的设备。③Non-Client (非客户端):与 RR 建立 IBGP 邻居,但不是客户端的设备(通常是其他 RR 或全互联组中的设备)。

2、反射规则(核心):

下图清晰展示了 RR 在不同场景下的反射行为:

3、配置

bash 复制代码
# 在 RR 上,将指定邻居配置为客户端
[r3-bgp] peer 2.2.2.2 reflect-client
# 执行此命令后,r3 成为 RR,2.2.2.2 成为其 Client

4、防环机制:使用 ORIGINATOR_ID 和 CLUSTER_LIST 属性。

(2)联邦 (Confederation)

1、原理:将一个大的 AS 在逻辑上划分为多个小的私有 AS(通常在 64512-65535 范围内)。这些小 AS 之间建立 联邦内 EBGP 邻居关系,可以自然地传递路由,从而打破 IBGP 水平分割。

2、特点 :①对外(与其他真实 AS 通信时)仍使用统一的联邦 ID(即原始的大 AS 号) 。②联邦内 EBGP 邻居间,大部分行为像普通 EBGP(如下一跳改变),但可选地不改变 AS_PATH等属性,以减少路径长度。

3、配置

bash 复制代码
[r3] bgp 64512                # 启动 BGP,使用小 AS 号
[r3-bgp]router-id 3.3.3.3
[r3-bgp] confederation id 100 # 声明所属的大 AS(联邦 ID)
[r3-bgp] confederation peer-as 64513  # 声明联邦内对等的小 AS 号
[r3-bgp] peer 4.4.4.4 as-number 64513 # 与联邦内 EBGP 邻居建邻
[r3-bgp] peer 4.4.4.4 ebgp-max-hop 2  # 通常联邦内邻居非直连,需修改 TTL
[r3-bgp] peer 4.4.4.4 connect-interface LoopBack0

工程建议 :大型网络常 混合使用 RR 和联邦。在每个联邦子 AS 内部使用 RR 架构,再通过联邦连接各个子 AS,形成层次化、可扩展的 BGP 网络。

十五、MA(多路访问)网络中的 BGP 下一跳优化

(1)问题场景

在以太网等广播型多路访问网络中,若 R1、R2、R3 处于同一网段但属于不同 AS,R1 与 R2、R3 均建立 EBGP。当 R2 将一条从其后端(如 R4)学来的路由发给 R1 时,默认下一跳是 R2 的接口地址。然而,如果 R3 到 R4 的路径更优(如 IGP 开销更小),对 R1 来说,经过 R3 才是最佳路径。

(2)优化原理与条件

原理:该优化依赖于 ICMP 重定向 和 BGP 的第三方下一跳特性。

1、R1 最初将去往 R4 的流量发给下一跳 R2。

2、R2 查表后发现,去往 R4 的最佳下一跳其实是同一网段的 R3,且入口出口为同一接口。

3、R2 向 R1 发送一个 ICMP 重定向报文,告知 R1 "对于这个目标,更好的下一跳是 R3"。

4、R1 更新其路由表或 ARP 表,后续流量直接发往 R3。

5、在 BGP 层面,R1 在向其他邻居传递该路由时,可能会(取决于实现和配置)将下一跳优化为 R3

必要条件:

1、物理拓扑:R1、R2、R3 必须在同一个广播域(二层可达)。

2、邻居建立 :R1 必须与 R2 和 R3 都建立 BGP 邻居关系,并且最好使用物理接口地址建邻。

3、ICMP 重定向:在相关路由器上必须启用(默认启用)。

(3)相关查看命令

bash 复制代码
# 查看从特定邻居学到的所有BGP路由(无论是否最优)
[r1] display bgp routing-table peer 10.1.1.2 received-routes

# 查看向特定邻居发布的所有BGP路由
[r1] display bgp routing-table peer 10.1.1.2 advertised-routes

十六、BGP属性详解与配置

(1)PrefVal(权重优先级)

  • 传播范围:不传播,仅本地有效(华为私有属性)
  • 默认值:0
  • 取值范围:0-65535(值越大越优)
  • 作用:影响本地的BGP路由选择,只能干涉EBGP/IBGP在本地的选路

配置:

bash 复制代码
# 方式1:直接为从特定邻居学到的所有路由设置PrefVal
[r3-bgp] peer 4.4.4.4 preferred-value 1

# 方式2:通过路由策略为特定路由设置PrefVal(实现负载分担)
[r3] ip ip-prefix p permit 1.1.1.0 24
[r3] route-policy p permit node 10
[r3-route-policy] if-match ip-prefix p
[r3-route-policy] apply preferred-value 1
[r3-route-policy] q
[r3] route-policy p permit node 20  # 空条目,允许其他路由通过
[r3] bgp 2
[r3-bgp] peer 4.4.4.4 route-policy p import

重要说明:PrefVal只能在入方向(import)调用,因为其不传播的特性。

(2)LocPrf(本地优先级)

  • 传播范围:整个AS内部,在IBGP邻居间传递
  • 默认值:100
  • 取值范围:0-255(值越大越优)
  • 作用:最常用于干涉IBGP邻居关系的选路

配置:

bash 复制代码
# 方式1:修改本地传递给所有IBGP邻居的路由的LocPrf
[r4-bgp] default local-preference 1

# 方式2:通过路由策略为特定路由设置LocPrf(实现负载分担)
[r3] ip ip-prefix l permit 1.1.1.0 24
[r3] route-policy l permit node 10
[r3-route-policy] apply local-preference 101
[r3-route-policy] if-match ip-prefix l
[r3-route-policy] q
[r3] route-policy l permit node 20
[r3] bgp 2
[r3-bgp] peer 4.4.4.4 route-policy l import  # 可在出入方向调用

注意:LocPrf可以在IBGP邻居关系的入或出方向调用。

(3)下一跳属性规则

  • 在BGP中宣告本地IGP路由时,BGP表中下一跳为0.0.0.0
  • 从其他邻居学到的路由,下一跳不为0.0.0.0
  • 本地优先选择下一跳为0.0.0.0的路由传递给其他BGP邻居

(4)AS-PATH属性

  • 作用:记录路由经过的所有AS编号
  • 防环机制:EBGP水平分割(拒绝包含本地AS号的路由)
  • 选路规则:优选AS-PATH最短的路径
  • 修改规则:只能在EBGP邻居间添加AS号(只能添加,不能减少)

配置:

bash 复制代码
[r2] ip ip-prefix as index 10 permit 1.1.1.0 24
[r2] route-policy as permit node 10
[r2-route-policy] if-match ip-prefix as
[r2-route-policy] apply as-path 3 4 5 additive  # 添加AS号
[r2-route-policy] q
[r2] route-policy as permit node 20
[r2] bgp 2
[r2-bgp] peer 12.1.1.1 route-policy as import

添加位置说明:①入向调用:添加的AS号在路径最左端(3 4 5 实际AS)②出向调用:添加的AS号在路径最左端(X 3 4 5 实际AS,X为实际经过的AS)

重要注意: 如果添加的AS号实际存在(如AS3),且该AS确实在路径上,可能导致路由被EBGP水平分割拒绝。解决方案是重复添加已存在的AS号:

bash 复制代码
[r2-route-policy] apply as-path 1 1 1 additive  # 重复添加AS1三次

(5)起源属性(Origin)

类型:

  • i(IGP):通过network命令宣告的路由
  • e(EGP):通过EGP重发布的路由(已淘汰)
  • ?(incomplete):通过IGP重发布到BGP的路由

优先级:i > e > ?

bash 复制代码
[r3] ip ip-prefix o permit 1.1.1.0 24
[r3] route-policy o permit node 10
[r3-route-policy] if-match ip-prefix o
[r3-route-policy] apply origin egp 2  # 设置为e类型,需指定对端AS号
[r3-route-policy] q
[r3] route-policy o permit node 20
[r3] bgp 2
[r3-bgp] peer 2.2.2.2 route-policy o import  # 可在出入方向调用

(6)MED(多出口鉴别属性)

  • **作用:**BGP的"度量值",用于干涉EBGP选路(常用于AS1干涉AS2对AS1的选路)
  • **默认值:**0(宣告或重发布时携带本地IGP的cost)
  • **选路规则:**MED值越小越优

配置:

bash 复制代码
[r1] ip ip-prefix med permit 1.1.1.0 24
[r1] route-policy med permit node 10
[r1-route-policy] if-match ip-prefix med
[r1-route-policy] apply cost 2  # 修改MED值
[r1-route-policy] q
[r1] route-policy med permit node 20
[r1] bgp 1
[r1-bgp] peer 12.1.1.2 route-policy med export  # 通常在出方向调用

查看路径命令:

bash 复制代码
<r1> ping -r -a 1.1.1.1 3.3.3.3  # 记录路径

十七、BGP选路规则详解

比较前提:多条BGP路由目标相同,均可达(下一跳可达,同步关闭),管理距离相同。

| 步骤 | 比较项目 | 规则(优选) | 传播范围 | 默认值 | 优选值 | 主要应用场景 | 配置特点 |
| 1 | PrefVal (权重优先级) | 值最高的路由 | 不传播,仅本地有效 | 0 | 越大越优(0-65535) | 本地选路控制 干涉EBGP/IBGP在本地的选路 | 只能在入方向(import)调用 华为私有属性 |
| 2 | Local_Preference (本地优先级) | 值最高的路由 | 整个AS内部,IBGP邻居间传递 | 100 | 越大越优(0-255) | 干涉IBGP邻居关系选路 最常用属性 | 可在出入方向调用 可全局或针对特定路由 |
| 3 | 路由来源 | 手动聚合 > 自动聚合 > network > import > 从对等体学到的 | 不直接传播,由路由生成方式决定 | - | 按顺序 | 本地生成路由优于邻居学习 | 通过配置路由生成方式影响 |
| 4 | AS_Path (AS路径) | 最短的路由(AS数量最少) | 全网传递,记录所有经过的AS | 自动生成 | 越短越优 | EBGP水平分割防环 干涉EBGP/IBGP选路 | 只能在EBGP邻居间 添加AS号 只能增加不能减少 |
| 5 | Origin (起源属性) | IGP(i) > EGP(e) > Incomplete(?) | 全网传递 | i/e/? | i>e>? | 根据路由来源选路 | 可在出入方向 调用 修改路由来源类型 |
| 6 | MED (多出口鉴别) | 值最小的路由 | 相邻AS间,不传递到第三个AS | 0或IGP cost | 越小越优 | 最常用于干涉EBGP选路 AS间出口优化 | 通常在出方向 调用 宣告时自动携带IGP cost |
| 7 | 邻居类型 | EBGP > 联邦内EBGP > IBGP | 不传播,本地判断 | - | 外部>内部 | 优先选择外部路径 | 自动判断,无需配置 |
| 8 | 到达下一跳的 IGP Metric | 值最小的路由 | 不传播,本地计算 | IGP实际值 | 越小越优 | AS内部选择到出口的最优路径 | 通过调整IGP度量值影响 |
| 9 | Cluster_List (簇列表) | 最短的路由 | 路由反射器环境中传递 | - | 越短越优 | 路由反射器环境下的选路 | 自动生成,通常不手动配置 |
| 10 | Orginator_ID (起源ID) | 最小的路由 | 路由反射器环境中传递 | RR分配 | 越小越优 | 路由反射器环境下的选路 | 自动生成,通常不手动配置 |
| 11 | Router_ID (路由器ID) | 最小的路由器发布的路由 | 不传播,本地比较 | 配置或自动生成 | 越小越优 | 最终决断条件之一 | 通过配置router-id影响 |

12 邻居IP地址 最小的邻居学来的路由 不传播,本地比较 邻居IP地址 越小越优 最终决断条件 自动比较,无需配置

BGP选路规则记忆口诀:

一权二本三来源,四短五优六MED,

七外八内九簇短,十起十一RID小,

十二IP最后挑,十三步走完路径好。

十八、BGP社团属性(Community)

(1)基本概念

  • BGP的扩展属性,默认大多数厂商设备不携带也不传递社团属性
  • 需要显式开启传递性

(2)配置示例:

bash 复制代码
# 1. 创建路由策略并设置社团属性
[r1] route-policy com permit node 10
[r1-route-policy] apply community no-advertise  # 对所有匹配流量设置属性
[r1-route-policy] q

# 2. 应用策略并开启社团属性传递
[r1] bgp 1
[r1-bgp] peer 12.1.1.2 route-policy com export
[r1-bgp] peer 12.1.1.2 advertise-community  # 必须开启传递性

(3)常用预定义社团属性

| 社团属性 | 作用 | 说明 |
| no-advertise | 接收方不再传播此路由 | 收到含此属性的路由后,不传递给任何BGP邻居 |
| no-export | 不传递给下一个AS | 收到含此属性的路由后,不传递给EBGP邻居(不传出当前AS) |

no-export-subconfed 不传递给下一个小AS 联邦场景:不传递给其他子AS;无联邦时与no-export相同

重要说明 :社团属性的传递是逐跳行为,每台设备都需要配置advertise-community才能继续传递。

附:关键命令查看

bash 复制代码
#查看BGP邻居状态
[r1]display bgp peer

#查看BGP路由表
[r1]display bgp routing-table

#查看TCp会话
[r1]display tcp status

# 查看路径
<r1> ping -r -a 1.1.1.1 3.3.3.3  

# 查看BGP路由的详细路径信息
<r1> ping -r -a <源IP> <目的IP>

# 查看从特定邻居学到的所有路由(无论是否最优)
[r1] display bgp routing-table peer <邻居IP> received-routes

# 查看发送给特定邻居的所有路由
[r1] display bgp routing-table peer <邻居IP> advertised-routes

# 查看BGP邻居详细信息
[r1] display bgp peer <邻居IP> verbose

# 查看路由策略配置
[r1] display route-policy
相关推荐
君陌社区·网络安全防护中心1 天前
基于Mininet模拟SDN环境
网络
Porco.w1 天前
C#与三菱PLC FX5U通信
网络·c#
枷锁—sha1 天前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
云飞云共享云桌面1 天前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
爱学习的程序媛1 天前
PSTN(公共交换电话网)的起源与发展
网络·信息与通信
不爱吃糖的程序媛1 天前
Capacitor:跨平台Web原生应用开发利器,现已全面适配鸿蒙
前端·华为·harmonyos
roman_日积跬步-终至千里1 天前
【Java并发】Java 线程池实战:警惕使用CompletableFuture.supplyAsync
java·开发语言·网络
2的n次方_1 天前
Runtime 内存管理深化:推理批处理下的内存复用与生命周期精细控制
c语言·网络·架构
郝学胜-神的一滴1 天前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生