第一章:BGP基础回顾
各位同学,咱们今天聊聊BGP。说实话,BGP这东西,我刚开始接触的时候也觉得头大——那么多属性,那么多选路规则,简直像在看天书。但干网络安全这行十几年下来,我越来越觉得,BGP其实是互联网最精妙的设计之一。尤其是做DDoS防御,不懂BGP,你连门都摸不着。
1.1 BGP协议概述
BGP,全称是边界网关协议。说白了,它就是互联网的「交通警察」。你想啊,全球几万个自治系统(AS)之间怎么互通?总得有个规矩吧。BGP就是干这个的——它负责在AS之间交换路由信息,让数据包能找到正确的路径。
我个人习惯把BGP分成两类:
- EBGP(外部BGP):不同AS之间的BGP会话。比如你家运营商和阿里云之间,用的就是EBGP。
- IBGP(内部BGP):同一个AS内部的BGP会话。比如你公司核心路由器和汇聚路由器之间,跑的就是IBGP。
嗯,这里要注意:IBGP有个坑——它要求全互联(full mesh)。什么意思呢?就是AS内部所有运行BGP的路由器,两两之间都要建立邻居关系。我当年第一次搭IBGP网络时,就因为这个吃了亏。20台路由器,全互联要建190个邻居,配置写到手抽筋。后来才知道可以用路由反射器(Route Reflector)来简化。
核心要点:BGP是路径矢量协议,不是链路状态协议。它不关心链路带宽、延迟这些,只关心「怎么走」和「走不走」。
1.2 BGP路径属性
BGP之所以强大,很大程度上归功于它的路径属性。这些属性就像是路由的「标签」,告诉路由器这条路由的各种信息。我经常跟团队说:理解BGP属性,你就掌握了BGP的命门。
咱们挑几个最常用的来说:
| 属性名称 | 类型 | 作用 | 我的经验 |
|---|---|---|---|
| AS_PATH | 公认必遵 | 记录经过的AS列表 | 防环的核心机制,也是选路的重要依据 |
| NEXT_HOP | 公认必遵 | 下一跳IP地址 | 很多人忽略它,其实它决定了数据包的实际转发路径 |
| LOCAL_PREF | 公认自决 | 本地优先级(越高越优先) | 我常用它来做流量调度,比如让某个出口优先 |
| MED | 可选非传递 | 多出口区分(越低越优先) | 跟邻居协商用的,有点像「我这边这个出口更好,你走这边」 |
| Community | 可选传递 | 路由标记(团体属性) | 这个太实用了,做策略路由、流量过滤都靠它 |
我记得有一次,客户说他们的国际出口流量总是走错路。我一看配置,LOCAL_PREF设反了——本该高的设成了低,结果流量全绕到美国去了。改回来之后,延迟直接降了60%。你看,一个属性没搞对,影响就这么大。
避坑指南:我曾经在项目中遇到过AS_PATH prepend用过头的情况。为了做流量工程,我把AS_PATH重复了10次,结果导致路由被邻居丢弃——因为很多运营商会限制AS_PATH长度。一般重复3-4次就够了,别贪心。
1.3 BGP选路原则
好了,属性讲完了,咱们来看看BGP到底怎么选路。BGP有一套严格的选路规则,一共13条(不同厂商略有差异)。但说实话,日常工作中你真正用得上的,也就前面那几条。
我按优先级从高到低列一下:
- 权重(Weight):Cisco私有属性,越高越优先。本地有效,不传递。
- LOCAL_PREF:本地优先级,越高越优先。AS内传递。
- 本地生成路由:比如network命令注入的路由,优先于从邻居学来的。
- AS_PATH长度:越短越优先。注意,这里说的是AS个数,不是跳数。
- ORIGIN类型:IGP < EGP < INCOMPLETE。IGP最优先。
- MED:多出口区分,越低越优先。
- EBGP优于IBGP:从EBGP学来的路由优先于IBGP。
- 下一跳可达性:下一跳不可达,路由直接废掉。
你想想看,这13条规则其实就一个目的——在众多候选路由中,选出唯一的一条最优路径。我刚开始学的时候,总觉得记不住。后来发现一个窍门:你只要记住前5条,90%的场景都能搞定。
重要提醒:BGP选路是逐跳的。什么意思呢?就是每个路由器独立做决策,它只保证自己选的路是最优的,但不保证整条端到端路径最优。这一点跟IGP完全不同,很多人容易搞混。
举个例子吧。假设你有两条路径去往同一个目标:
- 路径A:AS_PATH = 100 200 300,LOCAL_PREF = 200
- 路径B:AS_PATH = 100 400,LOCAL_PREF = 150
按照选路规则,先比LOCAL_PREF。路径A的LOCAL_PREF是200,高于路径B的150。所以即使路径A的AS_PATH更长,BGP也会选路径A。这就是LOCAL_PREF的威力——它可以覆盖AS_PATH的决策。
我当年在IDC做运维时,就靠这个技巧做流量调度。比如把某个客户的流量引到带宽更大的出口,只需要调整LOCAL_PREF就行,不用动任何路由策略。
知识体系总览
下面这张图,是我自己画的BGP基础知识框架。你看一眼,就能把今天讲的内容串起来:
你看,BGP的三大块其实是环环相扣的。协议是基础,属性是工具,选路是目标。搞懂了这三者之间的关系,后面咱们讲DDoS防御的时候,你就能理解为什么BGP能用来做流量清洗、黑洞路由这些操作了。
好了,这一章就到这里。内容不多,但都是干货。下一章咱们聊聊BGP在DDoS防御中的角色——那才是真正有意思的部分。
公众号:蓝海资料掘金营,微信deep3321