BGP路由优选规则的深入了解

描述

  BGP路由优选规则

  BGP是一个应用非常广泛的边界网关路由协议,被部署于大型的网络环境中。它能够支持大规模的网络,能够运载IP骨干网络中大批量的路由前缀并且在AS之间灵活的传递。BGP拥有丰富的路径属性,以及路由策略部署工具,正是由于这些特点,使得BGP在路由操控和优选决策上变得非常机动。在BGP网络设计中,针对BGP路由各种路径属性的操作和BGP网络设计都将影响路由的优选,从而对网络的流量产生影响,因此掌握BGP路由的优选规则十分之重要。本文全面、深入地探讨BGP的选路规则,并且结合一个完整的实验针对每条选路规则加以验证,从而加深对BGP路由优选规则的理解。

  预备知识:

  BGP基础知识(BGP的概念、状态机、邻居关系、水平分割规则、同步规则等)

  BGP路径属性

  BGP路由策略部署工具(route-policy、手工汇总、Ip-prefix等)

  BGP路由反射器及联邦的概念及部署

  

状态机

  一台BGP路由器有可能学习到关于同一个目的路由前缀的多条BGP路径,当这些BGP路径都是valid有效时,路由器将如何优选呢?BGP的众多路径属性如何影响BGP的路径决策呢?如何根据业务需要操控BGP路由优选呢?BGP定义了一整套详细的选路规则,使得BGP路由器能够在任何复杂的、冗余的网络环境下,决策出一条最优(Best)的路径:

  优选具有最大Preferred-value的路由

  优选具有最大Local_Preference的路由

  优选起源于本地的路由

  优选AS-Path最短的路由

  比较Origin:(IGP 》 EGP 》 Incomplete)

  优选MED最小的路由

  优选eBGP邻居发来的路由

  优选到BGP下一跳的IGP Metric较小的路由

  BGP负载均衡

  优选Cluster-List最短的路由

  优选RouterID最小的BGP邻居发来的路由

  优选peer ip地址最小的邻居发来的路由

  实验环境介绍

状态机

  IP地址规划如图所示,设备互联IP采用10.1.xy.x/24的编址,x及y为设备编号。这种编址方式能够在实验过程中更好地观察现象。同时所有的设备配置Loopback0接口,IP为x.x.x.x/32,其中x为设备编号。这个接口只作为设备RouterID以及建立IBGP邻居关系时使用。

  AS345中,R3、R4、R5运行一个IGP:OSPF,在OSPF中,各设备宣告自己的直连接口以及Loopback0接口所在网段,但R3不在接口GE0/0/0口上激活OSPF,R5不在GE0/0/1上激活OSPF,这两个直连链路视为AS外的链路,不将其所在网段引入到OSPF中。

  各设备的BGP连接情况如下:

  

状态机

  其中,IBGP邻居关系的建立基于Loopback0口,EBGP邻居关系的建立基于直连物理接口。

  初始化配置注:以下罗列的设备配置中,省略设备接口IP地址的配置。

  R1的配置如下:

[R1] bgp 100
[R1-bgp] router-id 1.1.1.1
[R1-bgp] peer 10.1.13.3 as-number 345

R2的配置如下:

[R1] bgp 200
[R1-bgp] router-id 2.2.2.2
[R1-bgp] peer 10.1.25.5 as-number 345

R3的配置如下:

[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0.0.0.0
[R3-ospf-1-area-0.0.0.0] network 10.1.34.3 0.0.0.0
[R3-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.0] quit
[R3-ospf-1] quit

[R3] bgp 345
[R3-bgp] router-id 3.3.3.3
[R3-bgp] peer 10.1.13.1 as-number 100
[R3-bgp] peer 4.4.4.4 as-number 345
[R3-bgp] peer 4.4.4.4 connect-interface loopback 0
[R3-bgp] peer 4.4.4.4 next-hop-local  #R3对R4执行next-hop-local
[R3-bgp] quit

R4的配置如下:

[R4] ospf 1 router-id 4.4.4.4
[R4-ospf-1] area 0.0.0.0
[R4-ospf-1-area-0.0.0.0] network 10.1.34.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0] network 10.1.45.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0] network 4.4.4.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0] quit
[R4-ospf-1] quit

[R4] bgp 345
[R4-bgp] router-id 4.4.4.4
[R4-bgp] peer 3.3.3.3 as-number 345
[R4-bgp] peer 3.3.3.3 connect-interface loopback 0
[R4-bgp] peer 5.5.5.5 as-number 345
[R4-bgp] peer 5.5.5.5 connect-interface loopback 0
[R4-bgp] quit

R5的配置如下:

[R5] ospf 1 router-id 5.5.5.5
[R5-ospf1] area 0.0.0.0
[R5-ospf-1-area-0.0.0.0] network 10.1.45.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0] network 5.5.5.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0] quit
[R5-ospf-1] quit

[R5] bgp 345
[R5-bgp] router-id 5.5.5.5
[R5-bgp] peer 10.1.25.2 as-number 200
[R5-bgp] peer 4.4.4.4 as-number 345
[R5-bgp] peer 4.4.4.4 connect-interface loopback 0
[R5-bgp] peer 4.4.4.4 next-hop-local  #R5对R4执行next-hop-local
[R5-bgp] quit

  上述配置完成后,基本的实验环境就搭建好了,接下去我们开始逐条验证BGP的选路规则,每个选路规则的验证过程中都会增加一些配置用于验证,在一条选路规则验证完成后,将设备的配置恢复成我们现在所完成的配置,再验证下一条规则。

  规则详解及实验验证优选具有最大Preferred_value的路由

  规则描述

  当一台路由器学习到关于同一个路由前缀的多条BGP路由时,首先会比较这些路由在路由器本地的Preferred_value值,优选拥有最大Preferred_value值的路由。

  Preferred_value属性回顾

  Preferred_value是一个华为私有的路径属性,可以理解为该路由的权重值。范围是0-65535,默认值为0,越大越优先。这个值的作用范围是本路由器(不传递),该值既不会被包含在update消息中,也不会传递给任何BGP邻居。

  规则验证

  

状态机

  现在我们在R1和R2上各配置一个Loopback1接口,配置IP地址:100.0.1.1/24,然后将这条路由network进BGP。

  R1的配置如下:

[R1] interface loopback 1
[R1-loopback1] ip address 100.0.1.1 24
[R1-loopback1] quit

[R1] bgp 100
[R1-bgp] network 100.0.1.0 24
[R1-bgp] quit

R2的配置如下:

[R2] interface loopback 1
[R2-loopback1] ip address 100.0.1.1 24
[R2-loopback1] quit

[R2] bgp 200
[R2-bgp] network 100.0.1.0 24
[R2-bgp] quit

如此一来,R1将会传递BGP路由100.0.1.0/24给R3,而R3从自己的eBGP邻居R1学习到的这条路由也会更新给R4;同理R5也会将学习自eBGP邻居R2的路由100.0.1.0/24更新给R4,那么对于R4来说就同时从R3及R5学习到100.0.1.0/24的路由,R4将如何优选?现在,我们希望通过操控路由的Preferred_valuel值来让R4优选R5传递过来的路由。

 

状态机

 

在R4上配置上述命令,事实上是将R5传递过来的所有路由的preferred-value都设置为10,而R3传递过来的路由的preferred-value则在本地赋予默认值0,这么一对比,当然是优选R5所传递过来的路由了。但是这个方法“颗粒度”太大,如果我们只是想针对特定的路由设置preferred-value呢?例如:

 

状态机

 

在R1及R2上新增100.0.2.0/24网段并注入BGP。R1、R2的新增配置这里不再赘述。

那么实现上图描述的需求,R4的配置可以变更成:

[R4] ip ip-prefix 1 permit 100.0.1.0 24
[R4] ip ip-prefix 2 permit 100.0.2.0 24

[R4] route-policy RP1 permit node 10
[R4-route-policy] if-match ip-prefix 1
[R4-route-policy] apply preferred-value 10  #设置所匹配路由的Preferred_value
[R4] route-policy RP1 permit node 20  #匹配其他路由

[R4] route-policy RP2 permit node 10
[R4-route-policy] if-match ip-prefix 2
[R4-route-policy] apply preferred-value 10
[R4] route-policy RP2 permit node 20

bgp 345
peer 3.3.3.3 route-policy RP1 import
peer 5.5.5.5 route-policy RP2 import

注意:上述配置中route-policy RP1 permit node 20及route-policy RP2 permit node 20必须配置,因为route-policy隐含deny any,因此如果这两个node不加的话,相当于是只放行node 10中match住的路由。完成配置后:

[R4]display bgp routing-table

BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 3.3.3.3 0 100 10 100i
* i 5.5.5.5 0 100 0 200i
*>i 100.0.2.0/24 5.5.5.5 0 100 10 200i
* i 3.3.3.3 0 100 0 100i

我们看到,在R4上,100.0.1.0/24的路由,优选的是R3传递过来的;100.0.2.0/24的路由,优选的是R5传递过来的。这就实现了我们的需求。事实上还可以进一步查看路由的详细信息,例如查看100.0.1.0/24这条路由:

[R4]display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24: #路径1
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h01m43s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 10, valid, internal, best, select,
active, pre 255, IGP cost 1 # best字样表示本路径被优选
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24: #路径2
From: 5.5.5.5 (5.5.5.5)
Route Duration: 00h01m43s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 200, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost
1, not preferred for PreVal  #这里说明了本路径没被优选的原因:Pre_Val值
Not advertised to any peer yet

OK,完成了规则一的测试后,我们将用于验证本条规则的相关配置删除(恢复到本实验的初始化配置),继续看下一条规则。

  1. 优选具有最大Local_Pref的路由
规则描述

当一台BGP路由器学习到关于同一个路由前缀的多条BGP路由时,首先会比较这些路由在本地的Preferred_value值,优选拥有最大Preferred_value值的路由。如果路由的Preferred_value值都相等,则比较各自携带的Local_preference值,优选具有最大Local_preference值的路由。

Local_Preference属性回顾

Local_preference是公认自决属性,值越大越优先。Local_Preference值只能在IBGP Peer之间传递,不能在EBGP Peer之间传递。本地始发的路由默认Local_Preference值为100。可用bgp default local-preference 修改默认值。

BGP路由器在向其EBGP邻居发送路由更新时,不能携带LP属性,但是对方会在本地为这条路由赋一个默认值,也就是100,然后再传递给自己的IBGP邻居。

本地network及重发布的路由,LP默认100,并能在AS内向其他IBGP邻居传输,传输过程中除非部署策略,否则LP不变。

规则验证
 

状态机

 

现在实验环境恢复成初始化环境(删除上一个选路规则验证所做的配置)。在R1及R2上都配置Loopback1口,IP为100.0.1.1/24,两台路由器都将这个子网network进BGP。

R1的配置如下:

[R1] interface loopback 1
[R1-loopback1] ip address 100.0.1.1 24
[R1-loopback1] quit

[R1] bgp 100
[R1-bgp] network 100.0.1.0 24
[R1-bgp] quit

R2的配置如下:

[R2] interface loopback 1
[R2-loopback1] ip address 100.0.1.1 24
[R2-loopback1] quit

[R2] bgp 200
[R2-bgp] network 100.0.1.0 24
[R2-bgp] quit

我们要通过操控Local_Preference让R4优选R3传递过来的100.0.1.0/24路由。那么可以在R3上对R4做export方向的策略,修改路由的LP值,将该值设置为200;而R5这头则保持默认,也就是100。如此一来在R4上,关于100.0.1.0/24的两条BGP路径,首先Preferred_Value值相等,那么继续比较Local_Preference,优选值更大的,因此来自R3的路由被优选。

R3的配置变更如下:

[R3] ip ip-prefix 1 permit 100.0.1.0 24

[R3] route-policy RP permit node 10
[R3-route-policy] if-match ip-prefix 1
[R3-route-policy] apply local-preference 200
[R3] route-policy RP permit node 20
[R3-route-policy] quit

[R3] bgp 345
[R3-bgp] peer 4.4.4.4 route-policy RP export

在R4上验证一下:

[R4]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 3.3.3.3 0 200 0 100i
* i 5.5.5.5 0 100 0 200i

从上面的输出可以看到关于100.0.1.0/24的路由,R4优选了来自R3的路由更新。

完成了本规则的验证后,我们将用于验证本条规则的相关配置删除,恢复成初始化配置。继续看下一条规则。

  1. 优选起源于本地的路由
规则描述

如过此前两条规则都无法做出决策,例如两条BGP路由的 Preferred_value 及Local_preference值都相等。则优选本地生成的路由(本地生成的路由优先级高于从邻居学来的路由)。

本地生成的路由包括通过network命令或import-route命令引入的路由、手动聚合路由和自动聚合路由。

  • 优选聚合路由(聚合路由优先级高于非聚合路由)。
  • 通过aggregate命令生成的手动聚合路由的优先级高于通过summary automatic命令生成的自动聚合路由。
  • 通过network命令引入的路由的优先级高于import-route命令引入的路由。
  1. 优选AS-Path最短的路由
规则描述

如果前面几条规则都无法决策出最优路径,则比较路由的AS_PATH,优选AS_PATH最短的路由。

规则验证
 

状态机

 

现在实验环境恢复成初始化配置,同样让R1及R2引入100.0.1.0/24路由。我们要通过操控AS_PATH属性让R4优选R5传递过来的100.0.1.0/24路由。那么可以在R3上对R1做import方向的策略,使得R3将R1发送过来的路由在其原有AS_PATH值的基础上,增加一个100的AS号,使得路由的AS_PATH长度加长。如此一来在R4上,关于100.0.1.0/24的这两条BGP路径,首先Prefered_Value相等,那么继续比较Local_Preferecne,也相等,再往下比较,都不是本地始发的路由,那么就比较到了本条规则:优选AS_PATH最短的,因此R4将优选R5传递过来的100.0.1.0/24路由。

R3的配置如下:

[R3] ip ip-prefix 1 permit 100.0.1.0 24
[R3] route-policy RP permit node 10
[R3-route-policy] if-match ip-prefix 1
[R3-route-policy] apply as-path 100 additive
[R3-route-policy] quit

[R3] route-policy RP permit node 20
[R3-route-policy] quit

[R3] bgp 345
[R3-bgp] peer 10.1.13.1 route-policy RP import

完成配置后,在R4上验证一下:

[R4]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 5.5.5.5 0 100 0 200i
* i 3.3.3.3 0 100 0 100 100i

从上面的输出可以看到,R4优选了R5传递过来的100.0.1.0/24路由。当然,可以进一步查看路由的详细信息:

[R4]display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24:
From: 5.5.5.5 (5.5.5.5)
Route Duration: 00h06m45s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 200, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select,
active, pre 255, IGP cost 1
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24:
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h02m37s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP
cost 1, not preferred for AS-Path #这里指出了本路径没有被优选的原因。
Not advertised to any peer yet

当然,也可在R1上对R3做export方向的策略,只不过结果有所不同,可以自己观察和分析一下现象和原因。

注意:

使用route-policy来修改BGP路由的AS_PATH:

  • apply as-path xx additive 是在已有AS_PATH基础上追加xx
  • apply as-path xx overwrite 是将已有AS_PATH值替换(覆盖)成xx
  • apply as-path none overwrite  清空AS_PATH

使用route-policy来修改BGP路由的AS_PATH,在Cisco设备上只能在AS之间(EBGPpeer之间)执行,因为as-path只会在离开AS的时候发生改变。我司设备则没有这个限制,也就是说即使在IBGP peer之间应用策略来修改AS_PATH也是可以的。但是针对AS_PATH的改动必须严格谨慎。

执行bestroute as-path-ignore命令后,BGP选路时,忽略AS_Path的比较,需慎用。BGP的路由防环很大程度上依赖于AS_PATH,因此任何对AS_PATH的策略在实施的时候都应该考虑周全。

  1. Origin(IGP > EGP > Incomplete)
规则描述

本规则比较origin code,优选次序为:i > e > ?

 

状态机

   

状态机

 
规则验证
 

状态机

 

现在,我们继续将实验环境恢复成初始化状态。在这个规则的验证中,在R1上,改用import-route的方式来注入100.0.1.0/24路由,R2则仍保持network的方式注入。

那么R1的配置变更如下

[R1] ip ip-prefix 1 permit 100.0.1.0 24
[R1] route-policy RP permit node 10
[R1-route-policy] if-match ip-prefix 1
[R1-route-policy] quit

[R1] bgp 100
[R1-bgp] peer 10.1.13.3 as-number 345
[R1-bgp] undo network 100.0.1.0 24
[R1-bgp] import-route direct route-policy RP

或者使用route-policy来修改路由的origin属性,同样是修改R1的配置:

[R1] route-policy RP permit node 10
[R1-route-policy] apply origin incomplete
[R1] bgp 100
[R1-bgp] peer 10.1.13.3 as-number 345
[R1-bgp] network 100.0.1.0 24 route-policy RP

这 样 一 来 R1引 入 的 100.0.1.0/24 的 路 由 origin 属性 值 就 为 incomplete, 而 R2引 入 的100.0.1.0/24的路由origin属性值为IGP。完成配置后验证一下:

[R4] display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 5.5.5.5 0 100 0 200 i
* i 3.3.3.3 0 100 0 100 ?

当然,可以进一步看详细信息:

[R4] display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24: #路径1
From: 5.5.5.5 (5.5.5.5)
Route Duration: 01h01m29s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 200, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select, active, pre 255, IGP cost 1
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24: #路径2
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h03m11s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin incomplete, MED 0, localpref 100, pref-val 0, valid, interna
l, pre 255, IGP cost 1, not preferred for Origin  #由于Origin为?因此输给了路径1
Not advertised to any peer yet

如此一来本条规则就验证完成了。删除用于验证本条规则所做的配置,将各设备的配置恢复成实验初始化配置,继续看下一条规则。

  1. 优选MED最小的路由
规则描述

如果前面的规则都无法做出决策。那么比较这些路由的MED,优选拥有最小MED值的路由。

MED属性

MED属性为可选非传递属性,值越小越优先,一般用于AS之间影响BGP路由决策

 

状态机

 
规则详解

BGP只比较来自同一个AS(不包括联盟的子AS)的路由的MED值。即,只有两条路由的AS_SEQUENCE(不包括AS_CONFED_SEQUENCE)属性的第一个AS号相同时,BGP才会比较二者的MED值。

如果路由没有MED属性,BGP选路时将该路由的MED值按缺省值0来处理;执行bestroutemed-none-as-maximum命令后,BGP选路时将该路由的MED值按最大值4294967295来处理。

执行compare-different-as-med命令后,BGP将强制比较来自不同自治系统中的邻居的路由的MED值。除非能够确认不同的自治系统采用了同样的IGP和路由选择方式,否则不要使用compare-different-as-med命令(可能产生环路)。

执行bestroute med-confederation命令后,只有当AS_Path中不包含外部AS号(不属于联盟的子AS),且AS_CONFED_SEQUENCE的第一个AS号相同时,才能比较MED值的大小。

执行deterministic-med命令后,将消除路由接收顺序对选路结果的影响。

规则验证
 

状态机

 

针对本规则的验证,我们将环境做了小小的变更,R2不再属于AS200了,我们把他规划到AS100,至于为什么,这里相信大家已经都想到了。R1、R2同时向AS345发布路由100.0.1.0/24,最终R4将学习到两条更新。那么现在我们的需求是,通过操控MED值,让R4优选从R5更新过来的路由。方法很简单,R5将100.0.1.0/24更新给R4,MED为默认值0,那么我们只要在R1更新路由给R3时,携带上MED=999,那么这条路由再经由R3更新给R4时,也会一并将MED携带,最终,R4将优选MED小的路径,也就是R5传递过来的路由。

R2及R5的配置变更这里就不再赘述了。

重点看R1的配置:

[R1] ip ip-prefix 1 permit 100.0.1.0 24
[R1] route-policy RP permit node 10
[R1-route-policy] if-match ip-prefix 1
[R1-route-policy] apply cost 999  #设置MED值为999

[R1] bgp 100
[R1-bgp] network 100.0.1.0 24
[R1-bgp] peer 10.1.13.3 as-number 345
[R1-bgp] peer 10.1.13.3 route-policy RP export

完成上述配置后,仍然在R4上验证一下:

[R4]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 5.5.5.5 0 100 0 100i
* i 3.3.3.3 999 100 0 100i

从上面的输出可以看到,R4优选了R5传递过来的100.0.1.0/24的路由。因为从R3传递过来的路由MED为999,更大。

到此本条规则就验证完成了,现在删除用于验证本条规则的配置,将设备恢复成本实验初始化配置。

  1. 优选EBGP邻居发来的路由
规则描述

经过前面几条规则的比较如果BGP仍然无法决策出最优路由,那么在本规则中比较路由的类型。相对于iBGP邻居更新来的路由,BGP路由器将优选eBGP邻居传来的路由。

规则验证
 

状态机

 

为了验证本条规则,我们在初始化配置的基础上,在R3-R5之间建立一条iBGP的邻居关系。这样一来R3会将自己从R1学习到的BGP路由传递给iBGP邻居R5,而R5又会从另一侧学习到eBGP邻居R2更新过来的100.0.1.0/24路由,那么R5将如何优选呢?

变更的配置这里就不再赘述了,这里有一个小细节要注意,那就是R3别忘了要配置一条peer5.5.5.5 next-hop-local,否则R5自R3学习到的路由会不可用。完成配置后,我们在R5上观察一下:

[R5] display bgp routing-table
BGP Local router ID is 5.5.5.5
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 100.0.1.0/24 10.1.25.2 0 0 100i
* i 3.3.3.3 0 100 0 100i

从上面的输出我们可以看到R5优选了来自R2的路由,可以进一步查看路由的详细信息:

[R5] display bgp routing-table 100.0.1.0
BGP local router ID : 5.5.5.5
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24:
From: 10.1.25.2 (10.1.25.2)
Route Duration: 00h11m54s
Direct Out-interface: GigabitEthernet0/0/1
Original nexthop: 10.1.25.2
Qos information : 0x0
AS-path 100, origin igp, MED 0, pref-val 0, valid, external, best, select, active, pre 255
Advertised to such 2 peers:
4.4.4.4
3.3.3.3
BGP routing table entry information of 100.0.1.0/24:
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h02m14s
Relay IP Nexthop: 10.1.45.4
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP
cost 2, not preferred for peer type #这里指出了为何本路径不是best
Not advertised to any peer yet
  1. 优选到BGP下一跳IGP Metric较小的路由
规则描述

如果一台路由器收到关于同一个路由前缀的多跳BGP路径更新,并且经过前面几个规则都无法做出决策,并且这些路径的Next_hop属性值都不相同,那么在本规则中,将比较路由器到这些Next_hop的IGP度量值,优选到Next_hop度量值最小的那条BGP路由。

规则验证一
 

状态机

 

仍然是将实验环境恢复到初始化状态。然后在R1、R2上开设Loopback1接口并配置IP地址:100.0.1.0/24,随后两者都把这条直连路由network进BGP。R1将路由100.0.1.0/24更新给了R3,R3将这条路由又更新给了R4,由于我们在R3上对R4做了next-hop-local,因此R4在收到这条路由时路由的Next_hop属性值为3.3.3.3;同理,R4从R5收到的100.0.1.0/24路由的Next_hop为5.5.5.5。而3.3.3.3及5.5.5.5对于R4而言又是通过OSPF学习到的。并且此刻在R4上,关于3.3.3.3及5.5.5.5的OSPF metric都是相等的。

现在我们在图中所述的R4连接R3的接口上增加配置:

[R4] interface gigabitEthernet0/0/0
[R4-GigabitEthernet0/0/0] ospf cost 10

如此一来,R4到达3.3.3.3这条路由的OSPF度量值就发生了变化,变得比到5.5.5.5的 OSPF度量值要更大,因此最终本规则将让R4做出路由优选的决策,优选R5传递过来的100.0.1.0/24路由。

[R4] display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24:
From: 5.5.5.5 (5.5.5.5)
Route Duration: 00h20m06s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select,
active, pre 255, IGP cost 1  # IGP cost=1,这的IGP cost事实上是R4学习到的
关于5.5.5.5的ospf路由的cost,可以在R4的路由表中查看。
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24:
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h11m25s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost
10, not preferred for IGP cost #到3.3.3.3的IGP cost变成了10,比到5.5.5.5的IGP
cost要大,因此PK输了。
Not advertised to any peer yet
规则验证二
 

状态机

 

现在我们进一步测试,将网络环境再做点调整:

  • R3-R5之间增加一条iBGP的连接;
  • R4配置为路由反射器RR,R3是她的Client;
  • R2取消network 10.0.1.0/24路由进BGP。

R3增加如下配置:

[R3] bgp 345
[R3-bgp] peer 5.5.5.5 as-number 345
[R3-bgp] peer 5.5.5.5 connect-interface loopback 0
[R3-bgp] peer 5.5.5.5 next-hop-local

R4增加如下配置:

[R4] bgp 345
[R4-bgp] peer 5.5.5.5 reflect-client

R5增加如下配置:

[R5] bgp 345
[R5-bgp] peer 3.3.3.3 as-number 345
[R5-bgp] peer 3.3.3.3 connect-interface loopback 0

这样一来,100.0.1.0/24的路由首先是R3通过iBGP连接直接传给了R5,另一方面又经由路由反射器R4反射给了R5,因此R5将同时从R3及R4学习到100.0.1.0/24的BGP路由。这时候R5怎么决策?注意,由于这两条BGP路由Next_Hop属性值都是3.3.3.3,因此明显,本规则无法做出决策,因为两条路由的Next_hop都相等。只能到下一条规则中PK。

  1. BGP负载均衡
关于BGP负载均衡

严格的说,第十条并不能算得上是路由优选的规则,但是也将影响BGP路由器最终的路由表装载过程,因此也在这里一并探讨。当前面的9条选路原则都无法优选出最优路由时,并且又在BGP进程下面配置了maximum load-balancing [ ebgp | ibgp ] num,那么将执行等价负载均衡,也就是将这些等代价的BGP路径都放进IP路由表使用。

值得注意的是,虽然这些BGP等价路径在本地路由表中都被装载,最终却仍只有一条BGP路径是preferred优选的。只有优选的BGP路由才会被发送给自己的BGP邻居。

具备等价负载均衡条件的候选路径需满足如下条件:

  • 必须有相同的路径属性,如weight、LP、AS_PATH(不仅是长度,整个AS_PATH包括AS号都要相同)、origin code、MED及IGP的Distance值
  • 每一条路径的下一跳都不相同
注意事项
  • 在公网中到达同一目的地的路由形成负载分担时,系统会首先判断最优路由的类型。若最优路由为iBGP路由则只是IBGP路由参与负载分担,若最优路由为eBGP路由则只是eBGP路由参与负载分担,即公网中到达同一目的地的iBGP和eBGP路由不能形成负载分担。
  • 如果到达目的地址存在多条路由,但是这些路由分别经过了不同的AS,缺省情况下,这些路由不能形成负载分担。如果用户需要这些路由参与负载分担,就可以执行load-balancing as-path-ignore命令。配置load-balancing as-path-ignore命令后会改变路由参与负载分担的条件,路由形成负载分担时不再比较AS-Path属性,配置时需要慎重考虑。
  • load-balancing as-path-ignore命令和bestroute as-path-ignore命令互斥,不能同时使能。
iBGP等价负载均衡
 

状态机

 

R4同时从IBGP邻居R3、R5收到100网段的路由,在不执行任何策略的情况下,这些路由通过BGP决策的规则1-8都无法抉择,并且所有的路径属性都相等,具备实施等价负载均衡的条件,命令如下 :

[R4] bgp 345
[R4-bgp] maximum load-balancing ibgp 2

完成配置后,在R4上验证一下:

[R4-bgp]display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4

Local AS number : 345
Paths: 2 available, 1 best, 2 select
BGP routing table entry information of 100.0.1.0/24:
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h11m54s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 12, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select,
active, pre 255, IGP cost 1 #注意虽然配置了maximum-paths,路由表中关于100网段出现
了负载均衡,但R4在BGP优选动作仍然只会优选一条BGP路由,并只将这条路由更新给
BGP邻居
Not advertised to any peer yet

BGP routing table entry information of 100.0.1.0/24:
From: 5.5.5.5 (5.5.5.5)
Route Duration: 00h11m20s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 12, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, select, active, pre
255, IGP cost 1, not preferred for router ID
Not advertised to any peer yet

再看一下R4的全局路由表发生了什么变化:

[R4-bgp]display ip routing-table protocol bgp
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : BGP
Destinations : 1 Routes : 2
BGP routing table status : 
Destinations : 1 Routes : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
100.0.1.0/24 IBGP 255 0 RD 3.3.3.3 GigabitEthernet0/0/0
IBGP 255 0 RD 5.5.5.5 GigabitEthernet0/0/1  

我们看到,两条BGP路径都被R4装载进了路由表。这就是IBGP等价负载均衡。而如果不配置上面的maximum load-balancing ibgp 2命令,默认情况下,R4只会将被优选的路径拿出来放到路由表中。

eBGP等价负载均衡
 

状态机

 
  1. 优选Cluster-List 最短的路由
规则描述

如果经过前面的规则,如果依然无法决策出最优路由,那么将进一步比较候选路由的Cluster_list属性,优选最短Cluster_list的路由。

规则验证
 

状态机

 

首先将用于验证上一个规则的配置删除,把设备恢复成本实验的初始化配置。现在我们将网络环境再做点调整:

  • R3-R5之间增加一条iBGP的连接;
  • R4配置为路由反射器RR,R3是她的Client;
  • R2取消network 10.0.1.0/24路由进BGP。

R3增加如下配置:

[R3] bgp 345
[R3-bgp] peer 5.5.5.5 as-number 345
[R3-bgp] peer 5.5.5.5 connect-interface loopback 0
[R3-bgp] peer 5.5.5.5 next-hop-local

R4增加如下配置:

[R4] bgp 345
[R4-bgp] peer 5.5.5.5 reflect-client

R5增加如下配置:

[R5] bgp 345
[R5-bgp] peer 3.3.3.3 as-number 345
[R5-bgp] peer 3.3.3.3 connect-interface loopback 0

这样一来,100.0.1.0/24的路由首先是R3通过iBGP连接直接传给了R5,另一方面又经由路由反射器R4反射给了R5,因此R5将同时从R3及R4学习到100.0.1.0/24的BGP路由:

display bgp routing-table 100.0.1.0
BGP local router ID : 10.1.45.5
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24: #路径1
From: 3.3.3.3 (10.1.13.3)
Route Duration: 00h10m10s
Relay IP Nexthop: 10.1.45.4
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best
, select, active, pre 255, IGP cost 2
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24: #路径2
From: 4.4.4.4 (10.1.34.4)
Route Duration: 00h09m01s
Relay IP Nexthop: 10.1.45.4
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre
255, IGP cost 2, not preferred for Cluster List
Originator: 10.1.13.3
Cluster list: 10.1.34.4
Not advertised to any peer yet

最终R5将优选来自R3的路由,而不是R4的路由。因为R3更新过来的路由Cluster_List长度为0,而R4更新过来的路由Cluster_List长度为1。

到此本条规则就验证成功了。现在清除用于验证本条规则所做的配置,将设备还原成本实验的初始化配置。

  1. 优选RouterID最小的BGP邻居发来的路由
规则描述

如果经过前面的规则都无法决策出最优路径,则优选RouterID最小的BGP邻居发来的路由。

规则验证
 

状态机

 

在R1及R2上都发布100.0.1.0/24的路由。那么在不做任何配置的情况下,R4将学习到R3及R5传递过来的两条路由。我们什么策略都不做,然后再R4上观察一下:

 

状态机

 

从上面的输出我们可以看到,R4已经优选了R3传递过来的路由,因此规则1-10都无法做出决策,R4最终比较更新这两条路由的邻居的RouterID,显然R3的RouterID3.3.3.3要小于R5的RouterID 5.5.5.5,因此R3传递过来的路由被优选。

规则补充

规则补充:如果路由携带Originator属性,则本规则的PK过程中将比较Originator的大小(不再比较Router ID),并优选Originator最小的路由。

 

状态机

 

在上面的拓扑环境中:

  • R1、R2、R3、R4属于同一个AS1234,AS内运行了OSPF,路由器都宣告各自的Loopback0接口,IP为x.x.x.x/32,x为设备编号。
  • R1-R4;R4-R3;R1-R2;R2-R3基于Loopback建立IBGP邻居关系。
  • R1配置为RR,R4是它的Client;R3配置为RR,R4是它的Client。
  • 在R4上引入44.44.44.0/24进BGP。

那么R1收到R4更新过来的路由,将其反射给R2并携带上Originator及Cluster_list属性值。R3同理。那么最终R2将分别从R1和R3都学习到44.44.44.0/24的路由,R2会如何优选?

  • Pre_val相等
  • Local_Pref相等
  • 都不是起源于本地
  • AS-Path一样长
  • Origin code都是i
  • MED相等
  • 都是IBGP peer发来的
  • NH相等
  • Cluster-list等长
  • 比较BGP邻居的RouterID,注意,这里由于两条路由都携带了originator属性,因此在这一轮的PK中,就不是比较R1和R3的RouterID了,而是比较这两条路由的Originator属性值。结果,由于这两条路由的起源都是R4,因此Originator值相等,都是4.4.4.4,所以本条规则仍无法决策。
  • 那么只能在往下比较了,请看下文。
  1. 优选peer ip地址最小的邻居发来的路由
规则描述

如果经过前面的一系列规则仍然无法优选出最佳路由,那么最后一步将比较邻居的IP地址。这个IP地址是在BGP路由器上的BGP配置进程汇总,peer命令后所指的那个IP。

规则验证
 

状态机

 

仍然看上一个小节最后的实验,在R2上,最终将比较R1及R3的peer ip,在R2上指R1时,我们用的命令是peer 1.1.1.1 as-number 1234;指R3时用的命令是peer 3.3.3.3 as-number 1234,因此R1的地址要小于R3,故优选R1传递过来的44.44.44.0/24路由。

[R2]dis bgp ro 44.44.44.0
BGP routing table entry information of 44.44.44.0/24:

From: 1.1.1.1 (1.1.1.1)
……
AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select,
active, pre 255, IGP cost 2
Originator: 4.4.4.4
Cluster list: 1.1.1.1
BGP routing table entry information of 44.44.44.0/24:
From: 3.3.3.3 (3.3.3.3)
……
AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre
255, IGP cost 2, not preferred for peer address
Originator: 4.4.4.4
Cluster list: 3.3.3.3

​审核编辑:郭婷

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分