第92篇:BGP 优选路径调优案例
关键词
BGP、路径调优、Local Preference、MED、AS_PATH、选路控制
一、案例概述
某企业有双出口连接到互联网(ISP1 和 ISP2),需要精细控制出入流量。
网络拓扑
┌─────────────────────┐
│ Internet │
└──┬──────────────┬───┘
│ │
ISP1 ISP2
(AS 100) (AS 200)
│ │
| RouterA GE0/0/0 | RouterB GE0/0/0 | |
|---|---|---|
| │ │ | ||
| └── iBGP ──────┘ | ||
| │ | ||
| RouterC (内部) |
需求
| 需求 | 描述 |
|---|---|
| 入站流量(Internet→内部) | 默认走 ISP1,ISP1 故障时切换 ISP2 |
| 出站流量(内部→Internet) | 视频流量走 ISP2,普通流量走 ISP1 |
二、出站流量控制(内部→Internet)
2.1 使用 Local_Preference
出站流量控制使用 Local_Preference,数值越大越优先。
# RouterA 从 ISP1 学到默认路由
# RouterB 从 ISP2 学到默认路由
# 在 RouterC(RR)上设置:
# 来自 RouterA(ISP1)的路由 Local_Preference = 200 → 优选
# 来自 RouterB(ISP2)的路由 Local_Preference = 100
bgp 65001
peer 10.0.12.1 route-policy LP_FROM_ISP1 import # RouterA
peer 10.0.23.2 route-policy LP_FROM_ISP2 import # RouterB
route-policy LP_FROM_ISP1 permit node 10
apply local-preference 200
route-policy LP_FROM_ISP2 permit node 10
apply local-preference 100
结果:默认路由指向 ISP1。ISP1 故障时自动切换到 ISP2(Local_Preference=100)。
2.2 基于应用的出站分流
# PBR + BGP:视频流量强制走 ISP2
acl number 3001
rule 10 permit ip destination 视频服务器网段
traffic classifier VIDEO
if-match acl 3001
traffic behavior TO_ISP2
redirect ip-nexthop 10.0.23.2 # 下一跳强制指向 ISP2
traffic policy VIDEO_TO_ISP2
classifier VIDEO behavior TO_ISP2
interface GigabitEthernet0/0/1
traffic-policy VIDEO_TO_ISP2 inbound
三、入站流量控制(Internet→内部)
3.1 使用 MED 控制入站
入站流量控制使用 MED,数值越小越优先。
思路:在 ISP1 出口通告的网段 MED=50,在 ISP2 出口通告 MED=100,让 ISP1 优先。
# RouterA(ISP1 侧)——向 ISP1 通告内部路由
bgp 65001
peer 10.0.12.1 route-policy TO_ISP1 export
route-policy TO_ISP1 permit node 10
apply cost 50 # MED = 50
apply community 100:10
# RouterB(ISP2 侧)——向 ISP2 通告内部路由
bgp 65001
peer 10.0.23.2 route-policy TO_ISP2 export
route-policy TO_ISP2 permit node 10
apply cost 100 # MED = 100
注意:MED 的有效性依赖于 ISP 是否比较来自不同 AS 的 MED。如果 ISP 使用 compare-different-as-med,MED 生效。
3.2 使用 AS_PATH 控制入站
另一种更可靠的方案是人为延长 AS_PATH:
# RouterB(ISP2 侧)——加长 AS_PATH 让入站流量优选 ISP1
route-policy TO_ISP2 permit node 10
apply as-path 65001 65001 additive # 添加 2 个 AS 号
bgp 65001
peer 10.0.23.2 route-policy TO_ISP2 export
效果: - ISP1 看到的 AS_PATH = [65001] - ISP2 看到的 AS_PATH = [65001 65001 65001](延长了) - 互联网优先选择 AS_PATH 更短的 ISP1
四、链路故障自动切换
4.1 配置 BFD
# RouterA 与 ISP1 之间启用 BFD
interface GigabitEthernet0/0/0
bfd min-tx-interval 100
bfd min-rx-interval 100
bfd detect-multiplier 3
bgp 65001
peer 10.0.12.1 bfd enable
# ISP1 链路故障 → 50ms 内检测到 → 切换到 ISP2
4.2 联动 Track
# 跟踪上行接口状态
interface GigabitEthernet0/0/0
track 1 interface GigabitEthernet0/0/0 line-protocol
# 上行接口 Down 时降低 Local_Preference
route-policy ISP1_TRACK permit node 10
if-match tag 1
apply local-preference 50
bgp 65001
peer 10.0.12.1 route-policy ISP1_TRACK import
五、负载分担场景
5.1 等比例负载(ECMP)
如果两条链路带宽相同(比如都是 1Gbps),可以配置 BGP 负载分担:
bgp 65001
maximum load-balancing 2 # 两条等价路由做 ECMP
# 确保两条路径所有选路属性完全一致
route-policy LOAD_BALANCE permit node 10
apply local-preference 200
apply med 50
bgp 65001
peer 10.0.12.1 route-policy LOAD_BALANCE import
peer 10.0.23.2 route-policy LOAD_BALANCE import
5.2 非等比例负载(7:3 分流)
带宽不同时(如 ISP1=1Gbps,ISP2=300Mbps),可以通过 AS_PATH 实现不精确的比例:
# ISP2 方向延长 AS_PATH 使少量流量走 ISP2
route-policy TO_ISP2 permit node 10
apply as-path 65001 65001 additive
# ISP1 方向保持短 AS_PATH → 大部分流量走 ISP1
六、验证命令
# 查看 BGP 路由的优选结果
display bgp routing-table 0.0.0.0
# 查看选路详细信息
display bgp routing-table 0.0.0.0
# 查看各条路径的选路原因
display bgp routing-table 0.0.0.0 best
# 查看 BGP 邻居状态
display bgp peer
# 查看入站/出站方向的策略
display route-policy
七、总结
| 流量方向 | 控制属性 | 配置位置 | 推荐 |
|---|---|---|---|
| 出站 | Local_Preference | 入方向 Route-Policy | ✅ 最常用 |
| 入站 | MED | 出方向 Route-Policy | ⚠️ 依赖对端 |
| 入站 | AS_PATH | 出方向 Route-Policy | ✅ 可靠 |
| 故障切换 | BFD + Track | 接口 + BGP | ✅ 推荐 |
| 负载分担 | ECMP | BGP 全局 | ✅ 等带宽时 |
八、思考
- 如果要控制出站流量优先走指定出口,应该使用哪个属性?在什么方向配置?
- 为什么要用 AS_PATH 而不是 MED 来控制入站流量?MED 有什么局限性?
- 如何在主链路故障时自动切换到备用链路?推荐使用什么技术?
- 如何实现两条不同带宽链路的负载分担?
- 使用 BFD 后,BGP 的收敛时间可以从多少降低到多少?
下篇预告:第93篇《BGP 路由黑洞的产生与避免》——理解 BGP 路由黑洞的成因和解决方案。