0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

网络技术干货圈 来源:网络技术干货圈 作者:圈圈 2022-11-14 09:54 次阅读

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]bgp100
[R1-bgp]router-id1.1.1.1
[R1-bgp]peer10.1.13.3as-number345

R2的配置如下:

[R1]bgp200
[R1-bgp]router-id2.2.2.2
[R1-bgp]peer10.1.25.5as-number345

R3的配置如下:

[R3]ospf1router-id3.3.3.3
[R3-ospf-1]area0.0.0.0
[R3-ospf-1-area-0.0.0.0]network10.1.34.30.0.0.0
[R3-ospf-1-area-0.0.0.0]network3.3.3.30.0.0.0
[R3-ospf-1-area-0.0.0.0]quit
[R3-ospf-1]quit

[R3]bgp345
[R3-bgp]router-id3.3.3.3
[R3-bgp]peer10.1.13.1as-number100
[R3-bgp]peer4.4.4.4as-number345
[R3-bgp]peer4.4.4.4connect-interfaceloopback0
[R3-bgp]peer4.4.4.4next-hop-local#R3对R4执行next-hop-local
[R3-bgp]quit

R4的配置如下:

[R4]ospf1router-id4.4.4.4
[R4-ospf-1]area0.0.0.0
[R4-ospf-1-area-0.0.0.0]network10.1.34.40.0.0.0
[R4-ospf-1-area-0.0.0.0]network10.1.45.40.0.0.0
[R4-ospf-1-area-0.0.0.0]network4.4.4.40.0.0.0
[R4-ospf-1-area-0.0.0.0]quit
[R4-ospf-1]quit

[R4]bgp345
[R4-bgp]router-id4.4.4.4
[R4-bgp]peer3.3.3.3as-number345
[R4-bgp]peer3.3.3.3connect-interfaceloopback0
[R4-bgp]peer5.5.5.5as-number345
[R4-bgp]peer5.5.5.5connect-interfaceloopback0
[R4-bgp]quit

R5的配置如下:

[R5]ospf1router-id5.5.5.5
[R5-ospf1]area0.0.0.0
[R5-ospf-1-area-0.0.0.0]network10.1.45.50.0.0.0
[R5-ospf-1-area-0.0.0.0]network5.5.5.50.0.0.0
[R5-ospf-1-area-0.0.0.0]quit
[R5-ospf-1]quit

[R5]bgp345
[R5-bgp]router-id5.5.5.5
[R5-bgp]peer10.1.25.2as-number200
[R5-bgp]peer4.4.4.4as-number345
[R5-bgp]peer4.4.4.4connect-interfaceloopback0
[R5-bgp]peer4.4.4.4next-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]interfaceloopback1
[R1-loopback1]ipaddress100.0.1.124
[R1-loopback1]quit

[R1]bgp100
[R1-bgp]network100.0.1.024
[R1-bgp]quit

R2的配置如下:

[R2]interfaceloopback1
[R2-loopback1]ipaddress100.0.1.124
[R2-loopback1]quit

[R2]bgp200
[R2-bgp]network100.0.1.024
[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传递过来的路由。

68e1275c-63ad-11ed-8abf-dac502259ad0.png

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

69069d70-63ad-11ed-8abf-dac502259ad0.png

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

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

[R4]ipip-prefix1permit100.0.1.024
[R4]ipip-prefix2permit100.0.2.024

[R4]route-policyRP1permitnode10
[R4-route-policy]if-matchip-prefix1
[R4-route-policy]applypreferred-value10#设置所匹配路由的Preferred_value
[R4]route-policyRP1permitnode20#匹配其他路由

[R4]route-policyRP2permitnode10
[R4-route-policy]if-matchip-prefix2
[R4-route-policy]applypreferred-value10
[R4]route-policyRP2permitnode20

bgp345
peer3.3.3.3route-policyRP1import
peer5.5.5.5route-policyRP2import

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

[R4]displaybgprouting-table

BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:4
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/243.3.3.3010010100i
*i5.5.5.501000200i
*>i100.0.2.0/245.5.5.5010010200i
*i3.3.3.301000100i

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

[R4]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:#路径1
From:3.3.3.3(3.3.3.3)
RouteDuration:00h01m43s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val10,valid,internal,best,select,
active,pre255,IGPcost1#best字样表示本路径被优选
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:#路径2
From:5.5.5.5(5.5.5.5)
RouteDuration:00h01m43s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path200,originigp,MED0,localpref100,pref-val0,valid,internal,pre255,IGPcost
1,notpreferredforPreVal#这里说明了本路径没被优选的原因:Pre_Val值
Notadvertisedtoanypeeryet

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不变。

规则验证

6921e35a-63ad-11ed-8abf-dac502259ad0.png

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

R1的配置如下:

[R1]interfaceloopback1
[R1-loopback1]ipaddress100.0.1.124
[R1-loopback1]quit

[R1]bgp100
[R1-bgp]network100.0.1.024
[R1-bgp]quit

R2的配置如下:

[R2]interfaceloopback1
[R2-loopback1]ipaddress100.0.1.124
[R2-loopback1]quit

[R2]bgp200
[R2-bgp]network100.0.1.024
[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]ipip-prefix1permit100.0.1.024

[R3]route-policyRPpermitnode10
[R3-route-policy]if-matchip-prefix1
[R3-route-policy]applylocal-preference200
[R3]route-policyRPpermitnode20
[R3-route-policy]quit

[R3]bgp345
[R3-bgp]peer4.4.4.4route-policyRPexport

在R4上验证一下:

[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:4
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/243.3.3.302000100i
*i5.5.5.501000200i

从上面的输出可以看到关于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最短的路由。

规则验证

693f792e-63ad-11ed-8abf-dac502259ad0.png

现在实验环境恢复成初始化配置,同样让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]ipip-prefix1permit100.0.1.024
[R3]route-policyRPpermitnode10
[R3-route-policy]if-matchip-prefix1
[R3-route-policy]applyas-path100additive
[R3-route-policy]quit

[R3]route-policyRPpermitnode20
[R3-route-policy]quit

[R3]bgp345
[R3-bgp]peer10.1.13.1route-policyRPimport

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

[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:2
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/245.5.5.501000200i
*i3.3.3.301000100100i

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

[R4]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:
From:5.5.5.5(5.5.5.5)
RouteDuration:00h06m45s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path200,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,
active,pre255,IGPcost1
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:
From:3.3.3.3(3.3.3.3)
RouteDuration:00h02m37s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100100,originigp,MED0,localpref100,pref-val0,valid,internal,pre255,IGP
cost1,notpreferredforAS-Path#这里指出了本路径没有被优选的原因。
Notadvertisedtoanypeeryet

当然,也可在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 > ?

695dd504-63ad-11ed-8abf-dac502259ad0.png

695dd504-63ad-11ed-8abf-dac502259ad0.png

规则验证

6991cbd4-63ad-11ed-8abf-dac502259ad0.png

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

那么R1的配置变更如下

[R1]ipip-prefix1permit100.0.1.024
[R1]route-policyRPpermitnode10
[R1-route-policy]if-matchip-prefix1
[R1-route-policy]quit

[R1]bgp100
[R1-bgp]peer10.1.13.3as-number345
[R1-bgp]undonetwork100.0.1.024
[R1-bgp]import-routedirectroute-policyRP

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

[R1]route-policyRPpermitnode10
[R1-route-policy]applyoriginincomplete
[R1]bgp100
[R1-bgp]peer10.1.13.3as-number345
[R1-bgp]network100.0.1.024route-policyRP

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

[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:2
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/245.5.5.501000200i
*i3.3.3.301000100?

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

[R4]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:#路径1
From:5.5.5.5(5.5.5.5)
RouteDuration:01h01m29s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path200,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,active,pre255,IGPcost1
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:#路径2
From:3.3.3.3(3.3.3.3)
RouteDuration:00h03m11s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originincomplete,MED0,localpref100,pref-val0,valid,interna
l,pre255,IGPcost1,notpreferredforOrigin#由于Origin为?因此输给了路径1
Notadvertisedtoanypeeryet

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

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

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

MED属性

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

69ac46f8-63ad-11ed-8abf-dac502259ad0.png

规则详解

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命令后,将消除路由接收顺序对选路结果的影响。

规则验证

69cecf02-63ad-11ed-8abf-dac502259ad0.png

针对本规则的验证,我们将环境做了小小的变更,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]ipip-prefix1permit100.0.1.024
[R1]route-policyRPpermitnode10
[R1-route-policy]if-matchip-prefix1
[R1-route-policy]applycost999#设置MED值为999

[R1]bgp100
[R1-bgp]network100.0.1.024
[R1-bgp]peer10.1.13.3as-number345
[R1-bgp]peer10.1.13.3route-policyRPexport

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

[R4]displaybgprouting-table
BGPLocalrouterIDis4.4.4.4
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:2
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>i100.0.1.0/245.5.5.501000100i
*i3.3.3.39991000100i

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

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

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

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

规则验证

69e8d3e8-63ad-11ed-8abf-dac502259ad0.png

为了验证本条规则,我们在初始化配置的基础上,在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]displaybgprouting-table
BGPLocalrouterIDis5.5.5.5
Statuscodes:*-valid,>-best,d-damped,
h-history,i-internal,s-suppressed,S-Stale
Origin:i-IGP,e-EGP,?-incomplete
TotalNumberofRoutes:2
NetworkNextHopMEDLocPrfPrefValPath/Ogn
*>100.0.1.0/2410.1.25.200100i
*i3.3.3.301000100i

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

[R5]displaybgprouting-table100.0.1.0
BGPlocalrouterID:5.5.5.5
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:
From:10.1.25.2(10.1.25.2)
RouteDuration:00h11m54s
DirectOut-interface:GigabitEthernet0/0/1
Originalnexthop:10.1.25.2
Qosinformation:0x0
AS-path100,originigp,MED0,pref-val0,valid,external,best,select,active,pre255
Advertisedtosuch2peers:
4.4.4.4
3.3.3.3
BGProutingtableentryinformationof100.0.1.0/24:
From:3.3.3.3(3.3.3.3)
RouteDuration:00h02m14s
RelayIPNexthop:10.1.45.4
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,pre255,IGP
cost2,notpreferredforpeertype#这里指出了为何本路径不是best
Notadvertisedtoanypeeryet
  1. 优选到BGP下一跳IGP Metric较小的路由
规则描述

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

规则验证一

6a07a62e-63ad-11ed-8abf-dac502259ad0.png

仍然是将实验环境恢复到初始化状态。然后在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]interfacegigabitEthernet0/0/0
[R4-GigabitEthernet0/0/0]ospfcost10

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

[R4]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:
From:5.5.5.5(5.5.5.5)
RouteDuration:00h20m06s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,
active,pre255,IGPcost1#IGPcost=1,这的IGPcost事实上是R4学习到的
关于5.5.5.5的ospf路由的cost,可以在R4的路由表中查看。
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:
From:3.3.3.3(3.3.3.3)
RouteDuration:00h11m25s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,pre255,IGPcost
10,notpreferredforIGPcost#到3.3.3.3的IGPcost变成了10,比到5.5.5.5的IGP
cost要大,因此PK输了。
Notadvertisedtoanypeeryet
规则验证二

6a21c9aa-63ad-11ed-8abf-dac502259ad0.png

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

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

R3增加如下配置:

[R3]bgp345
[R3-bgp]peer5.5.5.5as-number345
[R3-bgp]peer5.5.5.5connect-interfaceloopback0
[R3-bgp]peer5.5.5.5next-hop-local

R4增加如下配置:

[R4]bgp345
[R4-bgp]peer5.5.5.5reflect-client

R5增加如下配置:

[R5]bgp345
[R5-bgp]peer3.3.3.3as-number345
[R5-bgp]peer3.3.3.3connect-interfaceloopback0

这样一来,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等价负载均衡

6a3be15a-63ad-11ed-8abf-dac502259ad0.png

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

[R4]bgp345
[R4-bgp]maximumload-balancingibgp2

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

[R4-bgp]displaybgprouting-table100.0.1.0
BGPlocalrouterID:4.4.4.4

LocalASnumber:345
Paths:2available,1best,2select
BGProutingtableentryinformationof100.0.1.0/24:
From:3.3.3.3(3.3.3.3)
RouteDuration:00h11m54s
RelayIPNexthop:10.1.34.3
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path12,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,
active,pre255,IGPcost1#注意虽然配置了maximum-paths,路由表中关于100网段出现
了负载均衡,但R4在BGP优选动作仍然只会优选一条BGP路由,并只将这条路由更新给
BGP邻居
Notadvertisedtoanypeeryet

BGProutingtableentryinformationof100.0.1.0/24:
From:5.5.5.5(5.5.5.5)
RouteDuration:00h11m20s
RelayIPNexthop:10.1.45.5
RelayIPOut-Interface:GigabitEthernet0/0/1
Originalnexthop:5.5.5.5
Qosinformation:0x0
AS-path12,originigp,MED0,localpref100,pref-val0,valid,internal,select,active,pre
255,IGPcost1,notpreferredforrouterID
Notadvertisedtoanypeeryet

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

[R4-bgp]displayiprouting-tableprotocolbgp
RouteFlags:R-relay,D-downloadtofib
------------------------------------------------------------------------------
Publicroutingtable:BGP
Destinations:1Routes:2
BGProutingtablestatus:
Destinations:1Routes:2
Destination/MaskProtoPreCostFlagsNextHopInterface
100.0.1.0/24IBGP2550RD3.3.3.3GigabitEthernet0/0/0
IBGP2550RD5.5.5.5GigabitEthernet0/0/1

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

eBGP等价负载均衡

6a5b86fe-63ad-11ed-8abf-dac502259ad0.png

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

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

规则验证

6a21c9aa-63ad-11ed-8abf-dac502259ad0.png

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

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

R3增加如下配置:

[R3]bgp345
[R3-bgp]peer5.5.5.5as-number345
[R3-bgp]peer5.5.5.5connect-interfaceloopback0
[R3-bgp]peer5.5.5.5next-hop-local

R4增加如下配置:

[R4]bgp345
[R4-bgp]peer5.5.5.5reflect-client

R5增加如下配置:

[R5]bgp345
[R5-bgp]peer3.3.3.3as-number345
[R5-bgp]peer3.3.3.3connect-interfaceloopback0

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

displaybgprouting-table100.0.1.0
BGPlocalrouterID:10.1.45.5
LocalASnumber:345
Paths:2available,1best,1select
BGProutingtableentryinformationof100.0.1.0/24:#路径1
From:3.3.3.3(10.1.13.3)
RouteDuration:00h10m10s
RelayIPNexthop:10.1.45.4
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,best
,select,active,pre255,IGPcost2
Notadvertisedtoanypeeryet
BGProutingtableentryinformationof100.0.1.0/24:#路径2
From:4.4.4.4(10.1.34.4)
RouteDuration:00h09m01s
RelayIPNexthop:10.1.45.4
RelayIPOut-Interface:GigabitEthernet0/0/0
Originalnexthop:3.3.3.3
Qosinformation:0x0
AS-path100,originigp,MED0,localpref100,pref-val0,valid,internal,pre
255,IGPcost2,notpreferredforClusterList
Originator:10.1.13.3
Clusterlist:10.1.34.4
Notadvertisedtoanypeeryet

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

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

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

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

规则验证

6a801a6e-63ad-11ed-8abf-dac502259ad0.png

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

6a9e4c1e-63ad-11ed-8abf-dac502259ad0.png

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

规则补充

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

6ac3d95c-63ad-11ed-8abf-dac502259ad0.png

在上面的拓扑环境中:

  • 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。

规则验证

6ae205ee-63ad-11ed-8abf-dac502259ad0.png

仍然看上一个小节最后的实验,在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]disbgpro44.44.44.0
BGProutingtableentryinformationof44.44.44.0/24:

From:1.1.1.1(1.1.1.1)
……
AS-pathNil,originigp,MED0,localpref100,pref-val0,valid,internal,best,select,
active,pre255,IGPcost2
Originator:4.4.4.4
Clusterlist:1.1.1.1
BGProutingtableentryinformationof44.44.44.0/24:
From:3.3.3.3(3.3.3.3)
……
AS-pathNil,originigp,MED0,localpref100,pref-val0,valid,internal,pre
255,IGPcost2,notpreferredforpeeraddress
Originator:4.4.4.4
Clusterlist:3.3.3.3

​审核编辑:郭婷


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

    关注

    22

    文章

    3500

    浏览量

    111342
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27168

原文标题:BGP进阶:BGP 综合实验一

文章出处:【微信号:网络技术干货圈,微信公众号:网络技术干货圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    拆解FPGA芯片,带你深入了解其原理

    拆解FPGA芯片,带你深入了解其原理 现场可编程门阵列(FPGA)可以实现任意数字逻辑,从微处理器到视频生成器或加密矿机,一应俱全。FPGA由许多逻辑模块组成,每个逻辑模块通常由触发器和逻辑功能
    发表于 04-17 11:07

    BGP选路规则的实验验证与解析

    如果配置了负载分担,当前8个规则相同,且存在多条AS_Path完全相同的外部路由,则根据配置的路由条数选择多条路由进行负载分担
    的头像 发表于 04-08 10:45 112次阅读
    <b class='flag-5'>BGP</b>选路<b class='flag-5'>规则</b>的实验验证与解析

    BGP路由的生成方式及5种报文

    TCP的三次握手。先启动BGP的一端先发起TCP连接。如图所示,RTB先启动BGP协议,RTB随机端口号向RTA的179端口发起TCP连接
    发表于 03-26 14:11 248次阅读
    <b class='flag-5'>BGP</b><b class='flag-5'>路由</b>的生成方式及5种报文

    深入了解影响ZR执行器性能的关键因素

    深入了解影响ZR执行器性能的关键因素-速程精密 在工业自动化领域,ZR执行器作为关键的终端设备,其性能的稳定性对于整个自动化系统的运行至关重要。了解影响ZR执行器性能的因素有助于更好地维护和优化
    的头像 发表于 03-20 15:04 190次阅读
    <b class='flag-5'>深入了解</b>影响ZR执行器性能的关键因素

    华为路由BGP基础配置实验记录

    配置BGP的前提是要保证各个自治区域的路由均可达,所以要首先在AS 2 配置OSPF使AS 2 通畅,然后再配置BGP。由于BGP路由黑洞
    发表于 01-06 10:07 186次阅读
    华为<b class='flag-5'>路由</b>器<b class='flag-5'>BGP</b>基础配置实验记录

    深入了解Linux中vi命令的使用

    深入了解Linux中vi命令的使用 VI是一款在Linux系统中使用的文本编辑器,它是一款功能强大、灵活性高的编辑器。VI编辑器具有非常高效的命令行操作方式,并且在各个版本的Linux中都得到了广泛
    的头像 发表于 12-25 11:15 214次阅读

    BGP硬核笔记分享

    BGP——边界网关路由协议,是一种基于策略的路径矢量路由协议(可以理解为距离矢量型协议的升级版),BGP在确定最佳路径时考虑的不是速度,而是让AS能够根据多种
    的头像 发表于 12-11 09:15 328次阅读
    <b class='flag-5'>BGP</b>硬核笔记分享

    深入了解 GaN 技术

    深入了解 GaN 技术
    的头像 发表于 12-06 17:28 4380次阅读
    <b class='flag-5'>深入了解</b> GaN 技术

    动态BGP与静态BGP的区别

    动态BGP与静态BGP的区别 动态BGP与静态BGP的区别 1.静态BGP功能简单,其带宽功能,可以实现多网接入,但路径上只有通向几大运营商
    发表于 12-01 16:55

    BGP路由计算选路规则13条

    当到达同一目的地存在多条路由时,BGP依照如下策略顺序进行路由选择
    的头像 发表于 10-08 10:35 608次阅读

    孔环是什么?深入了解孔环有助于实现PCB设计

    本文将探讨孔环,因为更深入了解孔环有助于确保成功地实现PCB设计。
    的头像 发表于 07-19 10:21 2736次阅读
    孔环是什么?<b class='flag-5'>深入了解</b>孔环有助于实现PCB设计

    深入了解安全光栅

    深入了解安全光栅
    的头像 发表于 06-25 13:53 755次阅读
    <b class='flag-5'>深入了解</b>安全光栅

    深入了解电动牙刷的构造及原理

    电动牙刷作为一款便捷、时尚的消费电子产品,深得很多用户的喜爱。您知道电动牙刷是怎么工作的吗?它里面有用到哪些分立器件产品?本文带您深入了解电动牙刷的构造及原理。
    发表于 06-05 11:51 1903次阅读
    <b class='flag-5'>深入了解</b>电动牙刷的构造及原理

    干货 | 拆解FPGA芯片,带你深入了解其原理

    ,XC2064的单元数量非常少,但是即使如此,它也引发了革命性的新产品线。了解XC2064比特流的关键是两个概念。首先,FPGA由64个块组成,这些块是将逻辑块和路由结合在一起的重复块。尽管FPGA被描述为
    发表于 06-02 14:03

    带你深入了解RS485总线

    做工程很多时候会提到RS485控制线,它到底是什么呢?今天我聊聊RS485相关的应用,深入了解RS485,你会发现里面的知识确实有很多,那么我们就选择一些平时在弱电中会考虑到的问题供大家了解
    发表于 05-16 14:13 8554次阅读
    带你<b class='flag-5'>深入了解</b>RS485总线