BGP 状态机
idle
idle 是 BGP 连接的第一个状态,相当于 OSPF 的 “down"
处于 idle 状态的原因如下:
- 没有去往邻居地址的路由,无法发起 TCP 三次握手、也无法完成 TCP 的三次握手;
- 邻居发起的 TCP 握手,被本端拒绝,拒绝的原因是邻居发起 TCP 报文的源地址,不是本端指定的邻居地址。
Connect
在 Connect 状态,BGP 发起第一个 TCP 连接,如果连接重试计时器 (Connect - Retry)超时,就重新发起 TCP 连接,并继续保持在 Connect 状态,如果 TCP 连接成功,就转入 OpenSent 状态,如果 TCP 连接失败,就转入 Active 状态。
处于 Connect 的原因如下:
- 当发起 TCP 连接路电器,无法收到邻居 TCP 回应报文时,就会卡在 conect 状态,井且 5 秒后重传一次 TCP 连接请求,再等待 32 秒左右,重新再次发起 TCP 连接请求,通常是由于发起端存在邻居地址的路由,并能主动发送 TCP3 次握手,但无法从邻居接收第二次握手的报文;
- 通常是由于邻居缺乏到对端的路由(即无法回包),或者是应答报文中途被丢弃。
Active
当发送 TCP 连接的路由器,能收到相应邻居的应答报文,代表两台台路由器能正常交互报文,但是依然无法建立起 TCP 的三次握手,将会进入到 Active。
处于 Active 的原因如下
- 邻居之间地址可达,但建立 BGP 邻居的源目地址不匹配导致;
- 本端主动发起 TCP 连接的源地址和对端指定的邻居地址不匹配,导致本端处于 active,对端处于 idle 状态。
比如双方计划使用 Loopback 0 接口建立 BGP 邻居,但有一方没有配置
peer x.x.x.x connect-interface loopback 0
导致本地 peer x.x.x.x 和 对端 peer y.y.y.y 指定的地址不匹配。
Establish
邻居建立成功。
BGP 邻居关系无法建立的原因
- 底层 IGP 网络不通;
- 接口是否调用了 ACL 过滤了 TCP 的 179 端口;
- 邻居的 Router ID 冲突;
- 配置的邻居的 AS 号错误;
- 用 Loopback 建立邻居时没有配置 peer connect-interface;
- 用 Loopback 口建立 EBGP 邻居时未配置 peer ebgp-mex-hop;
- peer valid-t-hops 配置错误;
- 对端发送的路由数量是否超过 peer route-limit 命令设定的值;
- 对端闻置了 peer ignore;
- 两端的地址族不匹配。
BGP 公认必遵属性
BGP 公认必遵属性共有三个,分别是:Next-hop、Origin、As-path。
一、Next-hop
华为 BGP 路由下一跳特点:
- 默认情况下传给 EBGP 邻居的 BGP 路由的下一跳设置为自身向这个 EBGP 邻居发送 BGP 报文的源地址;
- 默认情况下从 EBGP 邻居得到的 BGP 路由再传给 IBGP 邻居时,此 BGP 路由的下一跳默认不变;
- 默认情况下凡是自身起源的 BGP 路由在传给任何 BGP 邻居时,总是把此路由的下一跳设置为向 BGP 邻居发送 BGP 报文的源地址。
在 IBGP、EBGP 邻居之间的 import 或者 export 方向都可以对 BGP 下一跳做修改,但要保证修改后的下一跳路由可达,修改方式如下:
route-policy test permit node 10apply ip-address next-hop x.x.x.x [此处 x 为修改的下一跳地址]
bgp 100
peer x.x.x.x route-policy test export/import[此处 x 为邻居地址]
二、Origin
Origin 属性用来定义路径信息的来源,只要不被修改,该属性就不会自己改变,如何描述该路由是怎么成为 BGP 路由的?
Origin 一共有三种类型,分别是i (IGP) 、?(Incomplete)、e(EGP)
- “i”:通过network方式生成的 BGP 路由;
- “?”:将其他协议的路由通过import-route生成的 BGP 路由;
- “e”:从EGP 协议中引入到 BGP 协议中的路由,EGP 协议是 BGP 的前身,目前已经淘汰。
Origin 属性优先级为:**i > e > ?**,可用作路径优选。
修改 Origin 属性的方法:
- 对自身产生BGP 路由时做 origin 的修改;
- 对发送给 BGP 邻居的路由做 origin 的修改;
- 对从 BGP 邻居接收到的 BGP 路由做修改。
可通过路由属性进行修改,可参考以下配置:
ip ip-prefix 1 index 10 permit 192.168.1.0 24
假设 192.168.1.0/24 该路由是通过 import 方式生成的 BGP 路由
#
route-policy test permit node10
if-match ip-prefix 1
apply origin igp
#
bgp 100
peer x.x.x.x route-policy test export/import
三、AS-path
AS-Path 用于记录路由器在网络传输路径中所经过的 AS 编号的列表,例如,如果存在 AS 1、AS 2 和 AS 3 三个区域,且 AS 1 有一条路由需要传递到 AS 3,那么这条路由在传递的过程中,其 AS-path 会依次记录下 AS2、AS1 的区域号。
AS-path 的防环机制:
1、当 BGP 路由传递给 EBGP 邻居时,会将自身的的 AS 号添加到 AS-path 属性的前面;
2、当从 EBG 邻居收到路由时,对 AS-path 属性做检测,如果 AS-path 中存在自号的 AS 号, 则丢弃该路由;
3、IBGP 邻居之同不做 AS-path 属性的检测。
AS-path 选路规则:
经过的 AS-path越少,路径越优
AS-path 属性修改:
apply as-path none overwrite
,清空 AS-PATH 属性对发送和接收的 BGP 路由apply as-path 100 200 additive
,对发送 / 接收的 BGP 路由添加 AS-PATH 属性。apply as-path 100 200 overwrite
,对发送 / 接收的 BGP 路由的 AS-PATH 做替换。
route-policy test permit node 10applyas-path none overwrite
BGP 公认任意属性
BGP 公认任意属性有两个,分别是:Local-preference 和 MED。
一、Local-preference
特点
- 公认任意; 2.只传递给 IBGP 邻居,即在 AS 内部 / 联盟内部传递;
- 可以在 EBGP 邻居传来的路由做 Local-preference 修改,也可以在 IBGP 邻居之间接收和发送路由时修改;
- 默认值 100,值越大路由越优;
- 当本 AS 有多个出口时,可以使用该属性选择一个出口访问外部网络。
修改方式
1.IBGP 邻居之间在 in 或者 out 方向都可以对 Local-preference 属性做修改;
2.EBGP 邻居之间只能在 in 方向上对 Local-preference 属性的修改。
缺省情况
- 缺省情况下从所有 EBGP 邻居收到的路径属性中不包含 Local-preference,缺省认为也是 100,但在 BGP 表中显示为空;
- 缺省情况下本地起源的路由也不包含 Local-preference,缺省认为也是 100,BGP 表显示为空。
default local-preference 命令的作用
- 修改本地起源的 bgp 路由的默认值,但在 BGP 表中显示为空,在将此路由传递给 IBGP 邻居时 local-preference 的值根据此命令设置;
- 默认情况下 local-preference 属性不传递给 EBGP 邻居,此命令对从 EBGP 邻居接收到的路由设置一个 local-preference 值,本地 BGP 表中显示为空,并传递给其他的 IBGP 邻居;
- 对本地起源路由,从 EBGP 传递来的路由,手动汇总的路由生效;
- route-policy 命令优先级高于
default local-preference
二、MED
特点
- MED (多出口鉴别器),也称为 BGP COST,BGP 度量值;
- 直连路由 / 静态路由的 MED 默认值是 0,如果是 IGP 路由则默认值为 IGP cost,越小越优(将 IGP 路由引入到 BGP 时,med 属性继承 IGP 的 cost 值)。
传递规则
1.始发路由器产生的路由 MED 值传递给所有邻居;
2. 从 EBGP 邻居收到的 MED 值只传给 IBGP 邻居,不会传递给 EBGP 邻居;
3. 从 IBGP 邻居或者从 EBGP 邻居得到的 MED 值不传给 EBGP 邻居。
default med
华为 default med 对所有 import 的路由以及汇总路由生效,发送此路由给 EBGP 邻居时生效,发送给 IBGP 邻居、network 命令产生的路由和邻居传来的路由不生效,Local-preference 显示原始 MED 值。
例如:如果使用了
default med 900
,
import-route xx med 800
则本地 med 为 800,传给 EBGP 邻居是 900,传给 IBGP 邻居是 800
选路规则
- 默认情况下,如果 AS-PATH 最左边的 AS 号相同时,会进行 MED 值的比较,EBGP 都是默认开启此选路规则;
- MED 属性默认只对来自于同一个 AS 的路由进行比较,即下一跳AS 号相同才比较 MED 属性。使用
compare-different-as-med
命令后,将不做 AS 号检测,进行 MED 值比较,此命令对 EBGP 邻居有效,只要前五条选路规则相同,始终比较这些 路由的 MED 属性。
- BGP 的路由优选原则BGP 路由器将路由通告给邻居后,每个 BGP 邻居都会进行路由优选,路由选择有三种情况: 该路由是到达目的地的唯一路由,直接优选。 对到达同一目的地的多条路由,优选优先级最高的。 对到达同一目的地且具有相同优先级的多条路由,必须用更细的原则去选择一条最优的。
- 一般来说,BGP 计算路由优先级的规则如下:1、丢弃下一跳不可达的路由 2、优选 Preference_Value 值最高的路由(私有属性,仅本地有效) 3、优选本地优先级(Local_Preference)最高的路由 4、优选手动聚合 > 自动聚合 > network>import > 从对等体学到的 5、优选 AS_Path 短的路由 6、起源类型 IGP>EGP>Incomplete 7、对于来自同一 AS 的路由,优选 MED 值小的 8、优选从 EBGP 学来的路由(EBGP>IBGP) 9、优选 AS 内部 IGP 的 Metric 最小的路由 10、优选 Cluster_List 最短的路由 11、优选 Orginator_ID 最小的路由 12、优选 Router_ID 最小的路由器发布的路由 13、优选具有较小 IP 地址的邻居学来的路由
使用场景
当管理员希望控制邻居 AS如何选择某条链路访问本 AS 时使用。
BGP 安全特性详解
一、MD5 认证
1、BGP 认证只支持 MD5 认证,没有明文认证;
2、BGP 报文中没有设计认证字段,认证信息是存放到TCP 报文中的 option 字段携带。
配置命令:
peer x.x.x.x password cipher xxxx
二、GTSM
GTSM(通用 TTL 安全保护机制,Generalized TTL Security Mechanism)是一种基于 TTL 的安全保护机制。GTSM 通过检查 IP 报文头中的 TTL(Time To Live)值是否在预先定义的范围来确认报文合法性,丢弃非法报文,保护建立在 TCP/IP 基础上的控制层面协议免受 CPU 过载攻击。
- 目的 攻击者模拟真实的路由协议,对一台设备不断发送报文。设备如果无法判断报文的合法性,会因为持续处理攻击报文而异常繁忙,造成 CPU 过载。 针对这种情况,需要有一种方法来判断报文的合法性。GTSM 就是其中的一种方法,判断依据为报文头中的 TTL 值。 TTL 的主要作用是避免 IP 报文在网络中被无限循环收发。TTL 的最大值为 255,每经过一跳设备 TTL 值减 1。而根据网络的规模和结构,使用路由协议的邻居设备之间报文中转的跳数是有一定范围的,设备之间接收到的报文中的 TTL 值也就应该在一定的范围内。 因此,根据网络情况,可以使用 GTSM 来预先定义邻居设备之间 TTL 值的范围,检查报文 TTL 值的合理性,判断报文的合法性,过滤非法的攻击报文。
- 原理 所有设备之间建立 IGP 连接。 DeviceA 和 DeviceB 之间建立 BGP 连接。 攻击者从 Internet 远端接入,模拟 BGP 协议,对 DeviceA 或 DeviceB 不断发送报文。 DeviceA 和 DeviceB 之间进行 BGP 对等体协商时,可以选择 3 条路径进行转发,报文经过的中间设备跳数(包含到达设备的最后 1 跳)可能为 3 跳、5 跳、6 跳,即最多 6 跳。 使用 GTSM 来预先定义 TTL 值的范围为 [255-6+1,255],即 [ 250,255 ]。TTL 值不在此范围内的远端 BGP 攻击报文被认定为非法报文,直接丢弃。
GTSM,有效防止基于 TCP 的源地址伪造攻击,保护设备不被 CPU 类型的攻击从面避免 CPU 负载过大。
配置 GTSM:
peer x.x.x.x valid-ttl-hops N
此命令的两大作用:
1、在向邻居 x.x.x.x 发送 BGP 报文时,TTL 为 255
2、在接收邻居 x.x.x.x 发来的 BGP 报文时,要求报文的 TTL ≥ 255-N+1
三、限制从对等体接收的路由数量
peer x.x.x.x route-limit y
设置允许从对等体收到的路由数量最大值为 y
1、收到路由的最大数量为 100,超过 70% 告警,超过最大数量断开 BGP 邻居,30s 后自动 再次建立邻居
peer x.x.x.x route-limit 10070
2、收到路由的最大数量为 100,超过 70% 告警,超过最大数量仅告警,不断开 BGP 邻居
peer x.x.x.x route-limit 10070 alert-only
3、收到路由的最大数量为 100,超过 70% 告警,超过最大数量断开邻居关系,并在 10 分钟后重新建立邻居,超时前 可以使用 reset bgp x.x.x.x 手动重新建立邻居
peer x.x.x.x route-limit 10070 idle-timeout 10
4、收到路由的最大数量为 100,超过 70% 告警,超过最大数量断开邻居关系,不再自动建立,可以使用 resetbgp 10.1.45.5 手动重新建立邻居
peer x.x.x.x route-limit 10070 idle-forever
四、AS-PATH 长度保护
设置 AS_Path 属性中 AS 号的最大个数为 x
as-path-limit x
如果设置的限制数刚好是接收 BGP 路由的 AS-PATH 的数量,则不会传递给 EBGP 邻居。
BGP 防环机制有以下两种(不带 RR)
一、AS_PATH
- 在 AS 之间实现 BGP 环路的防范,从 EBGP 邻居得到路由时,检查该路由的 AS_PATH 属性,如果 AS_PATH 中存在自身的 AS 号,则丢弃改路由;
- 当 BGP 路由传递给EBGP 邻居时会将自己的 AS 号添加到 AS_PATH 属性的最前面;
- 当 BGP 路由传递给 IBGP 邻居时不会添加自己的 AS。
- AS_PATH 防环机制的检测:EBGP 邻居之间进行 AS_PATH 检查,IBGP 邻居之间不进行AS-PATH 检测
二、AS 内部防环:IBGP 水平分割
通过 IBGP 邻居得到的路由不会再传递给 IBGP 邻居。
路由反射器(带 RR)
- 路由反射器 RR (Route Reflector) : 允许把从 IBGP 对等体学到的路由反射到其他 BGP 对等体的 BGP 设备。
- 客户机 (Client) : 与 RR 形成反射邻居关系的 IBGP 设备。在 AS 内部客户机只需要与 RR 建立邻居关系。
- 非客户机 (Non-Client) : 既不是 RR 也不是客户机的 BGP 设备。在 AS 内部容户机与 RR 之间,以及所有的非客户机之间必须建立全连接关系。
- 始发者(Originator): 在 AS 内部始发路由的设备。
- Originator ID 属性:用于防止集群内产生路由环路。
- 集群 (Cluster):路由反射器及其客户机的集台。
- Cluster List 属性:用于防止集酷产生路由环路。
反射规则
在向 IBGP 邻居发布学习到的路由信息时,RR 按照以下规则发布路由
- 1.从 EBGP 对等体学到的路由,发布给所有的非客户机和客户机;
- 2.从非客户机 IBGP 对等体学到的路由,发布给此 RR 的所有客户 机,也包括 EBGP 邻居;
- 3.从客户机学到的路由,发布给此 RR 的所有非客户机和客户机 (发起此路由的客户机除外)。
RR 可减少网络 BGP 连接数量,只需要对作为反射器的路由器进行配置,客户机并不需要知道自己是客户机。
路由反射器防环机制:Originator ID 与 Cluster List
一、Originator ID
- 该属性属于 BGP 的可选非过渡属性;
- Originator ID 由 RR 产生,使用的 Router ID 的值标识路由的发送者,用于防止集群内产生路由环路;
- 当一条路由第一次被 RR 反射的时候,RR 将 Originator ID 属性加入这条路由,标识这条路由的起始设备。如果一条路由中已经存在了 Originator ID 屡性,则 RR 将不会创建新的 Originator ID 属性(此时的 Originator ID 指的是将该路由传递给 RR 的路由器的 Router ID,不是 RR 的 Router ID);
- 当设备接收到这条路由的时候,将比较收到的 Originator ID 和本地的 Router ID,如果两个 ID 相同则不接收此路由。
二、Cluster List
- 该属性属于 BGP 的可选非过渡属性,用于集群间的防环,由每个路由反射器 (RR) 产生,记录反射路由经过的集群;
- 路由反射器和它的客户机组成一个集群 (Cluster)。在一个 AS 内,每个路由反射器便用唯一的 ClusterlD 作为集群标识。缺省情况下,每个路由反射器使用自己的 Router ID 作为集群 ID;
- 为了防止集群间产生路由环路,路由反射器便用 Cluster List 属性,记示路由经过的所有集群的 Cluster ID;
- 当 RR 在它的客户机之间或客户机与非客户机之间反射路由时,RR 会把本地 Cluster ID 添加到 Cluster List 的前面,如果 Cluster List 为空,RR 就创建一个;
- 当 RR 接收到一条更新路由时,RR 会检查 Cluster List。 如果 Cluster List 中已经有本地 Cluster ID,则丢弃该路由;如果 Cluster List 中没有本地 Cluster ID,则将其加入 Cluster List,然后反射该路由。
BGP 路由汇总
自动汇总
- 只能汇总成有类网络,汇总精确度很差,容易产生黑洞路由或者次优路由;
- 自动汇总对汇总路由的 BGP 属性修改能力很差;
- 只能对 import-route 的路由生效,对邻居传来的或者 network 产生的 BGP 路由无效;
- 默认关闭自动汇总;
- 不支持 CIDR;
- 会抑制明细路由的发送
手动汇总
- 只要是有效的 BGP 路由都能进行汇总;
- 当所有明细路由失效,汇总路由也会失效;
- 执行汇总的路由器会在路由表产生指向 null 0 接口的汇总路由,防止路由环路;
- 默认情况下,明细路由依然会通告出去;
- 默认汇总路由的 BGP 属性继承问题: 1 ) 继承起源属性,按优先级最低的起源属性继承; 2 ) 继承所有明细路由的团体属性; 3 ) 其他属性不继承。
via:
- BGP专题_wx:wlgcs_123的博客-CSDN博客 2024https://blog.csdn.net/chuaxing/category_12547056.html
BGP 四类属性详解
一、公认必遵(Well-known mandatory)
- 要求所有运行 BGP 协议的设备都必须能识别,且在更新消息中必须包含。
1. Origin (起源) 属性
- 用来标识路由信息的来源。
- 如果路由是从 IGP 学习到的,则 Origin 属性为 IGP(i), 使用 display bgp routing-table 命令查看 BGP 路由时,IGP 简写为 i。
- 如果路由是从 EGP 学习到的,则 Origin 属性为 EGP(e)。
- 如果路由的来源无法确定,则 Origin 属性为 incomplete(?)。
- 路由优先级:IGP > EGP > incomplete
2. AS_PATH(AS 路径)属性
- 用来记录某条路由从本地到目的地址所要经过的所有 AS 编号。
- AS_PATH 可以作为一种度量值,经过更少 AS 的路由更优先。
- AS_PATH 被用来 ** 避免 AS 之间的环路 **。如果 BGP Speaker 从 EBGP 对等体收到一条路由,它的 AS_PATH 包含 BGP Speaker 自己的 AS 号,就说明这条路由曾经被 BGP Speaker 发送过,所以会被直接丢弃。
3. NEXT_HOP(下一跳)属性
- 定义到达目的地下一跳的设备的 IP 地址。
二、公认任意(Well-known discretionary)
- 要求所有运行 BGP 协议的设备必须能识别,但是在更新消息内可以自由选择是否携带此类属性的报文。
1. LOCAL-PREF(本地优先级)属性
- LOCAL-PREF 属性用来通告路由的优先程度。
- LOCAL-PREF 属性仅在 IBGP 对等体之间交换,不通告给其他 AS。
2. ATOMIC_AGGREGATE(原子聚合)属性
- 用来通告路由接受者该路由是经过聚合的。
三、可选过渡(Optional transtive)
1. AGGREGATOR(聚合)属性
- 是 ATOMIC_AGGREGATE 属性的补充,包含了发起路由聚合的 AS 号码和形成聚合路由的 BGP 发布者的 IP 地址。
2. COMMUNITY(团体)属性
- 是共享相同属性的目的地集合,目的就是将路由信息编组,通过组的标识决定路由策略的传递。
- 公认的团体属性有:1. INTERNET: 缺省情况下,所有的路由都属于 INTERNET 团体。具有此属性的路由可以被通告给所有的 BGP 对等体。2. NO_EXPORT: 不能被发布到本地 AS 之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子 AS。3. NO_ADVERTISE: 不能被通告给其他的 BGP 对等体,即不通告该路由。4. NO_EXPORT_SUBCONFED: 不传递给下一个小 AS,若网络中没有小 AS,仅存在大 AS 时作用与 NO_EXPORT 一致。
四、可选非过渡(Optional non-transtive)
1. MED(多出口鉴别器)属性
- 用来区分同一个邻接 AS 的多个接口。
- MED 只在 EBGP 发布的路由中产生,接收者可以向它的 IBGP 邻居转发,但不允许向它的 EBGP 对等体转发。假设一个 AS 和邻接 AS 有多个接口相连,通过发布不同的 MED 给对端,就可以控制进入网络的流量从 MED 值最小的那个接口进来。通常情况下,BGP 只比较来自同一个 AS 的路由的 MED 属性值。
- BGP 协议默认不存在 cost;MED 就是人为的利用路由器优选路径的规则 — 先比较管理距离(华为为优先级),若一直再比较度量值(华为为 cost) BGP 协议在特定条件下携带本地到达目标的 cost 值;本地宣告(重发布)自己路由表中的路由后,将其传递给本地的 ebgp 邻居,将携带 cost 值;对于其他 AS 的设备学习到从同一个 as 传递过来的路由,优选 MED 最小的路径;管理员可以在控制层面传递路由的过程中,手工修改 MDE;最常用于干涉 ebgp 选路;常常用于 AS1 干涉 AS2 对 AS1 的选路;
2. ORIGINATOR_ ID(发起人 ID)属性
- ORIGINATOR_ ID 用于标识路由反射器,是可选非过渡属性。
- 为了防止引入路由反射器之后出现环路,增加 ORIGINATOR_ ID 这个属性来标识,反射器在发布路由时加入 ORIGINATOR_ID,当反射器收到的路由信息中的 ORIGINATOR_ ID 就是自己的 ROUTER_ ID 时,就可以发现路由环路的出现,将该路由丢弃,不再转发。
3. CLUSTER_ ID(组 ID)属性
- CLUSTER_ ID 用于标识路由反射器组,是可选非过渡属性。
- CLUSTER_ ID 属性也是用来防止环路,在路由经过路由反射器时路由反射器会将自己的 CLUSTER_ID 添加到路由携带的 CLUSTER_LIST 中,当路由反射器发现接收的路由的 CLUSTER_ LIST 中包含有自己的 CLUSTER_ ID,则将该路由丢弃,不再转发。
4. WEIGHT(权重值)属性
- Weight 属性是 Cisco 私有属性,只有 Cisco 的路由器才能识别 weight。
- 路由的 weight 属性只在本地路由器起作用,BGP 将路由传递给邻居时,并不保留 weight。Weight 值的范围 0~65535,默认为 0,如果是 BGP 本地发起路由,weight 值 32768。
- 当到达同一目的地存在多条路径时,优选 weight 值大的。在 Cisco 路由器中,比较最优路径的第一条规则就是比较 weight 值,所以只要改动 weight 值,就能控制 Cisco 路由器的 BGP 选路。
via:
- BGP 的四类属性详解 - Désiré - 博客园 posted @ 2022-02-07 09:51https://www.cnblogs.com/desireroot7/p/15867019.html
版权归原作者 斐夷所非 所有, 如有侵权,请联系我们删除。