BGP路由策略的核心答案是:通过配置前缀列表、AS路径过滤、团体属性和route-policy,精准控制路由的发布、接收与优选,让网络流量按你设计的路径流动。
很多网络工程师学BGP时都有个共同感受:邻居建起来了,路由也学到了,但流量走向总是不听话,要么该走主链路的走了备链路,要么不该通告给对端的路由全发出去了,问题不在于BGP本身,而在于你没有掌握路由策略这把“闸门”,下面这套从基础到进阶的配置方法,就是帮你把BGP路由的“进出权”和“优先级”牢牢抓在手里。
BGP路由策略怎么配置:基础思路与核心命令
BGP路由策略的配置本质只有三件事:匹配什么、执行什么动作、应用在哪个方向,别被route-policy的复杂语法吓到,拆开了看就三块积木。
先分清你要控制的三个方向
BGP有三大路由方向,配置前必须想清楚:
- 入方向(inbound):控制从邻居学到哪些路由,以及这些路由的属性如何被修改
- 出方向(outbound):控制向邻居发布哪些路由,以及发布时携带什么属性
- 本地优选:不涉及邻居,只影响本设备从多条BGP路径中选择最佳路径
很多人把策略配错地方,就是因为没分清楚“我要控制的是别人发给我的,还是我发给别人的”,比如你想让上游不接收你的默认路由,那就在出方向过滤;你想让自己不学习某些明细路由,就在入方向过滤。
基础配置三步走:匹配条件、设置动作、应用策略
以华为设备为例,标准套路如下:
- 定义匹配条件:用ACL、前缀列表(ip prefix-list)、AS路径过滤器(as-path-filter)或团体属性过滤器(community-filter)来“圈定”目标路由
- 创建route-policy:在policy中设置动作,比如允许(permit)或拒绝(deny),以及修改MED、Local-Pref、AS-Path、Community等属性
- 在BGP视图下应用:通过peer命令把策略绑定到指定邻居的指定方向
一个最简单的出方向过滤示例:
ip ip-prefix deny-100 index 10 deny 100.64.0.0 16 greater-equal 24
ip ip-prefix deny-100 index 20 permit 0.0.0.0 0 less-equal 32
route-policy filter-out permit node 10
if-match ip-prefix deny-100
deny
route-policy filter-out permit node 20
permit
bgp 65001
peer 10.0.0.1 route-policy filter-out export
这段配置的意思很直白:凡是匹配到100.64.0.0/16里面掩码大于等于24的路由,全部拒绝发布;其他路由正常放行,注意route-policy末尾要有放行规则,否则容易把所有路由全部过滤掉。
BGP路由策略与路由过滤区别:一张表讲透
这是被问得最多的问题之一,很多朋友觉得BGP路由策略就是路由过滤,其实两者是包含关系。
| 对比项 | BGP路由策略 | 路由过滤 |
|---|---|---|
| 作用范围 | 过滤是其中一种动作,还可修改属性、设置优先级 | 只做“放行/拒绝”的二元判断 |
| 表现形式 | route-policy、as-path-filter、community-filter的组合 | 前缀列表、ACL、关键词过滤(suppress-map等) |
| 典型场景 | 选路控制、流量调度、路由标记 | 安全隔离、减少路由表条目 |
| 配置复杂度 | 较高,可多节点多动作 | 较低,通常是单一匹配条件 |
行业共识认为,路由过滤只是路由策略的一个子集,当你只想“拦截”某些路由时,用前缀列表直接过滤更高效;当你还需要“改路”时,才需要上route-policy,搞清这个区别,配置时就不会大炮打蚊子。
BGP路由策略配置实例:从过滤到选路
理论讲太多没感觉,直接上三个高频场景的配置实例。
基于前缀列表过滤非必要明细路由
场景:你作为企业出口,从运营商学到大量BGP互联网路由,其中包含很多不常用的子网,你想只保留默认路由加少量重要网段。
配置思路是在入方向用前缀列表匹配并拒绝不需要的明细路由,放行默认路由,注意BGP默认不会自动下发默认路由,需要通过neighbor default-route-advertise或手动network一条0.0.0.0/0。
用AS路径正则表达式控制第三方路由
场景:你的设备通过两个上游分别接入不同运营商,你希望来自AS 65001直接邻居的路由优先,而通过其他AS绕路过来的路由作为备份。
这时可以定义as-path-filter,用正则表达式匹配路径长度或特定AS号,然后通过route-policy设置Local-Pref值,Local-Pref越高,路由优先级越高。
ip as-path-filter 10 permit ^65001$
route-policy prefer-direct permit node 10
if-match as-path-filter 10
apply local-preference 200
route-policy prefer-direct permit node 20
apply local-preference 100
这样来自AS 65001的路由本地优先级设为200,其他路由保持100,主备切换自然形成。
通过团队属性实现跨域路由标记
场景:你管理多分支机构BGP网络,希望给不同来源路由打上标签,方便下游设备统一选路。
配置团体属性分两步:先在路由发布时“打标”,再在接收端“按标选路”。
route-policy set-comm permit node 10
if-match interface GigabitEthernet0/0/0
apply community 65001:100
bgp 65001
peer 10.0.0.2 route-policy set-comm export
peer 10.0.0.2 advertise-community
接收端配置时用community-filter匹配对应团体值,然后修改Local-Pref,团体属性是BGP进阶控制的重要工具,尤其适合多级AS架构。
BGP路由策略进阶:属性操控与多厂商适配
掌握了基础配置后,进阶方向就是把BGP选路属性玩熟,同时注意不同厂商命令习惯的差异。
影响BGP选路的属性优先级
BGP选路规则很长,但实际用到最多的几个属性,按优先级从高到低:
- Preferred-Value(华为)/ Weight(思科):本地私有,默认0,越大越优先
- Local-Preference:本地AS内传播,默认100,越大越优先
- AS路径长度:越短越优先
- MED:来自邻居的度量值,越小越优先
- 默认路由优先级:EBGP学到的路由优于IBGP
进阶配置时,优先修改Local-Pref来影响本AS内所有设备,而MED只对相邻AS生效,如果你需要做精细的入方向负载均衡,修改MED比修改Local-Pref更合适。
多厂商命令对照:华为与思科
| 功能 | 华为 | 思科 |
|---|---|---|
| 定义前缀列表 | ip ip-prefix | ip prefix-list |
| 定义AS路径过滤器 | ip as-path-filter | ip as-path access-list |
| 定义路由策略 | route-policy | route-map |
| 应用策略 | peer x.x.x.x route-policy | neighbor x.x.x.x route-map |
| 修改Local-Pref | apply local-preference | set local-preference |
| 修改MED | apply cost | set metric |
命令名称不同,但逻辑完全一致,建议先用华为设备掌握route-policy语法,再对照思科route-map理解,很快就能触类旁通。
常见配置陷阱与排查思路
配置BGP策略时,几个坑最容易踩:
- 没有放行默认规则:route-policy/route-map末尾没写permit,导致所有路由被隐式拒绝
- 匹配顺序错误:配置策略时从上往下匹配,先匹配的先生效,通配规则要放在后面
- 忘记通告团体属性:打标后没在peer下配置advertise-community,导致对端收不到团体值
- 方向搞反:把入方向策略写成了出方向,结果该过滤的没过滤,不该过滤的全没了
排查时最有效的方法是用display bgp routing-table查看路由是否被策略命中,再用display route-policy检查策略节点匹配情况,据统计,相当一部分BGP故障都是因为策略节点没有逐条验证导致。
常见问题解答:BGP路由策略配置方法相关
BGP路由策略配置命令有哪些核心关键词?
核心命令围绕route-policy、if-match、apply、peer展开,if-match负责匹配条件(前缀、AS路径、团体、接口),apply负责执行动作(修改属性、允许或拒绝),peer将策略绑定到邻居,任何BGP路由策略都跳不出这四个关键词的组合。
BGP路由策略怎么配置才能既过滤又改属性?
在同一个route-policy中分多节点实现,节点10用if-match匹配要过滤的路由,设置为deny;节点20匹配需要改属性的路由,用apply修改;节点30放行其他路由,多个节点依次匹配,实现“过滤+修改”一步到位。
为什么配置了BGP路由策略后邻居路由仍然不变?
先检查策略应用方向是否匹配目标,再看route-policy中是否包含隐式放行规则,最后使用refresh bgp all import或软重置命令使策略生效,BGP策略配置后不会实时生效,需要手动刷新或重置会话。
BGP路由策略配置方法并没有想象中复杂,核心就是先匹配、再动作、后应用,入门时从过滤开始,进阶时学会操控属性和多策略组合,最后通过实例积累排查经验,无论网络规模如何,这套方法论都能让你应对绝大部分BGP路由控制场景,把上面三个实例敲一遍,你就能掌握BGP路由策略的完整配置链路。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/792494.html


