0. 实验目标
本实验将 BGP 邻居、IBGP 传递、Local_Pref、AS_Path、Community、聚合与故障切换放在同一场景中。完成后应能从 display bgp routing-table 解释每一个 *、> 和属性变化。
ISP-A (AS 65010)
|
192.0.2.0/30
|
HQ-EDGE1 (AS 65001) ----- IBGP ----- HQ-EDGE2 (AS 65001)
| |
198.51.100.0/30 203.0.113.0/30
| |
ISP-B (AS 65020) Branch LAN: 10.10.0.0/16为简化拓扑图,省略了两台总部边界之间的承载网。实际实验中应先通过 OSPF 或静态路由保证两台设备的 Loopback、IBGP Next_Hop 和各外联地址可达。
1. 验收需求
- EDGE1 与 ISP-A、EDGE2 与 ISP-B 建立 EBGP;EDGE1 与 EDGE2 建立 Loopback IBGP。
- 两个 ISP 都发布测试前缀
203.0.113.0/24,总部默认经 ISP-A 出口。 - ISP-A 故障后,流量可自动切到 ISP-B。
- 将 Branch 的
10.10.10.0/24、10.10.11.0/24聚合为10.10.10.0/23对外发布,并防止回灌。 - 给仅限本 AS 使用的测试路由打
no-export,确认其不会被发布到 EBGP。 - 用 AS_Path prepend 让外部网络相对更少选择备用入口。
2. 建立邻居与可达性
以下是 VRP 配置骨架;接口地址和 AS 号可按实验环境替换。
# HQ-EDGE1
bgp 65001
router-id 1.1.1.1
peer 192.0.2.1 as-number 65010
peer 10.255.255.2 as-number 65001
peer 10.255.255.2 connect-interface LoopBack0
# 把从 ISP-A 学到的路由传给 IBGP 时改写下一跳
peer 10.255.255.2 next-hop-local
# HQ-EDGE2
bgp 65001
router-id 2.2.2.2
peer 198.51.100.1 as-number 65020
peer 10.255.255.1 as-number 65001
peer 10.255.255.1 connect-interface LoopBack0
peer 10.255.255.1 next-hop-local先验证:
display bgp peer
display ip routing-table 10.255.255.1
display ip routing-table 10.255.255.2只有 peer 为 Established 且下一跳可达,后续选路实验才有意义。
3. 用 Local_Pref 选择主出口
在 EDGE1 的 ISP-A 入方向提高 Local_Pref。该属性会通过 IBGP 传播,因此总部内部设备也会偏向 ISP-A。
route-policy PREFER-ISP-A permit node 10
apply local-preference 200
route-policy PREFER-ISP-A permit node 100
bgp 65001
peer 192.0.2.1 route-policy PREFER-ISP-A import在 EDGE1、EDGE2 上比较同一前缀:
display bgp routing-table 203.0.113.0 24预期:来自 ISP-A 的路径带 localpref 200 并标记 *>;来自 ISP-B 的路径仍保留为 valid 备份。
4. 聚合、Community 与外部引流
4.1 对外聚合并保留 AS_Path 防环
bgp 65001
aggregate 10.10.10.0 23 as-set detail-suppressedas-set 让聚合路由继承明细 AS_Path,避免始发 AS 接受回灌路由;detail-suppressed 仅发布汇总,减少外部路由表条目。验证聚合路由是否带 Atomic-aggregate 和期望的 AS_Path。
4.2 标记不可出 AS 的测试前缀
ip ip-prefix TEST-ONLY index 10 permit 10.255.0.0 16
route-policy MARK-NO-EXPORT permit node 10
if-match ip-prefix TEST-ONLY
apply community no-export
route-policy MARK-NO-EXPORT permit node 100
bgp 65001
peer 192.0.2.1 route-policy MARK-NO-EXPORT export
peer 192.0.2.1 advertise-communityadvertise-community 是关键:未显式通告 Community 时,属性可能不会沿 peer 传递。对两个出口按实际需求分别部署策略,避免把测试前缀误发到公网。
4.3 让备用入口较不吸引外部流量
在 EDGE2 对 ISP-B 的出方向追加本 AS 两次:
route-policy PREPEND-ISP-B permit node 10
apply as-path 65001 65001 additive
bgp 65001
peer 198.51.100.1 route-policy PREPEND-ISP-B export这影响的是外部 AS 的选路,不会替代本 AS 内由 Local_Pref 决定的主出口策略。
5. 故障演练与验收表
| 操作 | 预期现象 | 验证命令 |
|---|---|---|
| 正常状态 | ISP-A 路径 Local_Pref 更高、为 best | display bgp routing-table 203.0.113.0 24 |
| 关闭 EDGE1 到 ISP-A 的接口 | ISP-A 路径撤销,ISP-B 路径升为 best | 同上、display bgp peer |
| 恢复接口 | ISP-A 邻居恢复后重新成为 best | 同上 |
查看 10.10.10.0/23 | 对外只见聚合,明细受抑制 | display bgp routing-table 10.10.10.0 23 |
| 检查测试前缀 | 具有 no-export 的前缀不应在 EBGP 对端学习 | 本端 display bgp routing-table + 对端 BGP 表 |
删除 advertise-community 后刷新 | 对端不再获得 Community 标记 | 对端详细 BGP 路由信息 |
变更边界
在真实网络中执行 Local_Pref、AS_Path prepend、聚合或 Community 策略前,必须先用 route-policy 精确匹配业务前缀,并保留末尾 permit。遗漏末尾 permit 可能使未匹配路由被整体拒绝发布。
6. 复盘问题
- 为什么 ISP-B 的 MED 更小,仍可能不被本 AS 选为主出口?
- 为什么只在 EDGE1 改 Local_Pref,却能影响 EDGE2 的出口选择?
- 为什么聚合时
as-set能降低回灌风险,detail-suppressed又可能造成次优? no-export、AS_Path prepend 分别控制哪个方向的流量?
