首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >周末别人都在玩,我却把BGP11条选路规则背的滚瓜烂熟!

周末别人都在玩,我却把BGP11条选路规则背的滚瓜烂熟!

作者头像
网络技术联盟站
发布2023-03-01 20:45:41
发布2023-03-01 20:45:41
8550
举报
来源:网络技术联盟站 链接:https://www.wljslmz.cn/19918.html
  • BGP路由优选规则
  • 实验环境介绍
  • 规则详解及实验验证
    • 1.优选具有最大Preferred_Value的路由
    • 2.优选具有最大Local_Preference的路由
    • 3.优选起源于本地的路由
    • 4.优选AS_PATH最短的路由
    • 5.依次优选Origin类型为IGP、EGP、Incomplete的路由
    • 6.优选MED最小的路由
    • 7.相对于IBGP路由,优选EBGP路由
    • 8.优选到BGP下一跳IGP度量值最小的路由
    • 9.优选Cluster-List最短的路由
    • 10.优选Router-ID最小的BGP邻居发来的路由
    • 11.优选peer IP地址最小的邻居发来的路由

BGP路由优选规则

在BGP网络设计中,针对BGP路由的各种路径属性的操作都将影响路由的优选,从而对网络的流量产生影响,掌握BGP路由的优选规则十分之重要。

一台路由器有可能学习到多条去往相同目的网络的BGP路由,BGP会在这些路由中选择一条最优的路由。

BGP定义了一整套详细的选路规则,使得路由器能够在任何复杂的、冗余的网络环境下,决策出一条最优的路由:

  1. 优选具有最大Preferred_Value的路由;
  2. 优选具有最大Local_Preference的路由;
  3. 依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由;
  4. 优选AS_Path最短的路由;
  5. 依次优选Origin类型为IGP、EGP、Incomplete的路由;
  6. 优选MED最小的路由;
  7. EBGP路由优于IBGP路由;
  8. 优选到BGP下一跳的IGP度量值最小的路由;
  9. 优选Cluster_List最短的路由;
  10. 优选Router-ID最小的BGP邻居发来的路由;
  11. 优选peer地址最小的邻居发来的路由。

BGP在进行路由优选时,按照如上规则,依序进行判断。例如,当路由器学习到多条到达同一个目的网络的BGP路由时,拥有最大Preferred_Value值的路由将会被优选,如果路由的Preferred_Value相等,则进入下一条规则进行比较,即优选具有最大Local_Preference的路由,如果路由的Local_Preference相等,则继续进入下一条规则进行比较,直到决策出最优路由为止。需要注意的是上述罗列的只是选路规则中比较有代表性的几条,并不是全部规则,另外,不同的厂商在规则的实现上存在一定的差异,而同一个厂商的不同系统软件版本,也存在实现差异。

实验环境介绍

拓扑及描述:

  • IP地址规划如图所示,设备互联IP采用10.1.xy.0/24的编址,x及y为设备编号。这种编址方式能够在实验过程中更好地观察现象。同时所有的设备配置Loopback0接口,IP为x.x.x.x/32,其中x为设备编号。

这个接口地址只作为设备Router-ID以及建立IBGP邻居关系时使用。

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

其中,IBGP邻居关系的建立基于Loopback0口,EBGP邻居关系的建立基于直连物理接口。 初始化配置:

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

R1的配置如下:

代码语言:javascript
复制
[R1] bgp 100
[R1-bgp] router-id 1.1.1.1
[R1-bgp] peer 10.1.13.3 as-number 345

R2的配置如下:

代码语言:javascript
复制
[R2] bgp 200
[R2-bgp] router-id 2.2.2.2
[R2-bgp] peer 10.1.25.5 as-number 345

R3的配置如下:

代码语言:javascript
复制
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 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] 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

R4的配置如下:

代码语言:javascript
复制
[R4] ospf 1 router-id 4.4.4.4
[R4-ospf-1] area 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] 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

R5的配置如下:

代码语言:javascript
复制
[R5] ospf 1 router-id 5.5.5.5
[R5-ospf-1] area 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] 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

规则详解及实验验证

1.优选具有最大Preferred_Value的路由

1. 规则描述

当路由器学习到多条到达同一个目的网络的BGP路由时,拥有最大Preferred_Value值的路由将会被优选。

2. Preferred_Value属性回顾
  • 华为私有的路径属性,路由的Preferred_value可以理解为该路由在本路由器视角的权重值。
  • 范围0-65535,默认值为0,值越大,则路由越优。
  • 作用范围是本设备(不传递),该值不会被包含在update报文中,不会传递给任何BGP邻居。
3. 规则验证

现在我们在R1和R2上配置一个Loopback1接口,配置IP地址:100.0.1.1/24,然后将这条路由发布到BGP(这部分配置不再赘述)。如此一来,R1将更新路由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_Value值来让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的配置可以变更成:

代码语言:javascript
复制
ip ip-prefix 1 permit 100.0.1.0 24
ip ip-prefix 2 permit 100.0.2.0 24
route-policy RP1 permit node 10
if-match ip-prefix 1
apply preferred-value 10  #设置所匹配路由的Preferred_value
route-policy RP1 permit node 20
route-policy RP2 permit node 10
if-match ip-prefix 2
apply preferred-value 10
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中允许的路由。

代码语言:javascript
复制
[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这条路由:

代码语言:javascript
复制
[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,完成了规则一的测试后,我们将用于验证本条规则的相关配置删除,恢复成初始化配置。继续看下一条规则。

2.优选具有最大Local_Preference的路由

1. 规则描述

当路由器学习到多条到达同一个目的网络的BGP路由时,拥有最大Preferred_Value值的路由将会被优选。如果路由的Preferred_Value值相等,则比较路由的Local_Preference值,优选具有最大Local_Preference值的路由。

2. Local_Preference属性回顾
  • 公认自决属性,值越大则路由越优。
  • Local_Preference只能在IBGP Peer之间传递,不能在EBGP Peer之间传递。
  • 本地始发的路由默认Local_Preference为100。可用default local-preference ? 命令修改默认值。
3. 规则验证

现在实验恢复成初始化环境,在R1及R2上都配置Loopback1口,IP地址为100.0.1.1/24,R1及R2都将到达100.0.1.0/24的路由发布到BGP。

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

R3的配置变更如下:

代码语言:javascript
复制
ip ip-prefix 1 permit 100.0.1.0 24
route-policy RP permit node 10
if-match ip-prefix 1
apply local-preference 200
route-policy RP permit node 20
bgp 345
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

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

3.优选起源于本地的路由

当路由器学习到多条到达同一个目的网络的BGP路由时,如果路由的Preferred_Value值相等,且Local_Preference值也相等,那么依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。

本条规则略过不做验证。

4.优选AS_PATH最短的路由

1. 规则描述

当路由器学习到多条到达同一个目的网络的BGP路由时,如果路由的Preferred_Value属性值、Local_Preference属性值都相等,并且这些路由都是学习自其它邻居的,那么AS_PATH最短的路由将被优选。

2. 规则验证

现在实验环境恢复成初始化环境,同样让R1及R2引入100.0.1.0/24路由。我们要通过操控AS_PATH属性让R4优选R5传递过来的100.0.1.0/24路由。那么可以在R3上对R1做import方向的策略,在原有AS_PATH的基础上,增加一个100的AS号,使得路由的AS_PATH长度加长一个单位。如此一来R4将优选R5传递过来的100.0.1.0/24路由。

R3的配置变更如下:

代码语言:javascript
复制
ip ip-prefix 1 permit 100.0.1.0 24
route-policy RP permit node 10
if-match ip-prefix 1
apply as-path 100 additive
route-policy RP permit node 20
bgp 345
peer 10.1.13.1 route-policy RP import

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

代码语言:javascript
复制
[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路由。当然,可以进一步查看路由的详细信息:

代码语言:javascript
复制
[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

另外,使用route-policy来修改BGP路由的AS_PATH时,需关注如下命令:

代码语言:javascript
复制
apply as-path xx additive 在已有AS_PATH基础上追加xx
apply as-path xx overwrite 将已有AS_PATH值替换(覆盖)成xx
apply as-path none overwrite  清空AS_PATH

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

3. 规则补充一

规则补充:AS_SET的长度为1,无论AS_SET中包括多少AS号,都将算作1个AS号。

4. 规则补充二

规则补充:AS_CONFED_SEQUENCE和AS_CONFED_SET长度不做计算依据。

R1将自己的直连路由10.0/24发布到BGP。R1会将10.0/24的路由通过BGP更新给R4,再由R4将路由传

递给R5,此时路由的AS_PATH是:“(64514)100”,此处AS_PATH长度为1 ;另一方面R1也会将路由传递给R2,R2再传给R3,最后R3将路由传给R5,路由传递给R5时AS_PATH是:“300 200 100”,此处AS_PATH长度为3。在R5上观察到的现象是,它优选R4更新过来的这条10.0/24,这是因为该条路由的AS_PATH更短。

在上个环境及配置的基础之上,在R1上配置route-policy,将10.0/24路由的AS_PATH增加两个100的AS号,也就是插入“100 100 ”并且将该route-policy对R4生效(export方向)。如此一来,R4收到的10.0/24的BGP路由,AS_PATH为“100 100 100”,而当它将路由发送给联邦EBGP邻居R5时,路由的AS_PATH变成“(64514) 100 100 100”,此时AS_PATH的长度为3,即联邦的AS号是不做长度计算的。

另一边R3传递过来的10.0/24的BGP路由,AS_PATH长度还是3,两边的AS_PATH长度相等,因此比AS_PATH是比不出来了,只能往后面的规则继续PK。

5.依次优选Origin类型为IGP、EGP、Incomplete的路由

1. 规则描述

当路由器学习到多条到达同一个目的网络的BGP路由时,在其他条件相同的情况下,依次优选Origin属性为IGP、EGP、Incomplete的路由。

2. 规则验证

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

那么R1的配置变更如下:

代码语言:javascript
复制
ip ip-prefix 1 permit 100.0.1.0 24
route-policy RP permit node 10
if-match ip-prefix 1
bgp 100
import-route direct route-policy RP
……

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

代码语言:javascript
复制
ip ip-prefix 1 permit 100.0.1.0 24
route-policy RP permit node 10
if-match ip-prefix 1
apply origin incomplete
bgp 100
peer 10.1.13.3 route-policy RP export
network 100.0.1.0 24
……

这样一来R1引入的100.0.1.0/24路由,origin属性值就为incomplete,而R2引入的100.0.1.0/24的路由(使用network命令发布),origin属性值为IGP。

完成配置后验证一下:

代码语言:javascript
复制
[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?

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

代码语言:javascript
复制
[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, internal, pre 255, IGP cost 1, not preferred
for Origin #由于Origin为incomplete因此输给了路径1
Not advertised to any peer yet

6.优选MED最小的路由

1. 规则描述

当路由器学习到多条到达同一个目的网络的BGP路由时,在其他条件相同的情况下,比较这些路由的 MED,优选拥有最小MED值的路由。

2. 属性回顾

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

3. 规则详解
  • BGP只比较来自同一个相邻AS的路由的MED值。
  • 如果路由没有MED属性,BGP选路时将该路由的MED值按缺省值0来处理;而执行bestroute med-none-as-maximum命令后,BGP选路时将该路由的MED值按最大值4294967295来处理。
  • 缺省情况下,不允许比较来自不同AS邻居的路由路径的MED属性值。而执行compare-different-as-med命令后,BGP将强制比较来自不同自治系统中的邻居的路由的MED值。除非能够确认不同的自治系统采用了同样的IGP和路由选择方式,否则不要使用compare-different-as-med命令(可能产生环路)。
4. 规则验证

在本规则的实验中,我们将环境做了小小的变更,R2不再属于AS200了,我们把他规划到AS100,至于为什么,这里相信大家已经都想到了。R1、R2都向BGP发布路由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的配置:

代码语言:javascript
复制
ip ip-prefix 1 permit 100.0.1.0 24
route-policy RP permit node 10
if-match ip-prefix 1
apply cost 999  #设置MED值为999
bgp 100
network 100.0.1.0 24
peer 10.1.13.3 as-number 345
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,值更大。

7.相对于IBGP路由,优选EBGP路由

1. 规则描述

当路由器学习到多条到达同一个目的网络的BGP路由时,在其他条件相同的情况下,EBGP路由的优先级高于IBGP路由。

2. 规则验证

本规则的验证环境要发生一些改变,我们在R3-R5之间建立一条IBGP的邻居关系。这样一来R3会将自己从R1学习到的BGP路由传递给IBGP邻居R5,而R5又会从另一侧学习到R2更新过来的100.0.1.0/24路由,那么R5将如何优选呢?

变更的配置这里就不在赘述了,这里有一个小细节要注意,那就是R3别忘了要配置一条peer 5.5.5.5next-hop-local

完成配置后,我们在R5上观察一下:

代码语言:javascript
复制
[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的路由,可以进一步查看路由的详细信息:

代码语言:javascript
复制
[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

8.优选到BGP下一跳IGP度量值最小的路由

1. 规则描述

当路由器学习到多条到达同一个目的网络的BGP路由时,在其他条件相同的情况下,BGP将比较路由器到这些路由的Next_hop的IGP度量值,优选到Next_hop度量值最小的BGP路由。

2. 规则验证一

仍然将实验环境恢复到初始化状态。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。而R4又通过OSPF学习到了去往3.3.3.3/32及5.5.5.5/32的路由,并且此刻在R4上,到达3.3.3.3及5.5.5.5的OSPF度量值都是相等的。

现在,我们在R4连接R3的接口上增加配置(该接口的缺省OSPF度量值为1):ospf cost 10。如此一来,R4到达3.3.3.3的OSPF度量值就发生了变化,变得比到达5.5.5.5的OSPF度量值更大,因此最终,本规则将让R4优选R5传递过来的100.0.1.0/24路由.

代码语言:javascript
复制
[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/32路由的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
  1. 规则验证二

现在将网络环境再做点调整:R3-R5之间增加一条IBGP连接。R4配置为路由反射器RR,R3是她的Client。

这样一来,首先,R3通过IBGP连接直接将100.0.1.0/24的路由传给了R5,另一方面又经由路由反射器R4反射给了R5,因此,R5将同时从R3及R4学习到100.0.1.0/24的BGP路由。这时候R5怎么决策?

注意,由于这两条BGP路由Next_Hop属性值都是3.3.3.3,因此,本规则无法做出决策,因为两条路由的Next_hop都相等,不具备度量值的可比性。只能再继续到下一条规则中决策。

9.优选Cluster-List最短的路由

1. 规则描述

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

2. 规则验证

略。

10.优选Router-ID最小的BGP邻居发来的路由

1. 规则描述

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

2. 规则验证

仍然是将实验环境还原成初始化状态。在R1及R2上都发布100.0.1.0/24 BGP路由。那么在不做任何路由策略配置的情况下,R4将学习到R3及R5传递过来的路由:

从上面的输出可以看到,R4已经优选了R3传递过来的路由,在其他条件相同的情况下,R4将比较通告这两条路由的邻居的Router-ID,由于R3的Router-ID 3.3.3.3要小于R5的Router-ID 5.5.5.5,因此R3传递过来的路由被优选。

3. 规则补充

如果路由携带Originator_ID属性,则将使用Originator_ID代替Router-ID进行比较。

在上面的拓扑环境中:

  • R1、R2、R3、R4属于AS 1234,AS内运行了OSPF,路由器都宣告各自的Loopback0接口,接口IP地址为x.x.x.x/32,x为设备编号。
  • R1-R4;R4-R3;R1-R2;R2-R3基于Loopback0建立IBGP邻居关系。
  • R1配置为RR,R4是它的Client;R3配置为RR,R4是它的Client。
  • 在R4上发布44.44.44.0/24路由进BGP。 当R1收到R4更新过来的路由后,会将其反射给R2并插入Originator_ID及Cluster_List属性。R3同理。

那么最终R2将分别从R1和R3学习到44.44.44.0/24路由,R2会如何优选?这两条路由拥有相同的Preferred_Value、Local_Preference,并且都通告自邻居,AS_Path长度一样,Origin也相同,MED也相等,还都是IBGP邻居通告而来,连Next_Hop属性也相同,另外,路由携带的Cluster_List长度也相同。那么能否使用本规则来决策呢?

注意,由于两条路由都携带了Originator_ID属性,因此在这一轮PK中,就不是比较R1和R3的Router-ID了,而是比较这两条路由的Originator_ID属性。结果,由于这两条路由的起源都是R4,因此Originator_ID相等,所以本条规则仍无法决策。那么只能在往下面的规则继续比较了,请看下文。

11.优选peer IP地址最小的邻居发来的路由

1. 规则描述

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

2. 规则验证

仍然看上一个小节最后的实验,在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路由。

代码语言:javascript
复制
[R2] display 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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络技术联盟站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BGP路由优选规则
  • 实验环境介绍
  • 规则详解及实验验证
    • 1.优选具有最大Preferred_Value的路由
    • 2.优选具有最大Local_Preference的路由
    • 3.优选起源于本地的路由
    • 4.优选AS_PATH最短的路由
    • 5.依次优选Origin类型为IGP、EGP、Incomplete的路由
    • 6.优选MED最小的路由
    • 7.相对于IBGP路由,优选EBGP路由
    • 8.优选到BGP下一跳IGP度量值最小的路由
    • 9.优选Cluster-List最短的路由
    • 10.优选Router-ID最小的BGP邻居发来的路由
    • 11.优选peer IP地址最小的邻居发来的路由
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档