1. BGP基础回顾:BGP协议概述、BGP路径属性、BGP选路原则
1.1 BGP协议概述:互联网的“交通指挥员”
BGP,全称边界网关协议,是互联网的核心路由协议。说白了,它就是不同自治系统(AS)之间交换路由信息的“官方语言”。
我刚开始接触BGP时,觉得它就是个“大号的路由协议”。后来在项目中踩过坑才明白——它跟OSPF、IS-IS这些内部网关协议完全是两码事。BGP的设计哲学是“策略驱动”,而不是“最短路径优先”。
为什么会这样?因为互联网是由成千上万个独立运营的网络组成的。每个网络都有自己的商业策略和流量偏好。BGP给了你选择权,而不是替你决定。
BGP有几个关键特征,我列出来给你看:
- 路径矢量协议:它不计算链路开销,而是记录整条路径上的AS编号
- 基于TCP 179端口:可靠性由TCP保证,BGP自己不用操心重传
- 增量更新:只发送变化的路由,不像OSPF那样定期泛洪
- 丰富的路径属性:这是BGP最强大的地方,也是我们做安全防御的切入点
核心要点:BGP不是用来找“最近的路”,而是用来找“最合适的路”。这个“合适”完全由策略决定。
1.2 BGP路径属性:路由的“身份证”和“通行证”
BGP路径属性,就是附着在路由条目上的一组标签。它们决定了这条路由的“出身”、“可信度”和“优先级”。
我个人习惯把属性分成四类:
| 类别 | 属性名称 | 作用 |
|---|---|---|
| 公认必遵 | AS_PATH、Next_Hop、Origin | 所有BGP路由必须携带 |
| 公认任意 | Local_Preference、Atomic_Aggregate | 可选携带,所有设备都认识 |
| 可选传递 | Community、Aggregator | 可以跨AS传递,设备不认识就跳过 |
| 可选非传递 | MED、Cluster_List、Originator_ID | 只在单个AS内有效 |
嗯,这里要注意——AS_PATH 是防环的关键,也是路径篡改攻击的主要目标。我在项目中遇到过有人故意缩短AS_PATH长度来“抢路”,这就是典型的路径篡改。
还有 Local_Preference,这是AS内部选路的“最高权重”。你想想看,如果攻击者能篡改这个属性,那整个AS的流量都可能被引向恶意路径。
避坑指南:我曾经在排查一次路由黑洞时发现,上游运营商悄悄修改了我们的Community属性,导致路由被错误地过滤掉了。所以,属性验证一定要做。
1.3 BGP选路原则:13条规则的“淘汰赛”
BGP的选路原则,说白了就是一场“淘汰赛”。当路由器从多个邻居收到同一条前缀的路由时,它会按顺序比较这些属性,直到选出唯一胜出者。
我整理了一份精简版的选路顺序,你记牢这前几条就够了:
- 最高权重(Weight):Cisco私有,本地有效,数值越大越优先
- 最高Local_Preference:AS内统一,默认100
- 本地起源路由:路由器自己注入的路由优先
- 最短AS_PATH:路径越短越优先——这是攻击者最爱动手脚的地方
- 最低Origin类型:IGP < EGP < Incomplete
- 最低MED:用于AS间选路,类似“度量值”
剩下的7条我就不列了,因为在实际防御中,前6条已经覆盖了90%的攻击场景。
你想想看,如果攻击者伪造了一条AS_PATH更短、Local_Preference更高的路由,你的路由器会毫不犹豫地选它。这就是BGP路径篡改的底层逻辑。
警告:BGP选路原则是“顺序比较”,一旦某条规则分出胜负,后面的规则就不再执行。这意味着只要攻击者能控制前几条属性,就能完全掌控选路结果。
1.4 知识体系框架图
下面这张图是我手绘的BGP基础知识结构,帮你理清这三块内容的关系:
1.5 小结:为什么这些基础对防御至关重要?
你可能觉得这些基础内容太简单了。但我跟你说,90%的BGP安全事件,根源都在于对基础属性的理解不到位。
举个例子:我曾经处理过一个案例,某运营商的路由被劫持了整整6个小时。原因是什么?攻击者只是伪造了一个AS_PATH更短的路由,然后所有流量就乖乖地拐进了他的网络。
所以,理解BGP的路径属性和选路原则,不是纸上谈兵。它是你构建防御体系的“地基”。地基不稳,上面盖再高的楼也是白搭。
一句话总结:BGP选路就是一场“属性竞赛”,谁控制了属性,谁就控制了流量。我们的防御目标,就是确保这场竞赛的公平性。