HCIP 数通:BGP 路由策略进阶、Route-Policy、Community 属性实战
深入讲解 BGP 路由策略的精细化控制:Route-Policy 与 Filter-Policy 的区别和使用场景、AS-Path Filter 过滤路由、Prefix-List 精确匹配前缀、Community 属性标记路由与策略联动、BGP 路由反射器配置,通过企业双运营商出口策略的完整案例演示路由策略的生产应用。
BGP 的强大不只在于路由协议本身,更在于其丰富的路由策略能力。Route-Policy、AS-Path Filter、Prefix-List、Community 属性联合使用,可以精确控制哪些路由进入 BGP、哪些传给哪个邻居、如何修改路由属性。这是企业多运营商出口优化的核心技能。
路由策略工具对比
路由策略工具体系:
Filter-Policy(过滤策略):只能过滤(允许/拒绝),不能修改属性
filter-policy acl/prefix-list import/export
Route-Policy(路由策略):既能过滤,又能修改属性(if-match + apply)
route-policy NAME {permit|deny} node SEQ
if-match ... (匹配条件)
apply ... (执行动作)
适用场景:
只需要过滤(不需要改属性)→ Filter-Policy(简单)
需要修改属性(改 LP/MED/Community)→ Route-Policy
一、Prefix-List(前缀列表)
Prefix-List 比 ACL 更精确地匹配路由前缀(支持长度范围匹配)。
# 匹配精确前缀
ip ip-prefix EXACT-MATCH index 10 permit 10.100.0.0 16 # 精确匹配 10.100.0.0/16
# 匹配前缀及其所有子网(ge/le 指定长度范围)
ip ip-prefix SUBNET-RANGE index 10 permit 10.100.0.0 16 greater-equal 24 less-equal 32
# 匹配:10.100.x.x/24, /25, ..., /32(长度 24-32 的子网)
# 拒绝特定前缀,允许其他
ip ip-prefix DENY-ONE index 5 deny 192.168.1.0 24 # 拒绝这个
ip ip-prefix DENY-ONE index 10 permit 0.0.0.0 0 greater-equal 0 less-equal 32 # 允许其他所有
# 常用:只允许默认路由
ip ip-prefix DEFAULT-ONLY index 10 permit 0.0.0.0 0
# 查看
display ip ip-prefix EXACT-MATCH
二、AS-Path Filter
# AS-Path 使用正则表达式匹配
# 特殊字符:
# ^ = AS-Path 开头
# $ = AS-Path 结尾
# . = 任意字符
# * = 0 或多次
# + = 1 或多次
# _ = 分隔符(空格、逗号、^、$等)
# 只允许本地产生的路由(AS-Path 为空)
ip as-path-filter 1 permit ^$
# 只允许来自直接 EBGP 邻居(AS-Path 只有一个 AS)
ip as-path-filter 2 permit ^[0-9]+$
# 拒绝经过特定 AS 的路由(AS 200 是不信任的 AS)
ip as-path-filter 3 deny _200_
ip as-path-filter 3 permit .*
# 只接收来自 AS 100 或 AS 200 的路由
ip as-path-filter 4 permit _100_|_200_
# 查看 AS-Path Filter
display ip as-path-filter 1
# 使用 AS-Path Filter 过滤(在邻居配置中引用)
bgp 65000
peer 10.0.12.2 as-path-filter 3 import # 过滤特定 AS 的路由
三、Route-Policy(核心工具)
Route-Policy 由多个 node 组成,按顺序匹配,第一个匹配的 node 执行对应动作。
# 基本结构
route-policy POLICY_NAME {permit|deny} node 10
if-match ip-prefix MY_PREFIX # 匹配条件(可以多个 if-match,AND 关系)
apply local-preference 200 # 执行动作(修改属性)
route-policy POLICY_NAME permit node 20
# 没有 if-match = 匹配所有(兜底)
# 注意:
# permit node = 满足 if-match 条件的路由通过(可以用 apply 修改属性)
# deny node = 满足 if-match 条件的路由拒绝
# 最后一个没有 if-match 的 permit node = 放行所有剩余路由(常用兜底)
# 默认隐含最后一条 deny,没匹配到任何 node 的路由被拒绝
实战:双运营商入向策略
# 目标:
# 从电信接收的路由,LOCAL_PREF=200(高优先,主路由)
# 从联通接收的路由,LOCAL_PREF=100(低优先,备份路由)
# 两者都不接收默认路由
# 1. 创建 Prefix-List:拒绝默认路由
ip ip-prefix NO-DEFAULT index 5 deny 0.0.0.0 0 # 拒绝默认路由
ip ip-prefix NO-DEFAULT index 10 permit 0.0.0.0 0 ge 1 # 允许其他所有路由
# 2. 创建电信入向策略
route-policy TELECOM-IN permit node 10
if-match ip-prefix NO-DEFAULT # 不是默认路由
apply local-preference 200 # 打高 LP
# 没有匹配到的路由(包括默认路由)被拒绝(隐含 deny)
# 3. 创建联通入向策略
route-policy UNICOM-IN permit node 10
if-match ip-prefix NO-DEFAULT
apply local-preference 100 # 打低 LP
# 4. 应用策略
bgp 65000
peer 10.0.12.2 route-policy TELECOM-IN import # 电信对等体
peer 10.0.13.2 route-policy UNICOM-IN import # 联通对等体
实战:出向路由控制
# 目标:
# 只向电信通告我们自己的网段(10.100.0.0/16 及其子网)
# 不通告内部路由
# Prefix-List:只允许我们的网段
ip ip-prefix MY-PREFIXES index 10 permit 10.100.0.0 16 greater-equal 16 less-equal 24
# 出向 Route-Policy
route-policy OUT-TO-ISP permit node 10
if-match ip-prefix MY-PREFIXES
# 不需要 apply(不修改属性)
# deny 其他所有(隐含)
bgp 65000
peer 10.0.12.2 route-policy OUT-TO-ISP export # 只向电信通告我们的路由
四、Community 属性
Community 是 BGP 路由的“标签”,用于批量标记路由并在不同地点统一处理。
# Community 格式:
# 标准 Community:AA:NN(AS号:团体值)
# 知名 Community:
# internet(0:0):通告给所有邻居(默认)
# no-export(65535:65281):不通告给 EBGP 邻居
# no-advertise(65535:65282):不通告给任何邻居
# no-export-subconfed(65535:65283):不通告给联盟外邻居
# 场景:标记从电信学到的路由,在 RR 处统一处理
# 1. 给从电信来的路由打上 Community 标签
route-policy MARK-TELECOM permit node 10
apply community 65000:100 # 标记为电信路由
bgp 65000
peer 10.0.12.2 route-policy MARK-TELECOM import
# 2. 在路由反射器上,根据 Community 调整 LOCAL_PREF
ip community-filter 1 permit 65000:100 # 匹配 Community 65000:100 的路由
route-policy SET-LP-BY-COMMUNITY permit node 10
if-match community-filter 1 # 匹配电信标记
apply local-preference 200
route-policy SET-LP-BY-COMMUNITY permit node 20
# 其他路由不修改(pass through)
bgp 65000
peer 10.0.0.1 route-policy SET-LP-BY-COMMUNITY import # 在 RR Client 上处理
# 3. 确保 Community 属性被传递
bgp 65000
peer 10.0.0.1 advertise-community # 传递 Community 属性给 IBGP 邻居
ISP Community(接收方控制)
# 运营商通常提供 Community 值让客户控制路由通告
# 例如某运营商的 Community 服务:
# 100:666 → 不通告给该运营商的其他客户
# 100:1000 → 通告给中国电信
# 100:2000 → 通告给中国联通
# 通过 Community 控制从 ISP 接收到的路由在全球的传播范围
route-policy MY-PREFIX-COMMUNITY permit node 10
apply community 100:1000 100:2000 # 希望电信和联通都能到达我们
bgp 65000
peer 10.0.12.2 route-policy MY-PREFIX-COMMUNITY export
五、综合案例:企业双线 BGP 完整配置
# 拓扑:
# 企业 AS 65000:两个出口路由器 R1(接电信)和 R2(接联通)
# 业务网段:10.100.0.0/24
# === R1(电信出口)配置 ===
system-view
# Prefix-List
ip ip-prefix MY-PREFIXES index 10 permit 10.100.0.0 24
ip ip-prefix NO-DEFAULT index 5 deny 0.0.0.0 0
ip ip-prefix NO-DEFAULT index 10 permit 0.0.0.0 0 greater-equal 1 less-equal 32
# 入向:标记电信路由,打高 LOCAL_PREF
route-policy TELECOM-IN permit node 10
if-match ip-prefix NO-DEFAULT
apply local-preference 200
apply community 65000:100 additive # 追加 Community 标记
# 出向:只通告我们的路由,做 AS-Path Prepend(让回程优先走联通)
# 注:如果希望回程也走电信,就不做 Prepend
route-policy TELECOM-OUT permit node 10
if-match ip-prefix MY-PREFIXES
# 不做 Prepend,正常通告
bgp 65000
router-id 1.1.1.1
peer 10.0.12.2 as-number 100 # 电信 EBGP 邻居
peer 10.0.12.2 route-policy TELECOM-IN import
peer 10.0.12.2 route-policy TELECOM-OUT export
# R2(联通出口)IBGP 邻居
peer 2.2.2.2 as-number 65000
peer 2.2.2.2 connect-interface LoopBack0
peer 2.2.2.2 next-hop-local
peer 2.2.2.2 advertise-community # 传递 Community
# 宣告本地网段
network 10.100.0.0 255.255.255.0
quit
# === R2(联通出口)配置 ===(类似,LOCAL_PREF 设低)
route-policy UNICOM-IN permit node 10
if-match ip-prefix NO-DEFAULT
apply local-preference 100
apply community 65000:200 additive
# 出向:AS-Path Prepend(减少联通路由的吸引力,让更多流量走电信回来)
route-policy UNICOM-OUT permit node 10
if-match ip-prefix MY-PREFIXES
apply as-path 65000 additive # 追加一次 AS 号(AS-Path 变长,吸引力降低)
bgp 65000
peer 10.0.13.2 as-number 200
peer 10.0.13.2 route-policy UNICOM-IN import
peer 10.0.13.2 route-policy UNICOM-OUT export
network 10.100.0.0 255.255.255.0
quit
六、验证与排障
# 查看 BGP 路由的 Community 属性
display bgp routing-table 8.8.8.0 24 community
# Community: 65000:100
# 验证 Route-Policy 效果
display bgp peer 10.0.12.2 route-policy TELECOM-IN
# 模拟 Route-Policy(查看某路由经过策略后的结果)
display route-policy TELECOM-IN
# 重置 BGP 邻居(策略修改后刷新路由)
# 软重置(不断开邻居,只重新应用策略)
reset bgp 10.0.12.2 soft import # 重新处理入向路由
reset bgp 10.0.12.2 soft export # 重新通告出向路由
# 硬重置(断开邻居重建,慎用)
reset bgp 10.0.12.2
# 查看策略应用后的路由
display bgp routing-table peer 10.0.12.2 accepted-routes # 通过策略的路由
display bgp routing-table peer 10.0.12.2 rejected-routes # 被策略拒绝的路由
小结
BGP 路由策略的三层工具:Prefix-List 精确匹配路由前缀(比 ACL 更灵活,支持长度范围);AS-Path Filter 基于 AS 路径正则匹配(防止经过不信任的 AS);Route-Policy 是最强大的工具,if-match 做条件匹配,apply 修改路由属性。Community 是跨设备协同策略的粘合剂:给路由打上标签,在不同路由器上根据标签统一处理,避免在每个路由器重复配置相同的过滤逻辑。企业双线出口的黄金策略:LOCAL_PREF 控制出口(流量从哪条线出去)+ AS-Path Prepend 控制入口(流量从哪条线回来)。
