1. BGP选路实验概述
BGP(Border Gateway Protocol)作为互联网的核心路由协议,其选路策略直接影响着全球流量的走向。这次实验源于我在运营商网络优化工作中遇到的实际问题:当企业通过多ISP接入互联网时,如何精确控制不同流量的出口路径?传统静态路由无法满足动态调整需求,而BGP丰富的路径属性正好能解决这个痛点。
实验环境采用EVE-NG模拟器搭建,包含4台Cisco路由器(AS100、AS200、AS300和AS400),通过物理拓扑模拟多宿主网络场景。核心目标是通过调整LOCAL_PREF、AS_PATH、MED等属性,验证BGP的13条选路规则在实际环境中的应用效果。这个实验特别适合正在备考CCIE或者从事ISP网络运维的工程师,能帮助理解BGP决策过程的底层逻辑。
2. 实验环境搭建详解
2.1 基础拓扑构建
实验采用经典的"三角互联"拓扑(AS100-AS200-AS300相互全连接),AS400作为末梢网络双归到AS100和AS200。关键配置包括:
cisco复制! AS100核心配置示例
router bgp 100
neighbor 192.0.2.2 remote-as 200
neighbor 192.0.2.2 ebgp-multihop 2
neighbor 203.0.113.3 remote-as 300
address-family ipv4
network 198.51.100.0 mask 255.255.255.0
注意:ebgp-multihop必须配置在非直连的EBGP邻居间,默认TTL=1会导致会话无法建立
2.2 必备路由策略工具
实验涉及的关键路由工具:
- Route-map:用于条件匹配和属性修改
- Prefix-list:比ACL更高效的路由过滤工具
- AS-Path Access-list:针对BGP特有的AS路径过滤
- Community属性:实现跨AS的策略协同
典型的路由策略配置示例:
cisco复制route-map SET_LOCAL_PREF permit 10
match ip address prefix-list CUSTOMER_ROUTES
set local-preference 200
!
ip prefix-list CUSTOMER_ROUTES seq 5 permit 203.0.113.0/24
3. BGP选路规则验证
3.1 LOCAL_PREF优先级实验
在AS400上注入两条等价路由(分别通过AS100和AS200),通过调整LOCAL_PREF验证其作为BGP最高优先级属性的效果:
cisco复制! AS100上设置更高的LOCAL_PREF
route-map INBOUND permit 10
set local-preference 150
!
router bgp 100
neighbor 198.51.100.4 route-map INBOUND in
验证命令:
bash复制show ip bgp 203.0.113.0
输出应显示优选路径的LOCAL_PREF值为150,且>符号标记该路径为最优。
3.2 AS_PATH长度对比
人为在AS200的出向路由策略中添加虚拟AS号来延长AS_PATH:
cisco复制route-map PREPEND_AS_PATH permit 10
set as-path prepend 200 200
!
router bgp 200
neighbor 198.51.100.4 route-map PREPEND_AS_PATH out
此时AS400的BGP表应显示通过AS100的路径更优(AS_PATH: 100 比 200 200 200更短)
3.3 MED属性应用
在AS300上针对不同邻居设置不同的MED值:
cisco复制route-map SET_MED_AS100 permit 10
set metric 50
!
route-map SET_MED_AS200 permit 10
set metric 100
!
router bgp 300
neighbor 192.0.2.1 route-map SET_MED_AS100 out
neighbor 198.51.100.2 route-map SET_MED_AS200 out
关键点:MED只在相邻AS间比较,且需要双方配置"bgp always-compare-med"才能强制比较
4. 高级选路技巧
4.1 基于Community的路径控制
实现AS400根据Community标签选择不同出口:
cisco复制! AS100配置
route-map SET_COMM permit 10
set community 100:200 additive
!
router bgp 100
neighbor 198.51.100.4 send-community
neighbor 198.51.100.4 route-map SET_COMM out
! AS400配置
ip community-list 1 permit 100:200
route-map COMM_FILTER permit 10
match community 1
set local-preference 300
4.2 权重(Weight)属性应用
Cisco特有的权重属性(仅本地有效):
cisco复制router bgp 400
neighbor 198.51.100.1 weight 500
neighbor 198.51.100.2 weight 300
权重值越高优先级越高,且配置立即生效无需重置BGP会话。
5. 典型问题排查实录
5.1 路由通告失败排查
现象:AS400无法学习到AS300的路由
排查步骤:
- 检查AS300的network语句是否正确
- 验证AS100-AS300的BGP会话状态(show ip bgp summary)
- 检查AS100是否配置了路由过滤(show ip bgp neighbor x.x.x.x advertised-routes)
- 确认AS400的BGP表是否有残留过滤(debug bgp ipv4 unicast updates)
5.2 选路不符合预期
当MED策略未生效时:
- 确认两端路由器是否配置"bgp bestpath med-confederation"
- 检查路由的起源代码(i > e > ?)
- 验证是否启用"bgp deterministic-med"
5.3 BGP收敛问题
慢收敛优化方案:
cisco复制router bgp 100
bgp graceful-restart
bgp log-neighbor-changes
timers bgp 30 90 ← 调整Keepalive/Hold时间
6. 生产环境应用建议
在实际多宿主网络部署时,建议采用以下最佳实践:
-
LOCAL_PREF分级策略:
- 核心客户路由:LOCAL_PREF=300
- 普通客户路由:LOCAL_PREF=200
- 穿透流量:LOCAL_PREF=50
-
AS_PATH防御配置:
cisco复制ip as-path access-list 1 deny _700$ ← 过滤特定AS
ip as-path access-list 1 permit .*
-
MED使用禁忌:
- 避免在不同AS间使用MED(可能被忽略)
- 同一AS内不同出口点使用MED时需保持单位一致
-
路由阻尼配置:
cisco复制bgp dampening route-map DAMPENING
!
route-map DAMPENING permit 10
set dampening 15 750 3000 60
这个实验最让我印象深刻的是BGP决策过程中各属性的精确权重计算。在实际运维中,我们曾遇到因漏配"bgp bestpath as-path ignore"导致国际流量绕行的故障。建议每次策略变更后,务必使用"show ip bgp x.x.x.x"验证所有路径属性是否符合预期。
