BGP(边界网关协议)的13条选路详解

BGP选路规则详情:共13

1、优选具有最大Weight值的路由

·Weight属性回顾:

 ·CISCO私有,越大越优先

 ·作用范围是本地路由器(不传递),该值既不会被包含在update消息中,也不会传递给任何BGP邻居

 ·范围0-65535

 ·如果路由是从其他邻居学过来的,则(在本地该路由的WT)默认值是0

 ·本地network产生的路由weight32768

 ·本地重分发的直连接口路由,静态路由的weight32768

 ·本地汇总产生的BGP路由weight值也为32768

 

实验:修改weight值的方法

 

R1(config)#router bgp 100

R1(config-router)#neighbor 10.1.13.3 remote-as 345

R1(config-router)#network 100.0.1.0 mask 255.255.255.0

 

R2(config-if)#router bgp 200

R2(config-router)#neighbor 10.1.25.5 remote-as 345

R2(config-router)#bgp router-id 2.2.2.2

R2(config-router)#network 100.0.1.0 mask 255.255.255.0

 

R3(config-if)#router ospf 1

R3(config-router)#router-id 3.3.3.3

R3(config-router)#network 10.1.34.3 0.0.0.0 a 0

R3(config-router)#network 3.3.3.3 0.0.0.0 a 0

R3(config-router)#router bgp 345

R3(config-router)#bgp router-id 3.3.3.3

R3(config-router)#neighbor 10.1.13.1 remote-as 100

R3(config-router)#neighbor 4.4.4.4 remote-as 345

R3(config-router)#neighbor 4.4.4.4 update-source lo0

 

R4(config)#router ospf 1  

R4(config-router)#router-id 4.4.4.4

R4(config-router)#network 10.1.34.4 0.0.0.0 a 0

R4(config-router)#network 10.1.45.4 0.0.0.0 a 0

R4(config-router)#network 4.4.4.4 0.0.0.0 a 0

R4(config)#router bgp 345

R4(config-router)#neighbor 3.3.3.3 remote-as 345

R4(config-router)#neighbor 3.3.3.3 update-source lo0

R4(config-router)#neighbor 5.5.5.5 remote-as 345

R4(config-router)#neighbor 5.5.5.5 up lo0  

 

R5(config)#router ospf 1

R5(config-router)#network 5.5.5.5 0.0.0.0 a 0  

R5(config-router)#network 10.1.45.5 0.0.0.0 a 0

R5(config-router)#router-id 5.5.5.5

R5(config)#router bgp 345

R5(config-router)#bgp router-id 5.5.5.5

R5(config-router)#neighbor 10.1.25.2 remote-as 200

R5(config-router)#neighbor 4.4.4.4 remote-as 345

R5(config-router)#neighbor 4.4.4.4 update-source lo0

 

R3(config-router)#neighbor 4.4.4.4 next-hop-self

R5(config-router)#neighbor 4.4.4.4 next-hop-self

R4(config-router)#do sh ip bgp     //此时优选的是R3

     Network          Next Hop            Metric LocPrf  Weight  Path

 * i 100.0.1.0/24     5.5.5.5                  0    100      0     200   i

 *>i                  3.3.3.3                0   100      0     100    i

 

如果让;路由100.0.1.1优选R5;

方法一:修改weight

R4(config-router)#router bgp 345     

R4(config-router)#neighbor 5.5.5.5 weight  10

 

R4(config)#do sh ip bgp

     Network          Next Hop            Metric LocPrf Weight  Path

 *>i 100.0.1.0/24     5.5.5.5                  0    100     10   200 i

 * i                  3.3.3.3                  0    100    0   100 i

方法二:

R4(config)#acc 1 permit 100.0.1.0/24

R4(config)#route-map test permit 10

R4(config-route-map)#match ip address 1

R4(config-route-map)#set weight 100

R4(config)#router bgp 345

R4(config-router)#neighbor 5.5.5.5 route-map test in   //只能是in方向的,因为weight是不能传的。

 

R4(config)#do sh ip bgp

     Network          Next Hop            Metric LocPrf Weight Path

 * i 100.0.1.0/24     3.3.3.3                  0    100      0 100 i

 *>i                  5.5.5.5                  0    100    100 200 i

2、优选具有最大的Locl-Pref值的路由

 ·公认自决属性,值越大越优先

 ·LOCAL-PREF只能在IBGP Peer之间传递,只能在AS 内部传。

 ·默认情况下,本地始发的路由的LP100

   -可用bgp default local-preference ?修改默认值

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

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

实验:R4R5访问100.0.1.0,通过route-map修改本地优先级

R5(config)#ip prefix-list 1 permit 100.0.1.0/24

R5(config)#route-map test per 10

R5(config-route-map)#match ip add prefix-list 1

R5(config-route-map)#set local-preference 101

R5(config)#router bgp 345

R5(config-router)#neighbor 4.4.4.4 route-map test out

 

R4(config)#do sh ip bgp

     Network          Next Hop            Metric  LocPrf  Weight Path

 * i 100.0.1.0/24     3.3.3.3                  0      100      0   100 i

 *>i                  5.5.5.5                  0   101       0   200 i

此实验可以在R3做,和R5的一样,也可以在R5上做,把in改成out

R4上做:

 

3.  优选起源于本地的路由(如本地Networkaggregetredistribute的)既下一跳是0.0.0.0(在BGP表中,当前路由器通告的路由的下一跳为0.0.0.0

R3(config)#ip route 8.0.0.0 255.0.0.0 null 0

R3(config)#router bgp 345

R3(config-router)#network 8.0.0.0 mask 255.0.0.0

 

R4(config)#ip route 8.0.0.0 255.0.0.0 null 0

R4(config)#router bgp 345

R4(config-router)#network 8.0.0.0 mask 255.0.0.0

 

R4(config)#do sh ip bgp

     Network          Next Hop            Metric LocPrf Weight Path

 *>  8.0.0.0          0.0.0.0                  0         32768 i

 * i                  3.3.3.3                  0    100      0 i

R4(config)#route-map test permit   //修改weight值为0.

R4(config-route-map)#set weight 0

R4(config-route-map)#router bgp 345

R4(config-router)#network 8.0.0.0 mask 255.0.0.0 route-map test

 

4. 优选AS-path最短的路由

 ·as-path的策略,只能在AS之间执行,因为as-path只会在离开AS的时候发生改变,只会在EBGP之间发生变化。

 ·规则补充:在做聚合路由时,使用as-set关键字后产生的AS-path列表中的{}里的AS号长度只算一个AS号的长度

 

在联邦内的AS-PATH列表中的()内的AS号长度不做计算依据

 

R3(config)#ip prefix-list 1 permit 100.0.1.0/24

R3(config)#route-map test

R3(config-route-map)#match ip add per 1

R3(config-route-map)#set as-path prepend 888

R3(config)#router bgp 345

R3(config-router)#neighbor 10.1.13.1 route-map test in

R3(config)#do cle ip bgp *

R3(config)#do sh ip b    //如果在R1上做,path就会变成100.800

     Network          Next Hop            Metric LocPrf Weight   Path

 *   100.0.1.0/24     10.1.13.1                0             0  888 100 i

 

 

5.  OriginIGP>BGP>incommplete

 ·这条路由的起源类型

 ·不推荐用此规则来影响BGP决策或数据走向

 

实验:让100.0.1.0优选R5

方法一:修改Origin

R1(config)#ip prefix-list 1 permit 100.0.1.0/24

R1(config)#route-map test

R1(config-route-map)#match ip add prefix-list 1

R1(config)#router bgp 100

R1(config-router)#redistribute connected route-map test  使用重发布

 

R1(config)#do sh ip bgp

     Network          Next Hop            Metric LocPrf Weight Path

 *>  100.0.1.0/24     0.0.0.0                  0         32768   ?

R4(config)#do sh ip bgp

     Network          Next Hop            Metric LocPrf Weight Path

 * i 100.0.1.0/24     3.3.3.3                  0    100      0  100  ?

 *>i                  5.5.5.5                  0    100   0  200  i // i>e>?,优选R5

方法二:使用route-map做引入路由方式

R1(config)#route-map test permit 10

R1(config-route-map)#set origin incomplete

R1(config)#router bgp 100

R1(config-router)#network 100.0.1.0 mask 255.255.255.0

 

6.  优选MED最小的路由,默认情况下仅有当所有的备选路由来自同一AS才会比较MED

 ·MED属性:

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

 ·MED属性设置方法:

   -IGP路由引入BGP时关联Routre-map进行设置

   -BGP Peer应用IN/OUT方向的Route-map进行设置

   -Route-map(自动)方式:

       ·使用networkredistribute方式将IGP路由引入BGP时,MED将继承   

         IGP路由的Metric(直连路由及静态路由的Metric0

       ·使用aggregate-address方式引入路由,则MED为空。

 ·MED注意事项:

   -默认情况下,只比较来自同一邻居ASBGP路由的MED值,就是说如果同一个目的地的两条路由来自不同的AS,则不进行MED值的比较,如果仍希望比较来自不同邻接AS对的路由,可使用如下命令。

     ·bgp always-compare-med  //用这条命令进行比较

   -MDE只是在直连相连的自制系统间影响业务量,而不会跨越AS传递

实验

R4(config)#route-map test

R4(config-route-map)#match ip add prefix-list 1

R4(config-route-map)#set metric 100   //修改metric

R4(config-route-map)#router bgp 345

R4(config-router)#neighbor 3.3.3.3 route-map test in   //R3

R4(config-router)#bgp always-compare-med

R4(config)#do sh ip bgp

     Network          Next Hop            Metric  LocPrf Weight Path

 * i 100.0.1.0/24         3.3.3.3               100    100      0 100 i

 *>i                   5.5.5.5                 0    100      0 200 i

 

7.   优选EBGP邻居发来的路由(相对于IBGP邻居学来的),在联邦EBGPIBGP中首选联邦EBGP路由

实验:

R4(config)#router bgp 345

R4(config-router)#neighbor 3.3.3.3 route-reflector-client   //R4配置成路由反射器,将R3上的10.0.1.0路由传递该R5

 

R5(config)#do sh ip bgp

     Network          Next Hop            Metric LocPrf  Weight  Path

 * i 100.0.1.0/24     3.3.3.3                  0    100      0    100   i  //IBGP传过来的

 *>                   10.1.25.2             0             0   200   i  //EBGP传过来的

 

 

 

8.  优选到BGP NEXT-HOP最近的邻居

 ·注意:这里严格的说应该这样表述:我从两个BGP邻居各收到一条路由,这两条BGP路由有相同的路由前缀,首先这两条BGP路由的NEXT-HOP是不相同的,否则不具有可比性,那么我比较本地到达这两个NEXT-HOPIGP度量值,谁metric小,我就会选谁。

 

实验:

R4(config)#int s1/0  

R4(config-if)#ip os

R4(config-if)#ip ospf co

R4(config-if)#ip ospf cost 1111   //在与R3的接口下,修改cost值,是路由从R5过来。

 

R4(config)#do sh ip bgp

     Network          Next Hop            Metric LocPrf Weight Path

 * i 100.0.1.0/24     3.3.3.3                  0    100      0 100 i

 *>i                  5.5.5.5                  0    100      0 200 i

R4(config)#do sh ip rou

O        3.3.3.3 [110/1112] via 10.1.34.3, 00:02:21, Serial1/0   //比较到达下一跳的metric值,优选小的metric值。

O        5.5.5.5 [110/65] via 10.1.45.5, 1d20h, Serial1/1

为什么优选R3???

 

9.  BGP负载均衡

 ·当前面的8条选路原则都无法优选出最优路由时,并且在BGP 进程下面配置了maximun-paths[ibgp]n,n的取值为2-6,那么将执行等价负载均衡,也就是将这些等代价的BGP路径都放进IP路由表使用,但是要注意,虽然这些路径在本地都用了,最终却只有一条BGP路径是best最优的。

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

   -必须有相同的路径属性,如weightLPAS-PATH(不仅是长度,整个AS-PATH包括AS号都要相同)、origin codeMEDIGPDistance

   -每一条路径的下一跳都不相同。

 ·maximum-path[ibgp]n

   -如果不关联ibgp关键字,那么只会对extenal路由执行等价负载均衡(默认只对EBGP路由)

   -如果要对Internal路由做负载均衡,则需关联ibgp关键字

   -如果不配置maximum-paths,那么将进行下一跳选路原则。

实验:删除R1R2上的BGP,建立AS为12的BGP

R4(config)#do sh ip bgp 100.0.1.0   //符合等值负载均衡的条件的。

  12

    5.5.5.5 (metric 65) from 5.5.5.5 (5.5.5.5)

      Origin IGP, metric 0, localpref 100, valid, internal

      rx pathid: 0, tx pathid: 0

  Refresh Epoch 1

  12, (Received from a RR-client)

    3.3.3.3 (metric 65) from 3.3.3.3 (3.3.3.3)

      Origin IGP, metric 0, localpref 100, valid, internal, best

      rx pathid: 0, tx pathid: 0x0

 

R4(config)#do sh ip rou

      5.0.0.0/32 is subnetted, 1 subnets

O        5.5.5.5 [110/65] via 10.1.45.5, 1d22h, Serial1/1

B        100.0.1.0 [200/0] via 3.3.3.3, 00:01:50    //因为3.3.3.3best,所以下一跳优选3.3.3.3,在进行递归,

      3.0.0.0/32 is subnetted, 1 subnets

O        3.3.3.3 [110/65] via 10.1.34.3, 00:01:55, Serial1/0  //3.3.3.3不是直连,在递归3.3.3.3的下一跳是10.1.34.3 s1/0直连

 

R4(config)#do sh ip cef 100.0.1.0

100.0.1.0/24

  nexthop 10.1.34.3 Serial1/0

 

R4(config)#router bgp 345

R4(config-router)#no maximum-paths ibgp 2

 

R4(config)#do sh ip bgp 100.0.1.0

Multipath: iBGP

  Advertised to update-groups:

     27        

  Refresh Epoch 1

  12, (Received from a RR-client)

    3.3.3.3 (metric 65) from 3.3.3.3 (3.3.3.3)

      Origin IGP, metric 0, localpref 100, valid, internal, multipath, best  //multipath代表符合负载均衡条件的

      rx pathid: 0, tx pathid: 0x0

  Refresh Epoch 1

  12

    5.5.5.5 (metric 65) from 5.5.5.5 (5.5.5.5)

      Origin IGP, metric 0, localpref 100, valid, internal, multipath(oldest)

      rx pathid: 0, tx pathid: 0

 

R4(config)#do sh ip rou   //此时路由表里会出现两个下一跳

B        100.0.1.0 [200/0] via 5.5.5.5, 00:06:58

                   [200/0] via 3.3.3.3, 00:06:58

 

 

10. 优选最老的EBGP路由,降低滚翻的影响(此条主要对EBGP路由起效,但是现在基本不用该条,因不确定性太大)

 

 

 

11.  BGP邻居的RID越小越优先 

 

 

R1(config)#router bgp 123

R1(config-router)#bgp router-id 1.1.1.1  //RID值改小

R2(config)#do sh ip bgp 100.0.1.0

    10.1.12.1 from 10.1.12.1 (1.1.1.1)

      Origin IGP, metric 0, localpref 100, valid, internal, best

      rx pathid: 0, tx pathid: 0x0

  Refresh Epoch 1

  Local

    10.1.23.3 from 10.1.23.3 (100.0.1.1)

      Origin IGP, metric 0, localpref 100, valid, internal

      rx pathid: 0, tx pathid: 0

 

R1(config-router)#bgp router-id 111.111.111.111   //RID值改大

 

R2(config)#do sh ip bgp 100.0.1.0

    10.1.12.1 from 10.1.12.1 (111.111.111.111)

      Origin IGP, metric 0, localpref 100, valid, internal

      rx pathid: 0, tx pathid: 0

  Refresh Epoch 1

  Local

    10.1.23.3 from 10.1.23.3 (100.0.1.1)

      Origin IGP, metric 0, localpref 100, valid, internal, best

 ·规则补充:如果一条路径包含RR属性originator属性值将在规则11的最优路径选择过程中代替RouterID

就是说如果有RR出现,则两个RID值相等,就不能用11比较

 

12、优选Cluster-List最短的路由

 

 

 

R1(config)#int lo0

R1(config-if)#ip add 1.1.1.1 255.255.255.0

R1(config)#int lo1

R1(config-if)#ip add 11.11.11.11 255.255.255.0

R1(config-if)#router ospf 1

R1(config-router)#network 10.1.12.1 0.0.0.0 a 0

R1(config-router)#network 1.1.1.1 0.0.0.0 a 0

R1(config)#router bgp 123

R1(config-router)#neighbor 2.2.2.2 remote-as 123

R1(config-router)#neighbor 2.2.2.2 update-source lo0

R1(config-router)#network 11.11.11.0 mask 255.255.255.0

 

R2(config)#int lo0

R2(config-if)#ip add 2.2.2.2 255.255.255.0

R2(config)#router ospf 1

R2(config-router)#network 10.1.12.2 0.0.0.0 a 0

R2(config-router)#network 10.1.23.2 0.0.0.0 a 0

R2(config-router)#network 2.2.2.2 0.0.0.0 a 0

 

R2(config)#router bgp 123

R2(config-router)#neighbor 1.1.1.1 remote-as 123

R2(config-router)#neighbor 10.1.12.1 remote-as 123

R2(config-router)#neighbor 1.1.1.1 update-source lo0          

R2(config-router)#neighbor 3.3.3.3 remote-as 123

R2(config-router)#neighbor 3.3.3.3 update-source lo0

R2(config-router)#nei 1.1.1.1 route-reflector-client   //配置路由反射器

 

 

R3(config)#int lo0

R3(config-if)#ip add 3.3.3.3 255.255.255.0

R3(config-if)#router ospf 1

R3(config-router)#network 3.3.3.3 0.0.0.0 a 0

R3(config-router)#network 10.1.23.3 0.0.0.0 a 0

R3(config)#router bgp 123

R3(config-router)#neighbor 2.2.2.2 remote-as 123

R3(config-router)#neighbor 2.2.2.2 update-source lo0

R3(config-router)#neighbor 1.1.1.1 remote-as 123

R3(config-router)#neighbor 1.1.1.1 update-source lo0

 

R3(config)#do sh ip bgp 11.11.11.11   //都是IBGP邻居关系

    1.1.1.1 (metric 129) from 1.1.1.1 (1.1.1.1)  

      Origin IGP, metric 0, localpref 100, valid, internal, best  

      rx pathid: 0, tx pathid: 0x0

 

    1.1.1.1 (metric 129) from 2.2.2.2 (2.2.2.2)

      Origin IGP, metric 0, localpref 100, valid, internal

      Originator: 1.1.1.1, Cluster list: 2.2.2.2  

      rx pathid: 0, tx pathid: 0   //因为这个是11 RR情况,就是1.1.1.11.1.1.1比,比不出来,所以用规则12来比较。

Cluster list: 2.2.2.2 //比较。因为1.1.1.1更本就没有,所以选择上面的1.1.1.1最优。

 

13、选择邻居IP地址(BGPneighbor配置中的那个地址最小的路由)

 

 

 

 

posted @ 2023-07-13 10:13  往事携冷风  阅读(1390)  评论(0编辑  收藏  举报