第六章,BGP---边界网关协议

前言

自治系统---AS

由一个单一的机构或组织所管理的一系列IP网络及其设备所构成的集合

进行AS划分的原因

  • 随着网络规模亏大,路由数量进一步增加,路由表规模变大,导致路由信息的收敛速度变慢,全球设备数据不统一。----->协议跑不过来。

  • AS之间可能是不同的机构或企业,互相之间无法完全信任,使用IGP协议可能存在暴露AS内部的网络信息风险。

AS号存在16bit与32bit两种。IANA(互联网数字分配机构)负责AS号的发放。

  • 常用的为16bit,取值范围1-65534(0和65535保留)

    • 私有AS号-----64512-65534

    • 公有AS号-----1-64511

  • 32bit

BGP基础

所有运行了BGP协议的路由器,其本地路由表中,一定包含了全球网络的所有路由信息

BGP协议的特点

  • BGP基于TCP协议,只要能建立TCP连接,就可以建立BGP连接。

  • 仅具有触发更新,而不再进行周期性更新

  • 只传递路由信息,而不会暴露AS内部的拓扑信息

BGP通常被称为无类别的路径矢量型协议

  • 无类别-----BGP传递真实掩码信息

  • 矢量--------方向性;谁传递给我,谁就是我的下一跳。

  • 距离矢量可以理解为将一个路由器作为一个基本计量单位。而路径矢量是将一个AS看做一个整体,从而计算一跳。路径矢量不是算法的概念,其仅仅为将IGP协议计算出的路由信息传递出去,即仅完成路由的搬运工作

BGP的特征

  • 可控性

    • 路径属性(类似与开销值)
  • 可靠性

    • 完全依靠TCP协议实现可靠性机制,TCP协议的179端口

    • 因为BGP需要使用TCP协议保证会话的可靠性,所以需要先试用单播的形式建立TCP的邻居关系。故而,BGP会话的建立并非如IGP协议一样是自动建立,而是需要网络管理员手工指定

  • AS-BY-AS

    • BGP将一个AS看作为一个整体

    • 因为BGP将一个AS看做为一个整体,从该角度看,BGP是允许存在负载均衡。但是,因为AS内部的数据转发路径BGP协议无法确定,故实际BGP默认情况下禁止形成等价路由(负载均衡)

BGP的对等体关系

BGP因为传输层使用的时TCP协议,所以,只要在TCP协议可以正常建立会话的基础上就可以完成BGP的建邻工作----BGP支持非直连建邻(网络可达)----BGP的非直连建邻是建立在IGP协议(静态)之上的

  • EBGP

    • 位于不同自治系统的BGP路由器之间的BGP对等体关系。

    • EBGP对等体一般使用直连建立邻居关系

      • EBGP对等体之间发送的建邻报文中,TTL数值为1
    • 当满足如下条件时,设备认为此时在建立EBGP对等体关系

      • 两台设备所属AS号不同。

      • 对等体的IP地址在本地为路由可达。

  • IBGP

    • 位于相同自治系统的BGP路由器之间的BGP对等体关系。

    • IBGP对等体之间一般使用非直连建立邻居关系

      • TTL数值为255
    • 在缺省情况下,BGP协议会使用报文的出接口作为TCP连接的源IP地址。但是在某些情况下,我们也会指定BGP对等体的会话IP地址,例如在IBGP对等体关系中,常使用环回地址作为源IP地址。----原因在于loopback接口稳定,而且可以借助AS内部的IGP协议完成冗余来保证可靠性。

总结

  • 无类别的路径矢量协议

  • BGP基于单播发送报文,基于TCP 179端口工作。

  • 增量更新机制

  • 具有丰富的路径属性来取代IGP协议中度量值参数,从而控制BGP路由信息的选路。

  • 可以通过路由策略来对流量进行管控

  • 默认不存在负载均衡

  • BGP支持认证和聚合

BGP数据包

Route-refresh-----路由刷新包

作用:用来要求对等体重新发送指定地址(IPv4)的路由信息

一般为本端修改了相关路由策略之后,让对端重新发送Update报文,本端从而针对新的BGP路由执行新的路由策略。-----对等体双方均支持路由刷新功能

open包

TCP链接建立之后发送的第一个BGP报文,用于建立BGP对等体之间的连接关系。

  • BGP标识符(BGP identifier)

    • 与OSPF中的RID相同,也为32位二进制构成,按照IP地址的格式编写。

    • 要求

      • 全网唯一

      • 获取方式

        • 网络管理员手工指定

        • 自动获取

          • 若设备存在环回接口,则选择环回接口IP地址最大值作为RID值,若没有环回接口则选择最大物理IP地址。
  • 可选项字段

    • 含有对等体双方是否支持路由刷新功能

BGP建立对等体关系需要协商的参数

  • AS号

    • BGP的open报文中会携带本地的AS号,通过比较两端的AS号可以判断是否与对端处于相同的AS。但是不管是否在相同的AS,都并不影响两端之间的BGP对等体关系建立。

    • 如果收到的open报文中,MY AS字段中的数值与网络管理员配置在设备上的内容不同,则将会导致对等体关系无法正常建立

  • RID---BGP标识符

    • 对比双方数值是否相同,如果相同则表示冲突,导致对等体建立失败。
  • 认证字段

    • 该字段内容以MD5形式保存,并且存储在TCP的选项字段中,而非携带在open报文中。

    • 将该字段放入TCP选项中,可以保证BGP的每一次报文传输都要经过认证。

  • Hold time----保活时间

    • 并不影响BGP会话的建立

    • 如果在保活时间内未收到对端发送来的keepalive报文或Update报文,则认为BGP连接中断。该时间默认为180S

    • 如果在协商时,两端保活时间不同,则按照较小的时间执行。

    • 该参数时间可以为0。该时间为0,则代表不发送keepalive报文。因为对于BGP协议而言,其传输层使用的是TCP协议,只要TCP会话未断开,则可以认为BGP会话正常。

    • BGP是依赖TCP的那么可以不要Hold time 直接根据TCP是否断开来确定BGP的断开

      • 可以,但是此时间的存在是加快BGP会话的断开,因为TCP断开后还要等2小时,再发10次报文,在彻底的释放资源。
  • 路由刷新功能

keepalive包

作用:主要用来进行周期保活,次要临时充当确认报文

keepalive报文的默认发送周期为保活时间的1/3,默认为60S

该报文没有报文字段,仅具备BGP头部信息。

该报文会临时充当确认报文,用以确认open报文中的参数,本端是否认可。如果认可,则回复keepalive报文,如果不认可,则回复notification报文。

而TCP协议的确认机制是在告知对端,本端是否收到了你发送的BGP报文,与报文中的参数信息无关。

Update包---更新包

作用:用于在对等体之间传递路由信息,可以用于发布、撤销路由

撤销路由长度

  • 标定下个字段,总共要撤销多少路由信息

撤销路由列表

  • prefix
  • length

路径属性长度

路径属性

网络层可达信息

  • prefix
  • length

Notification包

类似于icmp

BGP状态机

OSPF状态机是在描述整个协议完整的工作过程。而BGP的状态机仅描述的是对等体建立过程中的状态变化

BGP将邻居建立过程和BGP路由收发过程分开

  • Idle---空闲状态

    • 是所有设备启动BGP进程后首先进入的状态。实际上是在等待网络管理员手工指定邻居关系

    • 手工指定邻居关系后,会进入一个检查环节。需要检查手工指定的IP地址在本地路由表中是否可达,只有可达,才可以正常建立TCP会话,如果不可达,则邻居关系建立失败,停留在该状态。如果检查成功,则进入到Connect状态。

  • Connect----链接状态

    • 正在建立TCP会话链接。

    • 该状态,会开启一个链接重传定时器(32秒)。当该定时器超时,则重新发送TCP报文。如果成功建立了TCP会话,则会关闭连接重传定时器,并进入到OpenSent状态。

    • 如果TCP会话建立失败,则会进入Active状态。

    • 如果BGP设备一直处于Connect状态,则会持续性尝试发送TCP报文与对端建立TCP会话。

  • Active----尝试状态

    • 该状态是因为第一次TCP会话建立失败进入的。尝试重新建立TCP会话

    • 此时使用在Connect状态创建的连接重传定时器来确定本端发送TCP报文的时间。设备会一直处于该状态,直到成功建立TCP会话,关闭连接重传定时器,进入OpenSent状态。

  • OpenSent状态----开始发送open报文

    • 该状态会发送open报文,同时也会受到对端发送来的open报文,本端会查看其中的参数,如果没有问题,则本地将发送keepalive报文进行确认。之后进入到openconfirm状态

    • 如果本地参数不认可,则发送notification报文,并切换状态为Idle状态。

  • Openconfirm状态-----等待open报文的回复

    • 在上一个状态机,本地已经发送出了keepalive报文,也就是说对于本地而言,已经同意了对端的参数,而参数的协商是双向的,此时本地也需要等待对端发送的keepalive确认包。

    • 如果,收到对端发送的keepalive报文,则代表双方open报文中的参数协商完成,代表对等体关系建立成功,进入到最终状态,Establish状态。

    • 如果收到的是notification报文,则转换位idle状态。

  • Establish----建立状态

    • 对等体建立完成的标志。仅代表BGP会话建立成功,并不代表此时路由收发完成。

    • 在该状态下,BGP可以与对等体相互发送Update报文、keepalive报文、Route-refresh报文和Notification报文。

BGP工作过程

  1. 基于IGP协议实现IP地址可达

  2. 启动BGP协议,并指定对等体的IP地址及AS号

    1. 邻居之间单播传输数据,通过三次握手,建立TCP会话。

    2. BGP之后所有的通讯都将基于TCP会话通道来传输。包括BGP的可靠性机制。

  3. 使用open报文和keepalive报文进行邻居关系建立。open报文携带建邻使用的参数,keepalive报文用于参数的确认。最终完成对等体关系的建立,生成邻居表

  4. 使用update报文来共享路由信息。信息中将携带目标网络号、子网掩码及路径属性;之后,设备会将所有自己发送以及收到的路由信息记录在一张表中-----BGP路由表

  5. 之后,将BGP表中最优的路由信息(根据路径属性选择的结果)加载到全局路由表中。

  6. 此时,BGP协议收敛完成,使用keepalive报文进行周期保活,默认保活时间为180S,周期发送时间为保活时间的三分之一,即60S。

  7. 如果出现错误,将使用notification报文进行告警

  8. 若出现结构突变,将使用update报文进行增量更新

BGP的防环

水平分割机制

EBGP的水平分割机制

通过一个AS_Path属性进行防环。该属性在向AS外部传递路由信息时,会添加上发出该路由信息的设备所在的AS号。当某台设备接收到一个路由信息,其中的AS_Path属性中包含了本地的AS-number,则设备拒绝学习该路由信息

该属性只能在EBGP对等体之间传输时添加。

IBGP的水平分割机制

因为AS-BY-AS规则,BGP将一个AS看做是一个整体,而在这个整体内部传递的路由信息包含的所有路径属性均相同。也就是说AS内部传递的BGP路由信息完全相同。

BGP规定:当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由信息通告给任何IBGP对等体-----IBGP水平分割机制。该规则仅影响IBGP对等体之间的路由传输,并不会影响EBGP对等体之间的路由传输。

因为IBGP水平分割机制的存在,导致R4无法将路由信息传递给R5。导致数据不通。

解决思路:

  1. 构建全互联的IBGP对等体关系。---即一个AS内部两两互相建立BGP对等体关系。

  2. 打破IBGP水平分割机制

    • 联邦,将原本的IBGP对等体关系替换为EBGP对等体关系。

    • 路由反射器,强制性传递路由信息。

BGP的路由黑洞

BGP同步更新规则----为了避免BGP路由黑洞问题

当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这条路由为IBGP路由信息),它将不能使用这条路由信息,也不能将这条路由信息传递给其他BGP设备,除非,它又从IGP协议学习到这条路由信息。即要求IBGP路由与IGP路由同步

在华为数通产品上,BGP同步规则被关闭,并且不允许打开该规则

  1. 物理或逻辑拓扑全联;让R3和R7直连。

  2. 让未运行BGP协议的设备运行BGP协议

  3. 将BGP路由信息重发布进IGP协议中。

  4. 现网中真实的解决方案----MPLS---多协议标签交换

BGP基本配置

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">使用直连接口IP地址连建立EBGP对等体关系
1、启动BGP协议
    [r1]bgp 100  ----这个数字是指的AS号,而非是进程号。每一台设备都只能运行一个BGP协议,不能运行多个。
​
2、设置RID
    [r1-bgp]router-id 1.1.1.1  ----RID数值一般与设备身上的环回接口IP地址相同
    
3、配置BGP对等体的IP地址,并指定对等体所在的AS号
    [r1-bgp]peer 12.0.0.2 as-number 200  
    a.告知本地设备,邻居的IP地址,通过路由表对IP地址进行网络可达性验证。
    b.告知本地设备对端所在的AS号,判断此时建立的是EBGP还是IBGP对等体关系;并且可以根据open报文判断是否出错
​
​
​
使用环回接口来建立IBGP对等体关系
1、启动BGP协议
[r3]bgp 200
​
2、设置RID
[r3-bgp]router-id 3.3.3.3
​
3、配置BGP对等体信息
[r3-bgp]peer 2.2.2.2 as-number 200
​
    此时会发现,R2和R3之间的BGP状态处于Active状态。原因是因为R2在发送报文时,使用出接口IP地址作为BGP报文的源IP地址(23.0.0.2),而R3收到该报文后,在其BGP配置信息中查找不到关于23.0.0.2的邻居信息,故拒绝建立TCP会话。----->解决思路,修改R2发送的BGP报文的源IP地址为环回接口IP地址。
4、[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
    R2使用loopback 0接口作为出接口与3.3.3.3建立BGP会话。通讯双方均需要修改
​
​
​
使用环回接口来建立EBGP对等体关系
    一般EBGP对等体关系之间存在多条物理链路时,会使用环回接口方式建立BGP会话。
    
    此时,如果正常去建立BGP会话,两端设备会正常建立BGP会话,但是,在建立完成后,会通过发送notification报文断开BGP和TCP的会话关系。
    原因:本地设备身上存在静态或IGP路由信息,此时设备会认为本地距离目标网段并非直连,故需要进行多次路由数据转发过程,而此时所建立的EBGP对等体关系的TTL数值=1;设备会认为该BGP会话不应该建立。但事实建立,出现故障,发送错误报文,断开连接。
    解决思路:修改TTL
    [r4-bgp]peer 5.5.5.5 ebgp-max-hop 2  ---修改R4与5.5.5.5建立的EBGP对等体的TTL=2,如果不携带参数,则代表修改为最大值255</span></span>

通过==display bgp peer== 命令查看BGP邻居表

BGP的路由发布

对于BGP而言,只要是全局路由表中存在的路由信息,都可以通过network命令发布

通过network命令发布路由信息
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r1-bgp]network 1.1.1.1 32   ---目标网络号与掩码信息</span></span>

注意:BGP使用network命令发布路由,那么这条路由信息必须与本地全局路由表中的网络号和掩码信息一致

BGP的路由发布不在乎路由信息是否为本地直连,只要路由表中存在,即可以发布

使用==display bgp routing-table== 查看BGP路由表

Nexthop属性----谁发送的路由信息,则该字段数值填充为谁。如果是本地始发的路由,则下一跳为0.0.0.0。

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">路由状态码
*
    代表这条路由信息可用。
    所有设备在收到BGP路由信息后,首先会根据下一跳属性中参数来查询本地路由表,查看该地址的可达性。如果本地路由表中显示下一跳可达,则这条路由信息可用。否则不可用。
    如果这条路由信息不可用,则不会参与到路由优选规则中。
​
>
    代表优选。
    当收到多条到达相同目标网段的路由信息时,将根据BGP路由优选规则进行路由优选,将其中最优的路由打上标记。
​
i
    代表这条路由信息时通过IBGP对等体学习到的。
    
S
    代表抑制,被抑制的路由信息将不能再加表,也不能被传递</span></span>

如果一条BGP路由信息既有*也有>;被称为可用且优的路由。代表这这条路由信息可以被加载到全局路由表中,并且可以被传递给下一个BGP对等体

R2将路由信息传递给R3后,对于R3而言,这条路由信息时不可用且不优的。因为在AS-BY-AS规则,导致路由信息在AS内部传递时不会修改任何内容。故此时的下一跳属性还为12.0.0.1,对于R3而言不可达。

解决思路:让R2在给R3传递路由信息时,将下一跳属性进行修改。

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r2-bgp]peer 3.3.3.3 next-hop-local  ----在给3.3.3.3传递路由信息时,将下一跳属性修改为本地</span></span>

BGP配置总结:

  1. 完成所有路由器的IGP、静态、直连路由信息配置。

  2. 使用直连接口建立EBGP对等体关系

  3. 使用环回接口建立IBGP对等体关系

  4. 使用connect-interface命令修改IBGP建邻的源IP地址

  5. 使用next-hop-local命令修改路由传递的下一跳属性

  6. 若存在使用环回建立EBGP对等体关系的情况,使用ebgp-max-hop修改TTL数值。

通过重发布发布路由信息
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r2-bgp]import-route ospf 1</span></span>

Ogn----起源码属性

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">标识一条路由信息的起源。
i
    代表这条路由信息起源于AS内部通过network命令发布的路由。
e
    代表这条路由信息起源于EGP协议。
?
    除了以上两种,一般为重发布。</span></span>

BGP的路由聚合

自动聚合

只能针对重发布的路由信息生效

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r1-bgp]summary automatic   ---开启自动聚合功能,华为默认关闭自动聚合</span></span>

通过自动聚合功能,会发布一条汇总路由,且该路由的下一跳属性为127.0.0.1。

自动聚合是将明细路由信息直接汇总到主类路由,然后进行控制层数据传递,而这种聚合方式,可能会产生路由黑洞或环路隐患,故始发路由器会在本地路由表中自动生成一条指向Null 0接口的汇总路由信息进行防环

手工聚合
关键字 参数 缺陷 优势
aggregate / 无法抑制明细路由,导致汇总操作并没有减少路由条目数量,反而增加。 汇总路由信息丢失了明细路由的路径属性 可以灵活指定汇总路由的网络掩码长度,且不受网络地址类别的限制。 可以在非直连设备上进行汇总,前提就是非直连设备上的明细路由可用且优。
detail-suppressed 在某些情况下,可能还需要部分明细路由进行传输,而该命令会抑制所有明细路由。 可以抑制明细路由的传输
suppress-policy 在抓取流量的时候需要通过permit操作进行抑制。 可以灵活选择抑制某些明细路由信息
as-set 仅继承AS_Path属性 可以继承明细路由属性
attribute-policy 可以对大部分路径属性进行修改
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r3-bgp]aggregate 172.16.0.0 20  ---手工聚合
​
配置手工聚合命令后,路由器会执行以下三步操作
1、检测本地路由表中是否存在聚合路由的可用明细路由。
2、若有,则在本地路由表中发布一条指向空接口的防环路由;若无,则该命令无效。
3、将汇总的防环路由发布到BGP中</span></span>

当本地存在任何一条明细路由时,聚合路由都会正常传递。只有当所有明细路由均失效后,聚合路由才会失效。

BGP的手工聚合可以在任何非直连设备上进行,只要本地存在这些明细路由,且明细路由可用且优就可以进行聚合操作

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r1-bgp]aggregate 172.16.0.0 20 detail-suppressed  ---抑制所有明细路由</span></span>
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">需求:R1仅传输聚合路由和172.16.1.0/24路由给R2
​
1、抓流量
[r1]ip ip-prefix bb deny 172.16.1.0 24
[r1]ip ip-prefix bb permit 172.16.0.0 20 greater-equal 24 less-equal 24
​
2、配置策略
[r1]route-policy bb permit node 10
[r1-route-policy]if-match ip-prefix bb
​
3、调用
[r1-bgp]aggregate 172.16.0.0 20 suppress-policy bb</span></span>
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r1-bgp]aggregate 172.16.0.0 20 detail-suppressed as-set  
​
as-set---->可以让汇总路由继承明细路由的AS_Path属性</span></span>

AS_Path属性用途

  • 用于EBGP之间防环,通过查看属性参数

  • 用于BGP路由优选规则

当汇总路由继承多个明细路由的AS_Path属性时,将会把多个属性使用{}括起来。在进行路由防环时,括号内部的数据都会读取,而进行路由优选时,将{}看作为一个整体进行计算

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r1]route-policy cc permit node 10
[r1-route-policy]apply cost 10  
[r1-route-policy]apply local-preference 20
[r1-route-policy]apply preferred-value 30
[r1-route-policy]apply as-path 1 2 3 additive 
​
[r1-bgp]aggregate 172.16.0.0 20 attribute-policy cc</span></span>
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">需求:让172.16.1.0/24路由信息与聚合路由产生强关联效果
[r1]ip ip-prefix dd permit 172.16.1.0 24
​
[r1]route-policy dd permit node 10
[r1-route-policy]if-match ip-prefix dd
​
[r1-bgp]aggregate 172.16.0.0 20 origin-policy dd</span></span>

因为聚合路由存在属性丢失问题,所以聚合路由需要额外关注,因此,引入了两个属性值。

  • Aggregator

    • 携带了汇总者的RID以及其所在的AS号
  • Atomic-aggregate

    • 仅代表预警。

    • 只有在抑制了所有明细路由时,聚合路由才会携带。

路由反射器

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">RR----路由反射器
​
Client----RR的客户端</span></span>

路由反射规则:

  • 从非客户传递来的路由信息可以传递给本地的客户

  • 从客户传递来的路由信息可以传递给所有人

  • 从EBGP对等体传递来的路由信息可以传递给所有人

  • 当RR执行路由反射时,只能将自己本地的最优路由反射出去。

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r3-bgp]peer 4.4.4.4 reflect-client   ---将本地设置为RR,指定4.4.4.4为本地客户端</span></span>

将路由反射器以及它的客户所构成的系统或集合被称为路由反射簇(Cluster),每一个反射簇都将使用RR的BGP的RID值作为自己的簇ID,来标识不同的反射簇。----反射簇之间可以嵌套。

BGP的路由反射行为会导致引入路由环路的隐患。故BGP的设计者为路由反射器设定了两个属性用来避免环路问题。

起源者ID

当一条BGP路由被路由反射器==反射==给其他路由器时,如果这条路由已经携带了起源者ID属性,则保留。如果没有则==由RR设备为其添加上该属性==,并将该属性的数值设定为路由在==本地AS内部的始发路由器的RID==

当路由器从BGP对等体收到一条IBGP路由,并且该路由所携带的起源者ID属性值与自己的BGP的RID相同,则意味着该路由是从本地始发出去的路由信息,此时又被通告回来,设备忽略这条路由的更新。从而避免路由环路

簇列表

当一条BGP路由被路由反射器执行反射时,如果这条路由已经存在簇列表属性,则RR将本地的簇ID添加到簇列表的前方。如果该路由没有簇列表,则RR创建簇列表属性,并将簇ID添加到簇列表中

当一台路由反射器收到一条BGP路由后,若发现该条路由的簇列表中包含本设备所在的反射簇的簇ID,则意识到该路由是从本反射簇反射出去的BGP路由,此时设备忽略这条路由的更新

注意事项

  • 当RR从自己的EBGP邻居学习BGP路由,不会添加簇列表和起源者ID,因为此时是正常的BGP通告行为

  • 簇列表和起源者ID属性是用于在发生反射行为后,在IBGP中进行防环。故在传递给EBGP对等体时,两个属性会被删除。----并且不同AS内部相同路由的簇列表和起源者ID无关联。

  • 发生路由反射行为时,设备只能修改路由信息的簇列表和起源者ID属性,其他属性无法修改。

联邦

AS 3456一般被称为联邦AS号。小的AS号被称为成员AS。成员AS号是使用的私有AS号,即64512-65534。

在一个联邦内部建立的EBGP对等体关系是一种特殊的EBGP对等体关系,被称为联邦EBGP对等体关系。他们之间仅遵循EBGP对等体的路由传递原则,但是不能像正常的EBGP对等体一样修改路由的路径属性

联邦AS内部的成员AS号对于联邦外部并不可见。----当路由器将BGP路由传递给其他联邦AS时,会将AS_Path属性中的成员AS号全部移除,并添加上联邦AS号。

配置

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r1]bgp 100
[r1-bgp]router-id 1.1.1.1
[r1-bgp]peer 10.1.13.3 as-number 3456  ----使用联邦AS号建立BGP对等体
​
​
[r3]bgp 64512  ---联邦成员设备启动BGP进程需要使用成员AS号
[r3-bgp]router-id 3.3.3.3
[r3-bgp]confederation id 3456  ----定义本地的联邦AS号
[r3-bgp]peer 10.1.13.1 as-number 100
[r3-bgp]peer 4.4.4.4 as-number 64512  ---联邦成员之间建立IBGP对等体关系使用成员AS号
[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[r3-bgp]peer 4.4.4.4 next-hop-local
​
​
[r4]bgp 64512
[r4-bgp]router-id 4.4.4.4
[r4-bgp]confederation id 3456
[r4-bgp]peer 3.3.3.3 as-number 64512
[r4-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[r4-bgp]confederation peer-as 64513  ---在需要建立联邦的EBGP对等体关系之前,在设备上告知本地设备联邦AS内部还有哪些成员AS号。
[r4-bgp]peer 5.5.5.5 as-number 64513
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r4-bgp]peer 5.5.5.5 ebgp-max-hop  ---- 将TTL值修改为最大,因为在一个AS内部,无法确定建邻所需要经过的跳数。
​
​
[r5]bgp 64513
[r5-bgp]router-id 5.5.5.5
[r5-bgp]confederation id 3456
[r5-bgp]confederation peer-as 64512
[r5-bgp]peer 4.4.4.4 as-number 64512    
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[r5-bgp]peer 4.4.4.4 ebgp-max-hop 
[r5-bgp]peer 4.4.4.4 next-hop-local
[r5-bgp]peer 6.6.6.6 as-number 64513    
[r5-bgp]peer 6.6.6.6 connect-interface LoopBack 0
[r5-bgp]peer 6.6.6.6 next-hop-local
[r5-bgp]peer 10.1.25.2 as-number 200
​
​
​
[r6]bgp 64513
[r6-bgp]router-id 6.6.6.6
[r6-bgp]confederation id 3456
[r6-bgp]peer 5.5.5.5 as-number 64513
[r6-bgp]peer 5.5.5.5 connect-interface LoopBack 0</span></span>
联邦和反射器实验

BGP路由优选规则

PL LAO MEN----漂亮老男人

任何一条BGP路由在参与优选之前都必须先经过检查。设备会检查BGP路由的Next-hop属性是否可达,如果不可达,则BGP路由被视为不可用,该路由将无论如何不会被优选,也不会被设备使用或者通告给其他对等体。-----BGP路由优选的前提。

属性名称 传播范围 默认值 评判标准
PV 不传播 0 越大越优
LP AS内部 100 越大越优
AS-Path 所有BGP对等体之间 空列表 越小越优
OGN 所有BGP对等体之间 根据起源类型决定 i>e>?
MED 所有BGP对等体之间 默认继承全局路由表中的开销 越小越优

PV是华为私有的属性,可以理解为权重的概念,数值越大,对应的路由的优先级越高。并且PV值是所有选路规则中的第一条规则,所以,该属性也是本设备上选路最方便的属性

PV属性只能在本地生效,仅具有本地意义,该属性无法被传递给任何BGP对等体

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">方法一:全局修改
[r4]bgp 400
[r4-bgp]peer 10.1.34.3 preferred-value 6000
​
​
方法二:精细化修改
1、抓流量
[r4]ip ip-prefix PV permit 1.1.1.0 24
​
2、做策略
[r4]route-policy PV permit node 10
[r4-route-policy]if-match ip-prefix PV
[r4-route-policy]apply preferred-value 60000
[r4]route-policy PV permit node 20
​
3、调用
[r4-bgp]peer 10.1.24.2 route-policy PV import </span></span>

LP属性是本地优先级意义,默认值为100;LP属性只能在IBGP对等体之间传递,而不能在EBGP对等体之间传递。如果路由在传递到本地时不携带LP属性,则BGP在决策时使用默认参数值(100)来进行计算,该属性越大越优

该属性经常被用来干涉AS内部选路

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">方法一:全局修改
    LP属性是IBGP对等体之间存在传播性,故想要影响其他设别,只能在始发路由器上修改默认参数值。修改后,不管对端是谁,路由是多少,全部都会被修改。
[r3]bgp 234
[r3-bgp]default local-preference 1000  ---在始发路由器,修改传播路由时,默认添加的参数值。
​
​
方法二:精细化修改
[r4]ip ip-prefix LP permit 10.11.0.0 16
​
[r4]route-policy LP permit node 10
[r4-route-policy]if-match ip-prefix LP
[r4-route-policy]apply local-preference 2000
[r4]route-policy LP permit node 20
​
[r4-bgp]peer 2.2.2.2 route-policy LP import </span></span>

AS-Path属性

一台路由器将BGP路由通告给自己的EBGP对等体时,会将本地的AS号插入到该路由原有的AS-Path属性之前。AS_Path属性实际上有长度的列表

  • 实现EBGP路由的环路避免

    • 路由器收到BGP路由时,会检查该属性的所有参数值,如果有任意一个参数值与本地的AS号数值相同,则路由器忽略这条BGP路由更新。
  • 用于BGP路由优选规则

    • 该属性的长度越短,代表这条路径距离目的地所经过的AS少,故选择长度短的路由最优。

该属性只会在EBGP对等体之间传播时被修改,而IBGP对等体之间不会修改该属性

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">属性的表示形式
100 200 300---->不管在选路还是防环角度,所有信息都会被关注
100 {200 300}--->在防环角度,所有内容关注;在选路角度{}内看做一个整体
100 (200 300)--->在防环角度,所有内容关注;在选路角度,忽略()内的内容</span></span>
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r1]ip ip-prefix AS permit 10.13.0.0 16
​
[r1]route-policy AS permit node 10
[r1-route-policy]if-match ip-prefix AS
[r1-route-policy]apply as-path 11 22 33 overwrite 
​
[r1-bgp]peer 10.1.13.3 route-policy AS export 
​
​
  additive               Append to original As Number  ---添加
        在原有的AS-Path属性的基础上添加配置的AS号,在最前方添加。
  overwrite              Overwrite original As Number  ---覆盖
        直接替换原有的AS-Path属性参数内容
  两个参数在出方向和入方向调用的效果不同,需要根据不同的需求来进行配置</span></span>

注意:AS_Path属性是BGP非常重要的属性,EBGP路由的防环依赖于该属性,因此如果处于影响路由选路的目的修改该属性,操作必须非常谨慎,一般情况下,不建议修改该属性。如果非要修改,则建议添加或覆盖的AS号为曾经出现过的AS号

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r2]ip ip-prefix aa permit 10.14.0.0 16
​
[r2]route-policy aa permit node 10
[r2-route-policy]if-match ip-prefix aa
[r2-route-policy]apply origin egp 23
[r2]route-policy aa permit node 20
​
[r2-bgp]peer 10.1.24.4 route-policy aa export </span></span>

MED----多出口鉴别属性

MED属性的取值是继承了IGP协议的度量值

MED属性是可以传递给自己的EBGP对等体的,又因为AS-BY-AS规则,该属性在IBGP对等体之间传递时不变

MED属性可以将本地到达目的地的开销值告知给其他AS的路由器。而其他AS的路由器可以依靠该属性值来选择去往目的地的流量走向。也就是说,MED属性是唯一一个可以影响到其他AS的属性。----在本AS内部通过路由策略来调整路径属性,从而达到影响他人的效果。

BGP规定:非本地始发的BGP路由信息,在传递给自己的EBGP对等体时,将MED值修改为0

BGP路由信息的发布,一般情况下,均由边界设备完成,并且是所有边界设备均需要进行路由发布

MED的传播范围只能是在发布该路由的AS以及直连的AS内部

总结

  • MED值默认初始值不为0,而是集成了路由表中该路由条目的开销值,所以,MED参数可以反映到达目标网段在本AS内部的开销大小,通过这个参数,别的AS的流量再进入本AS时可以选择开销较小的入口进入。通过修改该属性,可以影响其他AS的流量流入本AS的路径。

  • 若本地通过IBGP对等体学习到一条BGP路由,其中存在MED数值,之后需要将这条路由通告给其他EBGP对等体时将不再携带MED属性。这种设置会导致选路不佳,所以建议如果存在多组边界设备需要将相同路由信息发布给EBGP对等体时,所有边界设备均发布路由。

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">1、抓流量
[r2]ip ip-prefix MED permit 10.14.0.0 16
​
2、做策略
[r2]route-policy MED permit node 10
[r2-route-policy]if-match ip-prefix MED
[r2-route-policy]apply cost 20
[r2]route-policy MED permit node 20
​
3、调用
[r2-bgp]peer 10.1.24.4 route-policy MED export 
​
​
​
[r4-bgp]default med 10  ---全局修改
    全局修改方式,只能针对于本地聚合路由或者重发布引入的路由信息生效,并且是在传递给EBGP对等体时才会携带。</span></span>

MED属性作为最常用于控制EBGP之间选路的属性,在进行选路对比时,必须要求选路规则的前五条规则完全相同,尤其注意AS_Path属性,要求AS_Path属性中的内容、顺序、长度完全相同,才会对比MED属性,否则会跳过第六条优选规则,直接比较第七条

BGP负载均衡

前提条件----BGP路由优选规则的1至8条规则中需要比较的路径属性完全相同

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">1、下一跳不同
2、PV、LP值相同
3、都是聚合路由或者都不是聚合路由。
4、起源码相同,MED相同
5、都是EBGP路由或都是IBGP路由。
6、AS内部的开销值相同
7、AS_Path完全相同--->内容、顺序、长度均相同。</span></span>
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r4-bgp]maximum load-balancing 2  --->修改BGP路由条目的最大负载条目为2,默认为1。</span></span>

当满足前置条件后,并修改了BGP路由条目的最大负载数后。设备可以实现负载均衡效果,在BGP表单中还是只会选择出一条最优路由,但是在路由表中,会加入最优路由和次优路由。并且在实现负载分担后,无论本地是否配置了next-hop-local命令,本地设备都会向自己的IBGP对等体发布路由时,将下一跳修改为本地

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">[r4-bgp]load-balancing as-path-ignore   ---在设备判断负载分担时,忽略对AS-path属性的检查</span></span>
BGP的社团属性

社团属性类似于路由的"标记",我们可以针对特定的路由信息设定不同的社团属性标记,而下游的设备在执行路由策略时,可以通过社团属性数值来匹配这些路由信息

常见社团属性名称 数值 用途
internet 0x00000000 代表所有BGP路由信息
no-export 0xFFFFFF01 不能通告给EBGP对等体(不包含联邦之间的EBGP对等体关系)
no-advertise 0xFFFFFF02 不能通告给任何BGP对等体
no-export-subconfed 0xFFFFFF03 不能通告给EBGP对等体和联邦的EBGP对等体
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">1、抓流量
[r1]ip ip-prefix aa permit 1.1.1.1 32
​
2、做策略----给抓取到的流量打上社团属性标记
[r1]route-policy com permit node 10
[r1-route-policy]if-match ip-prefix aa
[r1-route-policy]apply community no-advertise
​
3、调用策略
[r1-bgp]peer 12.0.0.2 route-policy com export 
​
4、开启社团属性传播功能
    默认情况下,大部分厂商都禁止传递社团属性参数
[r1-bgp]peer 12.0.0.2 advertise-community  ---开启社团属性的传播性</span></span>
社团属性应用场景
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">规定:
    业务A--->100:111    业务B--->100:222
​
1、设定策略,定义社团属性标记
[r1]route-policy com-1 permit node 10
[r1-route-policy]apply community 100:111
[r1]route-policy com-2 permit node 10
[r1-route-policy]apply community 100:222
​
2、在发布路由信息时调用
[r1-bgp]network 172.16.1.0 24 route-policy com-1
[r1-bgp]network 172.16.2.0 24 route-policy com-1
[r1-bgp]network 172.16.3.0 24 route-policy com-2
[r1-bgp]network 172.16.4.0 24 route-policy com-2
​
3、开启社团属性的传播功能
[r1-bgp]peer 10.1.12.2 advertise-community
[r2-bgp]peer 10.1.23.3 advertise-community
​
需求:在R2设备上配置
1、对业务A的流量拒绝
2、对业务B的流量打上no-export标记
​
4、使用社团属性过滤器来抓取社团属性标记
[r2]ip community-filter 1 permit 100:111
[r2]ip community-filter 2 permit 100:222
​
5、做策略
[r2]route-policy com deny node 10
[r2-route-policy]if-match community-filter 1
[r2]route-policy com permit node 20
[r2-route-policy]if-match community-filter 2
[r2-route-policy]apply community no-export additive ---additive参数是代表在之前的社团属性中直接添加新的标记,否则会直接覆盖。
[r2]route-policy com permit node 30
​
6、调用策略
[r2-bgp]peer 10.1.12.1 route-policy com import </span></span>
AS路径过滤器

针对不同的路由信息中的AS_Path属性来抓取不同的流量,从而对这些流量执行相同的策略

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">需求:
1、禁止R3将始发于AS 100的路由传递给R5
2、R4将始发于AS 200的路由传递给R5时,修改开销值
​
​
​
1、抓取流量---使用AS-Path-Filter
[r3]ip as-path-filter 1 deny _100$
[r3]ip as-path-filter 1 permit .*  ---允许所有
​
2、调用
[r3-bgp]peer 10.1.35.5 as-path-filter 1 export 
​
​
​
​
1、抓取流量
[r4]ip as-path-filter 1 permit ^200$
​
2、做策略
[r4]route-policy aa permit node 10  
[r4-route-policy]if-match as-path-filter 1
[r4-route-policy]apply cost 10000   
[r4]route-policy aa permit node 20
​
3、调用
[r4-bgp]peer 10.1.45.5 route-policy aa export </span></span>

AS-Path-Filter过滤器末尾隐含拒绝所有

正则表达式

  • 普通字符-----所有的大小写字母、数字、标点符号

  • 特殊字符-----具备特殊含义的字符

特殊字符 功能
^ 行首
$ 行尾
* 匹配子正则表达式0次或多次
+ 匹配子正则表达式1次或多次
? 匹配子正则表达式0次或1次
. 匹配任意单个字符
_下划线 可以匹配括号、逗号或空格
\ 转义字符
X|Y 或关系,匹配X或Y
[xyz] 匹配正则表达式中包含的任意一个字符,[123]--->匹配字符串255中的2
[^xyz] 匹配正则表达式中未包含的任意一个字符
()括号 括号内看做一个整体
作业---策略实验
相关推荐
ServBay10 小时前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户9623779544812 小时前
CTF 伪协议
php
BingoGo3 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack3 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo4 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack4 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack5 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo5 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack6 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php