• BGP进阶: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)的路径:

    1. 优选具有最大Preferred-value的路由
    2. 优选具有最大Local_Preference的路由
    3. 优选起源于本地的路由
    4. 优选AS-Path最短的路由
    5. 比较Origin:(IGP > EGP > Incomplete)
    6. 优选MED最小的路由
    7. 优选eBGP邻居发来的路由
    8. 优选到BGP下一跳的IGP Metric较小的路由
    9. BGP负载均衡
    10. 优选Cluster-List最短的路由
    11. 优选RouterID最小的BGP邻居发来的路由
    12. 优选peer ip地址最小的邻居发来的路由

    实验环境介绍

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

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

    3. 各设备的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
    
    • 1
    • 2
    • 3

    R2的配置如下:

    [R1] bgp 200
    [R1-bgp] router-id 2.2.2.2
    [R1-bgp] peer 10.1.25.5 as-number 345
    
    • 1
    • 2
    • 3

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    规则详解及实验验证

    1. 优选具有最大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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如此一来,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    注意:上述配置中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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    我们看到,在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    我们要通过操控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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从上面的输出可以看到关于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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    完成配置后,在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从上面的输出可以看到,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    当然,也可在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    或者使用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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这 样 一 来 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 ?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    [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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    完成上述配置后,仍然在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从上面的输出可以看到,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从上面的输出我们可以看到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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    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
    
    • 1
    • 2

    如此一来,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    规则验证二

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

    • 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
    
    • 1
    • 2
    • 3
    • 4

    R4增加如下配置:

    [R4] bgp 345
    [R4-bgp] peer 5.5.5.5 reflect-client
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3

    这样一来,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
    
    • 1
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    再看一下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  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    我们看到,两条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
    
    • 1
    • 2
    • 3
    • 4

    R4增加如下配置:

    [R4] bgp 345
    [R4-bgp] peer 5.5.5.5 reflect-client
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3

    这样一来,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    最终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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    python字典中添加、修改数据、删除数据和遍历数据、enumerate函数和公共方法
    【linux命令讲解大全】006.网络工具简介:bzdiff 和 clockdiff 的用途和功能
    Docker容器故障排查与解决方案
    DeferredResult解决了什么问题
    新库上线 | CnOpenData租赁和商务服务业工商注册企业基本信息数据
    智安网络|边缘计算与分布式存储:数字化时代的新趋势
    php初级教程四 文件上传
    C++11智能指针 unique_ptr、shared_ptr/weak_ptr、make_shared、循环引用、定制删除器
    uni-app开发小程序实用技巧
    【通意千问】大模型GitHub开源工程学习笔记(1)--依赖库
  • 原文地址:https://blog.csdn.net/weixin_43025343/article/details/128020659