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条。我给大家梳理一下,按优先级从高到低排列:
- 最高权重(Weight):Cisco私有属性,值越大越优先。本地有效,不传递给邻居。
- 最高本地优先级(LOCAL_PREF):值越大越优先。AS内部传递。
- 本地起源路由:通过network或aggregate注入的路由,优先级高于从邻居学来的路由。
- 最短AS_PATH:AS编号数量越少越优先。
- 最低起源类型:IGP(i)优于EGP(e),EGP优于Incomplete(?)。
- 最低MED:值越小越优先。
- EBGP优于IBGP:外部邻居学来的路由优先于内部邻居。
- 最近IGP邻居:到NEXT_HOP的IGP度量值越小越优先。
- …(后续规则较少用到)
为什么会这样设计?你想想看,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_PATH、LOCAL_PREF、MED这些属性。如果你现在还有点模糊,建议回头再看一遍——尤其是选路原则那13条,至少把前7条背下来。
我的建议: 学BGP不要死记硬背,多动手做实验。你可以在GNS3或EVE-NG上搭一个三台路由器的拓扑,配一个简单的EBGP邻居,然后看看show ip bgp的输出,对照着选路原则一条一条验证。实践出真知,这话在BGP上尤其适用。
公众号:蓝海资料掘金营,微信deep3321