1. BGP选路实验概述
BGP(Border Gateway Protocol)作为互联网的核心路由协议,其选路机制直接决定了全球流量的走向。这次实验我将通过模拟环境,带你深入理解BGP的9个标准选路属性如何相互作用。不同于教科书上的理论说明,我们会用实际配置演示当多个路径属性同时存在时,路由器究竟如何做出最终决策。
实验环境采用EVE-NG模拟器搭建,包含4台Cisco路由器(AS100-AS400)。重点观察以下典型场景:
- AS_PATH属性长度对比(AS100→AS200→AS300 vs AS100→AS400→AS300)
- LOCAL_PREF值人为调整(设置150 vs 默认100)
- MED值差异(10 vs 20)
- 路由来源优先级(IGP vs EGP vs Incomplete)
2. 实验拓扑与基础配置
2.1 拓扑设计要点
实验采用双出口三角拓扑(见图1),关键设计考虑:
- AS100同时连接AS200和AS400,两者都通向AS300
- 在AS300中注入192.168.1.0/24测试路由
- 所有eBGP会话使用直连接口地址
- AS200-AS300间配置iBGP会话并启用next-hop-self
cisco复制! AS100核心配置示例
router bgp 100
neighbor 10.0.12.2 remote-as 200
neighbor 10.0.14.4 remote-as 400
!
address-family ipv4
network 172.16.1.0 mask 255.255.255.0
exit-address-family
2.2 必做的基础验证
在开始选路测试前,必须确认:
- 所有BGP会话状态为Established
bash复制show ip bgp summary
- 测试路由已出现在BGP表中
bash复制show ip bgp 192.168.1.0
- 关闭所有路由器的BGP同步功能(no synchronization)
3. 关键选路属性实验
3.1 AS_PATH长度对比
在AS200和AS400上分别设置不同的AS_PATH:
cisco复制! AS200配置
route-map SET_PATH permit 10
set as-path prepend 65001 65002
!
router bgp 200
neighbor 10.0.23.3 route-map SET_PATH out
实验结果验证:
- 在AS100上查看BGP表时,AS400路径会被优选(AS_PATH: 300 比 300 65001 65002更短)
- 使用
show ip bgp 192.168.1.0可见路径属性对比
3.2 LOCAL_PREF影响实验
在AS100上针对来自AS400的路由设置更高LOCAL_PREF:
cisco复制route-map SET_LOCAL_PREF permit 10
set local-preference 150
!
router bgp 100
neighbor 10.0.14.4 route-map SET_LOCAL_PREF in
关键现象:
- 即使AS_PATH更长,AS400路径也会被优先选择
- LOCAL_PREF的优先级高于AS_PATH长度(BGP选路规则第4步)
3.3 MED值对比实验
在AS300上针对不同邻居设置不同MED:
cisco复制! 针对AS200的出口路由
route-map SET_MED_10 permit 10
set metric 10
!
! 针对AS400的出口路由
route-map SET_MED_20 permit 10
set metric 20
!
router bgp 300
neighbor 10.0.23.2 route-map SET_MED_10 out
neighbor 10.0.34.4 route-map SET_MED_20 out
注意事项:
- MED比较只在同一AS的邻居间有效
- 默认不比较来自不同AS的MED值(需配置bgp always-compare-med)
4. 高级选路策略实现
4.1 基于Community的流量工程
在AS300上设置Community属性:
cisco复制route-map SET_COMMUNITY permit 10
set community 300:500 additive
!
router bgp 300
neighbor 10.0.34.4 send-community
neighbor 10.0.34.4 route-map SET_COMMUNITY out
在AS100上根据Community值设置LOCAL_PREF:
cisco复制ip community-list 1 permit 300:500
!
route-map COMMUNITY_ACTION permit 10
match community 1
set local-preference 200
!
router bgp 100
neighbor 10.0.14.4 route-map COMMUNITY_ACTION in
4.2 权重(Weight)属性实验
Cisco特有的权重属性(最高优先级):
cisco复制route-map SET_WEIGHT permit 10
set weight 1000
!
router bgp 100
neighbor 10.0.12.2 route-map SET_WEIGHT in
重要特性:
- 权重是本地有效属性,不会传递给其他路由器
- 优先级高于所有标准BGP属性(选路规则第0步)
5. 典型问题排查实录
5.1 路由未优选预期路径
检查步骤:
- 确认所有相关属性已正确设置
bash复制show ip bgp 192.168.1.0
- 检查路由策略的应用方向(in/out)
- 验证route-map的匹配条件
5.2 BGP路由振荡
常见原因:
- 路由策略中缺少
route-map NAME permit 20等放行规则 - MED值在多次更新中不断变化
- 未配置
bgp deterministic-med
解决方案:
cisco复制router bgp 100
bgp deterministic-med
bgp bestpath med missing-as-worst
5.3 路由未出现在RIB中
可能原因:
- 管理距离问题(BGP默认AD=20)
- 存在更优的IGP路由
- 启用了BGP同步但未满足条件
验证命令:
bash复制show ip route 192.168.1.0
debug ip routing
6. 生产环境应用建议
在实际网络部署中,建议采用以下最佳实践:
-
属性修改优先级:
- 优先使用LOCAL_PREF(AS内有效)
- 次选AS_PATH prepend(影响下游AS)
- 谨慎使用MED(可能被忽略)
-
策略一致性检查:
bash复制show route-map
show ip community-list
- 路由策略验证工具:
bash复制traceroute 192.168.1.1 source 172.16.1.1
ping 192.168.1.1 source 172.16.1.1
- 变更管理要点:
- 先使用
route-map TEST permit 10进行软清除
bash复制clear ip bgp 10.0.12.2 soft in
- 确认无误后再移除测试策略
