1. BGP基础回顾:BGP概述、BGP路径属性、BGP选路原则

各位同学,咱们今天正式开始BGP路由过滤的实战之旅。不过在动手配置之前,我得先带大家把地基夯实。BGP这东西,说白了就是互联网的「交通调度中心」。你想想看,全球几十万个自治系统(AS)之间怎么交换路由信息?靠的就是BGP。

我个人习惯,每次讲BGP之前都会先问自己三个问题:它是什么?它怎么描述路由?它怎么选路?搞懂这三个,后面的过滤配置才能得心应手。

1.1 BGP概述:边界网关协议到底在干什么?

BGP的全称是Border Gateway Protocol,边界网关协议。它工作在AS之间,属于EGP(外部网关协议)的一种。和OSPF、IS-IS这些IGP不同,BGP不关心你内部网络怎么跑,它只关心「你有哪些网段可以给我用」。

我记得刚入行那会儿,有个老工程师跟我说过一句话:「BGP不是用来发现路由的,而是用来传递路由的。」这句话我一直记到现在。OSPF能自动发现邻居、自动计算最短路径,但BGP不行。BGP的邻居需要你手动指定,路由需要你手动宣告或通过策略引入。

核心要点:

  • BGP基于TCP 179端口,可靠性由TCP保证
  • BGP是路径矢量协议,不是链路状态协议
  • BGP携带大量路径属性,用于选路和策略控制
  • BGP支持CIDR(无类域间路由),可以聚合路由

这里有个坑,我当年踩过。BGP的邻居关系建立后,默认情况下不会自动交换路由。你必须用network命令或者redistribute命令把路由注入到BGP表中。很多新手以为配了邻居就能通,结果发现路由表空空如也——嗯,这就是没理解BGP的「被动」特性。

1.2 BGP路径属性:路由的「身份证」和「简历」

BGP之所以强大,很大程度上归功于它的路径属性。你可以把每条BGP路由想象成一份求职简历,路径属性就是简历上的各项信息:年龄、学历、工作经验、期望薪资……BGP选路时,就是根据这些属性来「择优录取」。

路径属性分为四大类:

类别 属性名称 说明
公认必遵 AS_PATH、NEXT_HOP、ORIGIN 所有BGP路由必须携带,缺一不可
公认任意 LOCAL_PREF、ATOMIC_AGGREGATE 所有BGP路由器都能识别,但可以不携带
可选传递 COMMUNITY、AGGREGATOR 路由器可以不识别,但必须传递给邻居
可选非传递 MED、ORIGINATOR_ID、CLUSTER_LIST 路由器可以不识别,且不传递给邻居

这里面,我个人最常用的是AS_PATH、LOCAL_PREF和MED。为什么?因为这三个属性直接决定了选路结果。

  • AS_PATH:记录路由经过的AS编号列表。路径越短,优先级越高。我在项目中遇到过客户想控制流量走特定出口,就是通过人为增加AS_PATH长度来实现的。
  • LOCAL_PREF:本地优先级,只在AS内部传递。值越大越优先。这是控制出站流量的首选工具。
  • MED:多出口区分符,用于告诉邻居AS「你从我这走哪条链路进来更好」。值越小越优先。

小技巧: 如果你想让某个邻居优先使用某条链路,调整LOCAL_PREF比调整MED更靠谱。因为LOCAL_PREF是公认任意属性,所有厂商都支持,而MED在某些场景下可能被忽略。

1.3 BGP选路原则:13条规则,但真正常用的就前几条

BGP的选路原则,官方文档里列了13条。但说实话,日常工作中你真正用到的可能就前5条。我给大家梳理一下,按优先级从高到低排列:

  1. 最高权重(Weight):Cisco私有属性,值越大越优先。本地有效,不传递给邻居。
  2. 最高本地优先级(LOCAL_PREF):值越大越优先。AS内部传递。
  3. 本地起源路由:通过network或aggregate注入的路由,优先级高于从邻居学来的路由。
  4. 最短AS_PATH:AS编号数量越少越优先。
  5. 最低起源类型:IGP(i)优于EGP(e),EGP优于Incomplete(?)。
  6. 最低MED:值越小越优先。
  7. EBGP优于IBGP:外部邻居学来的路由优先于内部邻居。
  8. 最近IGP邻居:到NEXT_HOP的IGP度量值越小越优先。
  9. …(后续规则较少用到)

为什么会这样设计?你想想看,BGP选路的核心逻辑就是「先看本地策略,再看路径质量」。Weight和LOCAL_PREF是给你做策略用的,AS_PATH和MED才是反映网络拓扑质量的。

注意: 选路原则是逐条比较的。一旦在某一条规则上分出胜负,后面的规则就不再执行。比如两条路由,一条LOCAL_PREF是200,另一条是100,那直接选200的那条,后面的AS_PATH、MED都不用看了。

我曾经在一个跨国项目中遇到过选路问题。客户有两条国际链路,一条走太平洋,一条走大西洋。正常情况下,太平洋链路延迟更低,但BGP选出来的却是大西洋链路。查了半天,发现是AS_PATH长度的问题——太平洋链路虽然延迟低,但经过了3个AS,而大西洋链路只经过了2个AS。最后我通过调整LOCAL_PREF,让太平洋链路优先,问题解决。

1.4 知识体系总览

下面这张图,是我自己总结的BGP基础知识框架。你可以把它当作本章节的「地图」,后面讲过滤配置时,我们会反复用到这些概念。

BGP基础知识体系 BGP概述 • 边界网关协议 • AS间路由交换 • 基于TCP 179端口 • 路径矢量协议 • 支持CIDR聚合 • 手动建立邻居 • 策略驱动选路 路径属性 • 公认必遵 AS_PATH / NEXT_HOP / ORIGIN • 公认任意 LOCAL_PREF / ATOMIC_AGGREGATE • 可选传递 COMMUNITY / AGGREGATOR • 可选非传递 MED / ORIGINATOR_ID 选路原则 ① 最高Weight ② 最高LOCAL_PREF ③ 本地起源路由 ④ 最短AS_PATH ⑤ 最低起源类型 ⑥ 最低MED ⑦ EBGP优于IBGP 三者关系:BGP概述 → 路径属性(描述路由) → 选路原则(决策路由)

这张图把BGP基础分成了三个模块。左边是协议本身的特点,中间是描述路由的属性,右边是选路的决策逻辑。后面的路由过滤配置,本质上就是「修改或匹配这些属性,从而影响选路结果」。

好了,BGP基础回顾就到这里。这些内容虽然基础,但非常重要。后面讲过滤策略时,我们会反复用到AS_PATH、LOCAL_PREF、MED这些属性。如果你现在还有点模糊,建议回头再看一遍——尤其是选路原则那13条,至少把前7条背下来。

我的建议: 学BGP不要死记硬背,多动手做实验。你可以在GNS3或EVE-NG上搭一个三台路由器的拓扑,配一个简单的EBGP邻居,然后看看show ip bgp的输出,对照着选路原则一条一条验证。实践出真知,这话在BGP上尤其适用。


公众号:蓝海资料掘金营,微信deep3321