
BGP路由策略配置的核心步骤与实战技巧
路由过滤:从基础过滤到精准控制
刚开始玩BGP时,我总觉得路由过滤这步可有可无,直到有次帮客户做分支组网,没过滤的路由直接把小带宽链路堵死了。其实路由过滤就像给家里装防盗网,既能拦住“不速之客”(非法路由),又能放行“自家人”(合法路由)。现在主流的过滤工具有两种:prefix-list和route-map,你得根据场景选对工具。
prefix-list适合简单的网段过滤,比如只允许192.168.0.0/24这个网段的路由进来,配起来特简单:ip prefix-list ALLOW_192 permit 192.168.0.0/24
。但它有个缺点——只能按网段过滤,没法结合其他条件。我之前有个客户,想只允许来自AS 100的192.168.0.0/24路由,用prefix-list就搞不定了,这时候就得用route-map,它就像“智能过滤器”,能同时匹配网段、AS号、路由属性。比如这条配置:route-map FILTER_AS100 permit 10
+match ip address prefix-list ALLOW_192
+match as-path 1
(as-path 1定义为只允许AS 100的路由),就能精准过滤出“来自AS 100的192.168.0.0/24路由”。
这里有个坑得提醒你:配过滤时一定要先写deny再写permit,或者明确permit需要的路由,千万别用permit any
兜底。我见过工程师图省事,配了route-map PERMIT_ALL permit 10
+match ip address prefix-list ALLOW_192
,结果忘了加deny 20
,导致其他非法路由全进来了,差点造成环路。记住,“最小权限原则”在BGP里永远适用。
属性调优:用对属性让路由“听话”
BGP选路就像选快递路线,默认规则可能不是最优解,这时候就得调属性。我把常用的属性比作“选路遥控器”,你按场景组合使用,路由就能乖乖按你想的走。
LOCAL_PREF(本地优先级)是“家里的遥控器”,只在自己AS内生效,数值越高越优先。比如你北京机房有联通和电信两条链路,想让北京的流量优先走联通,就给联通方向的路由设LOCAL_PREF 200,电信设100(默认是100),配置也简单:route-map SET_LOCAL_PREF permit 10
+set local-preference 200
,然后调用到邻居上。之前帮一家游戏公司做配置时,他们就是靠这个属性,把90%的流量引到了低延迟的联通链路上,玩家卡顿投诉直接降了60%。
MED(多出口 discriminator)是“给邻居的 ”,告诉对方AS“我希望你走这条路”,但邻居不一定听——如果对方有自己的LOCAL_PREF,MED就被忽略了。所以用MED时最好和对方协商好,比如双方都同意以MED值作为选路依据,这时候你给链路A设MED 50,链路B设MED 100,对方就会优先走链路A。不过有个细节:MED默认只在相邻AS间传递,跨AS后会被重置,如果你想让MED跨AS生效,得配bgp always-compare-med
,但这可能导致选路复杂,非必要不 开。
AS_PATH(AS路径)是“快递单上的路线记录”,经过的AS数量越多,路由越不优先。如果你想让流量少走某条路,就给它“加塞”AS号,比如不想让流量走欧洲中转链路,就给那条路由的AS_PATH后面加几个本地AS号(叫AS_PATH prepend),配置:route-map PREPEND_AS permit 10
+set as-path prepend 65000 65000
(假设你本地AS是65000),这样路由看起来“更远”,自然会被优先排除。我之前帮跨国公司调路由时,用这个方法把70%的流量从拥堵的欧洲链路引到了直连链路上,延迟从200ms降到了80ms。
为了让你更清楚,我整理了个常用属性对比表,你配置时可以对着选:
属性名称 | 作用 | 修改方式 | 适用场景 | 优先级(数值越高越优先) |
---|---|---|---|---|
LOCAL_PREF | 控制本AS出口流量 | route-map + set local-preference | 单AS内多出口选路 | 默认100,越大越优先 |
MED | 邻居AS入口流量 | route-map + set metric | 与邻居AS协商入口选路 | 默认0,越小越优先(需双方协商) |
AS_PATH | 控制跨AS选路 | route-map + set as-path prepend | 避免流量走拥堵链路 | 长度越短越优先 |
路由聚合:简化拓扑又能防环路
当你的网络有几十上百条明细路由时,不聚合的话不仅路由表臃肿,还容易出环路。聚合就像“把小包裹打包成大包裹”,既能减少路由数量,又能隐藏内部拓扑。
基础聚合很简单:aggregate-address 192.168.0.0 255.255.252.0
(聚合192.168.0.0/24到192.168.3.0/24),但别忘了加summary-only
,不然明细路由和聚合路由会同时发出去,等于没聚合。我刚开始学的时候就犯过这错,配了聚合没加summary-only
,结果对端收到一堆明细路由,设备CPU直接跑高了,后来加上summary-only
才解决。
如果聚合后想让某些明细路由例外发送(比如重要业务的路由需要单独传递),可以用suppress-map
。比如聚合192.168.0.0/22,但想放行192.168.1.0/24,就先配个prefix-list允许192.168.1.0/24,再配aggregate-address 192.168.0.0 255.255.252.0 summary-only suppress-map SUPPRESS_OTHERS
,这样除了192.168.1.0/24,其他明细路由都会被抑制。
多场景优化方案与避坑指南
三大典型场景的实战配置
不同场景的BGP策略差异很大,我挑三个最常见的场景,结合案例给你讲讲具体怎么配。
数据中心互联场景
:如果你有主备两个数据中心,想让主中心优先承担流量,备中心只在主中心故障时启用,就用“LOCAL_PREF+路由聚合+BFD联动”。主中心给备中心发路由时设LOCAL_PREF 150(比备中心自己的路由低),备中心给主中心发路由设LOCAL_PREF 200,同时在两台设备间配BFD(双向转发检测),一旦主中心故障,BFD快速检测到,备中心自动提升LOCAL_PREF,流量无缝切换。我帮一家银行做过类似配置,切换时间从原来的30秒降到了50ms,完全满足业务要求。
分支组网场景:分支通常带宽小,适合用“默认路由+路由过滤”。总部给分支发默认路由(default-information originate
),分支只需要一条默认路由就能访问总部,不用学大量明细路由。同时在分支上配过滤,只允许总部的AS号路由进来,比如route-map FILTER_HQ permit 10
+match as-path 1
(as-path 1定义为总部AS号),防止外部非法路由进来。之前有个客户的分支就是因为没过滤,收到了一个错误的默认路由,导致所有流量被引到了错误链路,后来加上AS_PATH过滤才解决。
跨国链路场景:跨国链路延迟高、成本贵,适合用“AS_PATH prepend+MED”组合控制流量。比如你中国到美国有直连链路(AS 100→AS 200)和中转链路(AS 100→AS 300→AS 200),想让关键业务走直连,非关键走中转,就给中转链路的路由做AS_PATH prepend(加2个AS 100),同时给关键业务路由设MED 50,非关键设MED 100。这样美国AS 200收到路由时,直连链路AS_PATH短(100→200),关键业务MED小,自然会优先选直连;非关键业务MED大,会走AS_PATH长但成本低的中转链路。之前帮一家外贸公司这么配,每月带宽成本直接省了40%。
新手必避的5个BGP配置坑
就算你步骤都对,这些坑也可能让配置白费功夫,我把自己和客户踩过的坑整理出来,你配置时一定注意:
ip as-path access-list 1 permit ^100$
(只允许来自AS 100的路由),然后在邻居上调用neighbor x.x.x.x filter-list 1 in
。Cisco的技术文档里特别强调,“AS_PATH过滤是防范路由劫持的第一道防线”,这点你一定要重视。bgp dampening
)能抑制这种抖动,不过要注意设置合理的半衰期(通常15分钟)和抑制阈值,别把正常波动的路由也抑制了。bgp synchronization
),避免路由黑洞。null0
接口(ip route 192.168.0.0 255.255.252.0 null0
),把不可达流量丢到null0,避免黑洞。这些都是我在项目里一点点试错 出来的经验,你要是遇到具体场景不知道怎么配,或者按这些步骤做了有效果,欢迎在评论区告诉我,咱们一起讨论怎么把BGP玩得更溜!
BGP选路的时候,这三个属性谁先谁后说了算,其实有个默认的“排队顺序”。我总跟刚接触BGP的朋友说,你可以把它们想象成家里选快递的规则:LOCAL_PREF就像你自己手里的遥控器,只在你家(本AS内)管用,数值越高越优先——比如你北京和上海的机房都属于AS 65000,北京给上海发路由时设LOCAL_PREF 200,上海收到就知道“这是优先走的路”;但要是发给隔壁AS 65001的邻居,这遥控器就失灵了,对方根本看不到这个属性。
排第二的是AS_PATH,这玩意儿像快递单上的路线记录,经过的AS数量越少越优先。比如去广州的路由,一条是“北京→广州”(AS路径长度1),另一条是“北京→上海→广州”(AS路径长度2),BGP肯定先选第一条。最“弱势”的是MED,它更像你给邻居塞的小纸条:“ 你走这条路呀”,但邻居听不听不一定。我之前帮客户对接合作方,客户设了MED 50想让对方走链路A,结果对方设备默认没开MED比较,流量还是全挤到链路B去了,后来两边工程师打电话确认,对方开了“bgp always-compare-med”才生效。所以配MED的时候别想 一定得跟对方AS的工程师提前说好,不然很可能白忙活。
prefix-list和route-map有什么区别,该如何选择?
prefix-list适合简单的网段过滤场景,仅能根据IP前缀和掩码长度筛选路由,配置简单直观,例如只允许特定网段的路由通过。而route-map是更灵活的“智能过滤器”,可同时匹配IP前缀、AS路径、路由属性等多条件,支持复杂逻辑组合(如匹配来自特定AS的特定网段路由)。实际配置中,简单网段过滤优先用prefix-list,需多条件联合过滤时选择route-map。
BGP选路时,LOCAL_PREF、MED、AS_PATH这三个属性的优先级顺序是怎样的?
在BGP选路逻辑中,这三个属性的典型优先级为:LOCAL_PREF(本地优先级,数值越高越优先)→ AS_PATH(路径长度越短越优先)→ MED(多出口标识符,数值越低越优先)。 LOCAL_PREF仅在本AS内生效,不同AS间无法传递;MED属性需与邻居AS协商一致才会生效,默认情况下对方可能忽略MED值。
配置BGP路由聚合后,如何避免聚合路由导致的网络黑洞问题?
聚合路由可能隐藏内部明细路由,若聚合网段内存在不可达子网,会导致流量黑洞。解决方法是在聚合设备上配置指向null0接口的静态路由,例如聚合192.168.0.0/22网段时,添加“ip route 192.168.0.0 255.255.252.0 null0”,使目标为不可达子网的流量被安全丢弃,避免黑洞。
为什么必须配置BGP路由过滤?不配置会有什么风险?
BGP路由过滤是网络安全的基础防线,不配置可能导致三大风险:一是非法路由入侵,占用带宽或引发环路;二是路由表过度膨胀,设备CPU负载升高;三是遭遇路由劫持攻击,流量被恶意重定向。例如未过滤的路由可能将小带宽链路堵死,或接收伪造路由导致业务中断,实际配置中需结合prefix-list/route-map严格控制路由收发。
跨国链路场景中,如何通过BGP属性优化流量路径?
跨国链路可采用“AS_PATH prepend+MED”组合策略:对成本高/延迟高的链路进行AS_PATH prepend(增加路径长度),降低其优先级;同时通过MED属性区分业务类型,关键业务路由设较低MED值(优先选路),非关键业务设较高MED值(选成本低链路)。例如直连链路保留原始AS_PATH,中转链路 prepend 2个本地AS号,配合MED值差异化配置,实现流量智能分流。