BGP

稚 发布于 2024-08-26 35 次阅读


BGP基础

BGP(BorderGateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议只传递路由信息,不会暴露AS内的拓扑信息 IGP传递LSA

AS(Autonomous System,自治系统)指的是在同一个组织管理下,使用统一选路策略的设备集合。

BGP 特点

  • BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。---BGP要想建立邻居关系,必须保证建立邻居关系的两端能够ping通
  • BGP能够承载大批量的路由信息,能够支撑大规模网络。
  • BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。
  • BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
  • BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。

BGP特征

  • BGP使用TCP为传输层协议,TCP端号179。路由器之间的BGP会话基于TCP连接而建立。
  • 运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器
  • 两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表
  • BGP路由器只发送增量的BGP路由更新,可或进行触发式更新(不会周期性更新)。
  • 每条BGP路由都携带多种路径属性(Path attribute),BGP可以通过这些路径属性控制路径选择

BGP对等体

类型

IBGP:运行在相同的AS之间的BGP路由器建立的邻居关系称为IBGP关系
EBGP:运行在不同的AS之间的BGP路由器建立的邻居关系称为EBGP关系
缺省情况下,BGP使用报文出接口作为TCP连接的本地接口。

BGP建立IBGP对等体时候,一般使用loopback接口作为更新源接口(更稳定)

IBGP建立对等体关系,发送报文TTL值为255,所以不用考虑TTL不可达问题

①使用loopback接口建立:

[Ar4]bgp 200   

[Ar4-bgp]peer 2.2.2.2 as-number 200 

[Ar4-bgp]peer 2.2.2.2 connect-interface loopback0  <mark style="background: #FF5582A6;">如果使用loopback接口建立对等体,必须要指明建立对等体的接口</mark>

②使用物理接口建立:

[Ar4]bgp 200     

[Ar4-bgp]peer 10.0.34.4 as-number 200

BGP建立EBGP对等体时候,一般使用物理接口作为更新源地址

①使用物理接口建立: 

[AR1]bgp 100

[AR1-bgp]router-id 1.1.1.1  

[AR1-bgp]peer 10.0.12.2 as-number 200

②使用loopback接口建立:

[Ar4]bgp 200      

[Ar4-bgp]peer 5.5.5.5 as-number 300   

[Ar4-bgp]peer 5.5.5.5 connect-interface loopback0          <mark style="background: #FF5582A6;">如果使用loopback接口建立对等体,必须要指明建立对等体的接口</mark>

[Ar4-bgp]router-id 4.4.4.4  # 指定router id

[Ar4-bgp]peer 5.5.5.5  ebgp-max-hop    # EBGP建立对等体关系默认发出报文TTL值为1,如果用loopback接口建立,到达loopback接口TTL值变成0,此时报文会丢弃,所以需要更改接口的TTL,peer 5.5.5.5  ebgp-max-hop命令可以直接设置TTL,至少设置为2,如果不设置,此时TTL值为255

对等体建立过程

  1. 先启动BGP的一端先发起TCP连接,使用随机端口号向对端179端口发起TCP连接,完成TCP连接的建立。

  2. 三次握手建立完成之后,相互发送Open报文携带参数用于对等体建立,参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接。

    Open报文中携带:

    • My Autonomous System:自身AS号
    • Hold Time:用于协商后续Keepalive报文发送时间
    • BGP Identifier:自身RouterID
  3. BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体

BGP报文以及状态机

BGP的报文类型

BGP存在5种类型的报文,不同类型的报文拥有相同的头部。

报文名称 作用 发送时间
Open 发现建立BGP邻居,open报文携带建立bgp对等体的参数 BGP TCP连接建立成功之后
Update 携带BGP路由信息,发送BGP路由更新 BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文
Notification 报告错误信息,中止对等体关系 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体
Keepalive 协商open参数一致,发送keepalive确认标志。对等体建立,维持BGP对等体关系 BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持接
Route-refresh 路由刷新 当路由策略发生变化时,触发请求对等体重新通告路由

OPEN

UPDATE

KEEPALIVE

默认60s发一次 超时时间hode time 为3倍发送时间

NOTIFICATION

Route-refresh

报文用来要求对等体重新发送指定地址族的路由信息,一般为本端修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。

BGP状态机

Peer状态名称 用途
idle 开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源 (初始状态)
connect 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。
Active TCP连接没建立成功,反复尝试TCP连接
OpenSent TCP连接已经建立成功,开始发送open包,Open包携带参数协商对等体的建立
OpenConfirm 参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包
Established 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息




查看邻居表

BGP邻居关系建立不成功

如果是在opensent阶段前:①检查IP地址是否错误;②检查路由是否可达;③查看179端口是否被过滤

如果是在opensent阶段后:①AS号;②版本;③hold timer;④Router id;⑤认证;

BGP路由

路由生成

不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。

BGP注入路由的方式有两种:

  • Network

  • import-route

Network:将路由逐条宣告进BGP;network进来的路由,BGP路由表中origin属性为“i”

import方式:将其他协议的路由引入BGP;import进来的路由,BGP路由表中origin属性为“?”(Incomplete)

聚合路由

与IGP协议相同BGP支持根据已有的路由条自进行聚合,生成聚合路由

aggregate 聚合后IP 掩码 detail-suppressed

detail-suppressed 只通告聚合后路由,而不通告聚合前的明细路由

通告原则

  1. 只发布最优路由
  2. 从EBGP对等体获取的路由,会发布给所有对等体。
  3. IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
    这是为了防止出现环路。因为水平分割的原则我们在IBGP之间无法直接传递路由这个时候可以直接建立IBGP全互联或者使用路由反射器来实现传递
  4. BGP同步规则(默认关闭)
    BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。
    |525
    路由黑洞:解决办法:
    ①BGP--IGP互相引入    该方法不建议
    ②IBGP全互联
    ③MPLS

BGP属性

任何一条BGP路由都拥有多个路径属性,BGP的路径属性将影响路由优选

路径属性分为公认必遵,公认任意,可选过渡,可选非过渡

  • 公认必遵(Well-known Mandatory):必须包括在每个Update消息里。
  • 公认任意(Well-known Discretionary):可能包括在某些Update消息里
  • 可选过渡(Optional Transitive):BGP设备不识别此类属性依然会接受该类属性并通告给其他对等体,
  • 可选非过渡(Optional Non-transitive):BGP设备不识别此类属性会忽略该属性,且不会通告给其他对等体

公认属性是所有BGP路由器都必须能够识别的属性,可选属性不需要都被BGP路由器所识别

公认必遵

公认必遵(Well-known Mandatory):必须包括在每个Update消息里。

Origin

它标识了BGP路由的起源.当去往同一个目的地存在多条不同Origin属性的路由时,在其他条件都相同的情况下,BGP将按如Origin的下顺序优选路由:IGP>EGP>Incomplete。

起源名称 标记 属于
IGP i 如果路由是由始发的BGP路由器使用network命令注入到BGP的,那么该BGP路由的Origin属性为IGP
EGP e 如果路由是通过EGP学习到的,那么该BGP路由的Origin属性为EGP(这里的EGP协议特指该协议)
Incomplete ? 如果路由是通过其他方式学习到的,则origin属性为incomplete(不完整的)。例如通过import-route命令引入到BGP的路由

AS_PATH

前往目标网络的路由经过的AS号列表(短的更优)

作用:确保路由在EBGP对等体之间传递无环;另外也作为路由优选的衡量标准之一;

路由在被通告给EBGP对等体时,路由器会在该路由的AS Path中追加上本地的AS号;路由被通告给IBGP对等体时,AS_Path不会发生改变 ,若存在自身AS则不接受该路由

类型
  1. AS_SEQENCE(默认)

    表示AS_Path内的AS号是一个有序的列表

  2. AS_SET
    在做路由聚合时可以使用该类型。路由聚合解决了两类问题,一是减轻了设备的负担,二是隐藏了明细的路由信息,减少了路由震荡的影响。但是路由聚合后,AS_Path属性丢失,存在产生环路的风险,为此可以通过AS_SET类型的AS_Path属性携带聚合前的AS路径信息。

    用与链路聚合后记录聚合前的AS路径信息 例:AS_PATH=300{100,200}

修改AS_path

使用Route-Policy修改BGP路由的AS_Path属性时,可以使用以下三种方式
|750

  1. additive

    原有AS_Path上追加

acl number 2000 
     rule 5 permit source 10.10.10.10 0
route-policy aa permit node 10
     if-match acl 2000
     apply as-path 500 additive
bgp 200
  peer 5.5.5.5 route-policy aa export
  
  1. overwrite

    将已有AS_Path值替换成新的值

 acl number 2000 
 rule 5 permit source 10.10.10.10 0

route-policy aa permit node 10
    if-match acl 2000 
    apply as-path 500 overwrite
  
bgp 200
  peer 5.5.5.5 route-policy aa export
  1. none overwrite

    将已有AS_Path的值清空

Next_Hop

用于指定到达目标网络的下一跳地址。该属性值(IP地址)必须在本地路由可达,如果不可达,则这条BGP路由不可用

设置规则
  • BGP路由器在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址

  • BGP路由的始发路由器上,下一跳是0.0.0.0

  • BGP路由器将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。

    • 路由器在收到EBGP对等体所通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变。

|775
IBGP在进行路由传递时,下一跳地址 不变会造成路由不可达这种情况,可以使用以下命令修改
使用peernext-hop-local命令可以在设置向IBGP对等体(组)通告路由时,把下一跳属性设为自身的TCP连接源地址[AR4-bgp]peer 10.0.45.5 next-hop-local 配置之后

  • 如果路由器收到某条BGP路由,该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段,那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体。

公认任意

公认任意(Well-known Discretionary):可能包括在某些Update消息里

Local_Preference

Local_Preference即本地优先级属性,是公认任意属性,可以用于告诉AS中的路由器,哪条路径是离开本AS的首选路径。
Local_Preference属性值越大则BGP路由越优。缺省的Local_Preference值为100
该属性只能被传递给IBGP对等体,而不能传递给EBGP对等体。

注意事项:
Local_Preference属性只能在IBGP对等体间传递(除非做了策略否则Local_Preference值在IBGP对等体间传递过程中不会丢失),而不能在EBGP对等体间传递,如果在EBGP对等体间收到的路由的路径属性中携带了Local_Preference,则会进行错误处理。

但是可以在AS边界路由器上使用Import方向的策略来修改Local_Preference属性值。也就是在收到路由之后,在本地为路由赋予Local_Preference。

使用bgp default local-preference命令修改缺省Local_Preference值,该值缺省为100。

路由器在向其EBGP对等体发送路由更新时,不能携带Local_Preference属性,但是对方接收路由之后,会在本地为这条路由赋一个缺省Local_Preference值(100),然后再将路由传递给自己的IBGP对等体。

本地使用network命令及import-route命令引入的路由, Local_Preference为缺省值100,并能在AS内向其他IBGP对等体传递,传递过程中除非受路由策略影响,否则Local_Preference不变

Atomic_Aggregate

路由聚合后自动生成 标识聚合路由

可选过渡

Aggregate

聚合路由丢失明细路由的路径属性,因此需要给下游对等体告警,并提示“聚合点”及聚合设备所属的AS号。

Aggregator属性记录了聚合设备的AS号、RouterID

Community

是一种路由标记,用于简化路由策略的执行,可以将某些路由分配一个特定的community属性值,之后就可以基于community值而不是网络前缀/掩码信息来匹配路由并执行相应的策略了。

  • RFC (常用)

    AA:NN AA表示AS号 NN表示自定义的编号 (自定义格式)

  • 10进制整数

公认Community属性 (重要)
名称 说明
Internet 设备在收到具有此属性的路由后,可以向任何BGF对等体发送该路由。缺省情况下,所有的路由都属于Internet团体
No_Advertise 设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由
No_Export 设备收到具有此属性的路由后,将不向AS外发送该路由
No_Export_Subconfed 设备收到具有此属性路用后将不向AS外发送也不向AS内其他子AS发布此路由该路由

可选非过渡

MED

是一种度量值,用于向外部对等体指出进入本AS的首选路径,即当进入本AS的入口有多个时,AS可以使用MED动态地影响其他AS选择进入的路径.MED属性值越小则BGP路由越优
MED主要用于在AS之间影响BGP的选路。MED被传递给EBGP对等体后,对等体在其AS内传递路由时,携带该MED值,但将路由再次传递给其EBGP对等体时,缺省不会携带MED属性。

注意:
缺省情况下,路由器只比较来自同一相邻AS的BGP路由的MED值,也就是说如果去往同一个目的地的两条路由来自不同的相邻AS,则不进行MED值的比较。

一台BGP路由器将路由通告给EBGP对等体时,是否携带MED属性,需要根据以下条件进行判断(不对EBGP对等体使用策略的情况下):

  • 如果该BGP路由是本地始发(本地通过network或import-route命令引入)的,则缺省携带MED属性默认为0发送给EBGP对等体。

  • 如果该BGP路由为从BGP对等体学习到,那么该路由传递给EBGP对等体时缺省不会携带MED属性。

  • 在IBGP对等体之间传递路由时,MED值会被保留并传递,除非部署了策略,否则MED值在传递过程中不发生改变也不会丢失。

  • 如果路由器通过IGP学习到一条路由,并通过network或import-route的方式将路由引入BGP,产生的BGP路由的MED值继承路由在IGP中的metric。

可以使用default med命令修改缺省的MED值,default med命令只对本设备上用import-route命令引入的路由和BGP的聚合路由生效。

  1. 如果该BGP路由时本地始发(本地通过net/import引入的)则缺省携带MED属性发送EBGP对等体
  2. 如果BGP路由时从BGP对等体学习到,那么路由传递给EBGP对等体缺省不会携带MED属性
  3. 在IBGP对等体之间传递路由时,MED值保留

Preferred-Value

华为设备的特有属性,该属性仅在本地有效,只影响本设备的路由优选。该属性不会传递给任何BGP对等体。当BGP路由表中存在到相同目的地的路由时,将优先选择Preferred-Value值高的路由。取值范围:0~65535;该值越大,则路由越优先。

路由反射器

作用:解决IBGP全互联的问题
反射器角色:

  • RR(Route Reflector):路由反射器
  • Client:RR客户端

RR会将学习的路由反射出去,从而使得IBGP路由在AS内传播无需建立IBGP全互联将一台BGP路由器指定为RR的同时,还需要指定其client。至于client本身,无需做任何配置,它并不知晓网络中存在RR。

反射规则(非非不传)


1、RR从EBGP学习到的,会发送给client和非client
2、RR从非client学习到的路由,会反射给自己的client,但是不会给非client
3、RR从client学习到的路由,会反射非自己的非client和client

路由反射器中的防环

Originator_ID,Cluster_List

RR将一条BGP路由进行反射时会在反射出去的路由中增加Originator_ID,其值为本地AS中通告该路由的BGP路由器Router ID。

若AS内存在多个RR,则Originator_ID属性由第一个RR创建,并且不被后续的RR(若有)所更改。

当BGP路由器收到一条携带Originator_ID属性的IBGP路由,并且Originator_ID属性值与自身的Router ID相同,则它会忽略关于该条路由的更新。


路由反射簇包括反射器RR及其Client。一个AS内允许存在多个路由反射簇。

每一个簇都有唯一的簇ID(Cluster_ID,缺省时为RR的BGP Router ID )。

当一条路由被反射器反射后,该RR(该簇)的Cluster_ID就会被添加至路由的Cluster_list属性中。

当RR收到一条携带Cluster_list属性的BGP路由,且该属性值中包含该簇的Cluster_ID时,RR认为该条路由存在环路,因此将忽略关于该条路由的更新。


配置:
在RR路由器上配置:
Bgp 200
     peer 6.6.6.6 reflect-client   --谁是client,就peer谁`

缺省情况下,每个路由反射器使用自己的Router ID作为集群ID
[Huawei-bgp] reflector cluster-id  20.2.2.2

路由聚合

路由聚合
BGP路由聚合支持两种方式:

  • 自动聚合:对BGP引入的路由进行聚合。配置自动聚合后,对参加聚合的具体路由进行抑制。配置自动聚合后,BGP将按照自然网段聚合路由(如10.1.1.1/24和10.2.1.1/24将聚合为A类地址10.0.0.0/8),并且BGP向对等体只发送聚合后的路由。
    配置:

    Bgp 200
    summary automatic

    该命令对BGP引入的路由(也就是通过import-route方式得到的路由)进行聚合,引入的路由可以是直连路由、静态路由、RIP路由、OSPF路由、IS-IS路由。配置该命令后,BGP将按照自然网段聚合路由。该命令对network命令引入的路由无效。

  • 手动聚合:对BGP本地路由进行聚合。手动聚合可以控制聚合路由的属性,以及决定是否发布具体路由。

[AR3-bgp]aggregate 10.0.0.0 255.255.252.0 detail-suppressed as-set
detail-suppressed :抑制明细路由,只传递聚合后的路由
as-set :路由携带聚合前的AS号

路由优选


P    L  L  A  O  M  E  N 漂亮老男人

p---Preference Value (越大越优,仅限路由器本地)

L--- Local Preference,本地优先级 (越大越优,同一AS内的路由器)

L--- 手动聚合->自动聚合->network->import,为本地始发

A ---AS Path (短的优先)

O ---Origin,起源i(network)>e(EBGP)>? (import-route)

M---MED (值越小越优,本AS内或上游AS内所有路由器,EBGP邻居上设置)

E--- EBGP优于IBGP (前面都一样,比不出最优路径时)

N--- Next-Hop,下一跳(BGP选择IGP下一跳cost值最小的)

前8条一样,可以实现负载分担
bgp 200
maximum load-balancing ibgp 2

默认不开启