【BGP】BGP最优路径的选择

在默认情况下,到达同一目的地,BGP只走单条路径,并不希望在多条路径之间执行负载均衡。当BGP路由表中有多条路径可以到达同一目的地时,需要靠比较路由条目中的路径属性,只有在比较多条路由的属性之后,才能决定选择哪条为最优路径。BGP的每条路由都带有路径属性,对于通过比较路径属性来选择最优路径,BGP需要在多条路径之间按照一定的顺序比较属性,当多条路由的同一属性完全相同时,需要继续比较顺序中的下一条属性。BGP在选择最优路径时,需要按照以下顺序来做比较:

1.最高Weight值

  (选择最高Weight值的路由,Weight值为Cisco路由器特有,并且只在本地路由器有效,默认Weight值为0,本地发起路由为32768。)

2.最高LOCAL_PREF值

(如果Weight值相同,则选择拥有最高LOCAL_PREF值的路由,默认为100。)

3.本地发起路由

 (如果LOCAL_PREF值相同,则选择BGP本地发起的路由,换句话说,也就是下一跳为0.0.0.0的路由,本地发起的路由有多种方式,如通过在BGP进程下命令network命令从IGP路由表导入,将其它路由协议重分布进BGP路由表,最后是汇总路由表。而通过命令network和重分布的路由优先于手工汇总的路由。)

4.最短AS_PATH

(如果本地发起路由无法比出最优路径,则选择拥有最短AS_PATH的路由,但是可以跳过这一步,输入命令bgp bestpath as−path ignore后,就会忽略对AS_PATH的比较,而直接比较下一属性。需要更加注意的是,AS_SET被认为是1个AS,而无论AS_SET中包含多少个AS,并且BGP联邦内部AS不被计算。)

5.最低Origin类型

(如果AS_PATH无法比出最优路径,则选择拥有最低Origin类型的路由,Origin表示路由最初是如何进入BGP路由表的,目前有三种进行BGP路由表的方法,从IGP导入,从EGP学习,以及重分布,它们的优先级为IGP优于EGP,EGP优于Incomplete,即IGP>EGP>Incomplete。

6.最小MED值

(如果Origin类型无法比出最优路径,则选择拥有最小MED值的路由,并且只有当多个下一跳邻居在同一AS时才比较MED值。如果要在多个不同AS的下一跳中比较MED,可在BGP进程中输入命令bgp always-compare-med,注意须保证此命令在整个AS的路由器上输入,否则可能产生路由环路。默认的MED值为0,如果收到一条没有MED的路由,也认为是0。)

7.eBGP优于iBGP

(如果MED值无法比出最优路径,则选择下一跳为eBGP的邻居而不选择iBGP邻居。都知道eBGP的路由AD值为20,而iBGP的路由AD值为200,但BGP并不在eBGP与iBGP之间比较AD值,并且在比到此步时,邻居类型才影响了最优路径的选择,这种影响是受邻居类型的影响,而不是受AD值的影响。注意:BGP联邦内部没有此规则。)

8.最小IGP metric到达下一跳的路由

(如果多条路径的下一跳邻居同为eBGP或iBGP,则选择拥有最小IGP metric到达下一跳的路由。)

9.负载均衡(如果开启的话)

(BGP并不是不能负载均衡的,如果之前的属性都无法选出最优路径,则执行负载均衡,但必须是之前的所有属性均完全相同,缺一不可。需要注意:只有负载均衡功能开启了,BGP才会执行负载均衡,否则,继续比较下一属性。)

在开启负载均衡功能时,在BGP进程下输入以下命令:

maximum-paths n (多条路径的下一跳邻居都为eBGP时,输入此命令)

maximum-paths ibgp n(多条路径的下一跳邻居都为iBGP时,输入此命令)

其中n为执行负载均衡的路径数量,最大值为6,默认为1,也就是不执行负载均衡。

如果在eBGP和iBGP邻居之间同时执行负载均衡,输入命令maximum-paths eibgp n,此命令只支持在Ipv4 VRF模式下输入,就是只能支持MPLS VPN下的eBGP和iBGP邻居之间负载均衡。

10.如果下一跳都为eBGP,则选择最早学习到的路由(即时间最长的路由)

(为了避免路由翻动,所以选择最早学习到的路由,如果要忽略比较路由学习到的时间长短,可在BGP进程下输入命令bgp best path compare−routerid,某些IOS已经自动加入此命令,并且不能删除。如果多条路由拥有相同的Router-ID,比如路由是从同一个邻居学习到的,同样也会忽略比较路由学习到的时间长短。)

11.最低Router-ID下一跳

(BGP的Router-ID选举如同OSPF,在此步,拥有最低Router-ID的下一跳路由将被选为最优路径。)

12.最短cluster list(如同AS_PATH)

[cluster list只在BGP reflector (RR)的环境下才有,功能如同AS_PATH]

13.最小下一跳的邻居地址

(如果比较之前的所有属性都无法选出最优路径,最终选择下一跳的邻居地址最小的路由,这个地址就是在建立邻居时所指的地址,也是邻居和自己建立TCP连接所使用的源地址,建立不同邻居,不可能使用相同地址,所以不可能两个不同路径的邻居地址是相同的,在这一步一定能够选出最优路径。)

【BGP】BGP非等价负载均衡及BGP Link Bandwidth特性

与本文档配套的教学视频:http://v.youku.com/v_show/id_XNjMxNzgzMDgw.html
一、环境描述

红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处

拓扑及AS规划、BGP邻居关系如上图所示。
AS123内R1、R2、R3运行OSPF,通告各自互联接口及Loopback0口。
Loopback0口地址为x.x.x.x/32,x为设备编号。该接口用于BGP routerID。iBGP邻居关系基于该接口建立。
R1在BGP中通告11网段路由;R4在BGP中通告44网段路由。
二、eBGP非等价负载均衡
 
在R4上,能分别从R2及R3上学习到11.11.11.11/32的eBGP路由,如果配置上maximum-paths 2
则R4上,去往11网络就会同时将R2、R3作为下一跳进行等价负载均衡(虽然R3的上联口带宽更小,但是是直连)
R4的配置如下:
router bgp 200
neighbor 10.1.24.2 remote-as 123
neighbor 10.1.34.3 remote-as 123
maximum-paths 2
R4#show ip route 11.11.11.11
Routing entry for 11.11.11.11/32
  Known via “bgp 400”, distance 20, metric 0
  Tag 123, type external
  Last update from 10.1.34.3 00:00:02 ago
  Routing Descriptor Blocks:
    10.1.34.3, from 10.1.34.3, 00:00:02 ago
      Route metric is 0, traffic share count is 1
      AS Hops 1
      Route tag 123
  * 10.1.24.2, from 10.1.24.2, 00:00:02 ago
      Route metric is 0, traffic share count is 1
      AS Hops 1
      Route tag 123
从上面的显示可以看出,在R4上关于11的路由其实是等价负载均衡。Share count是1比1。但是不合理啊,因为R4上这两个出接口的带宽明显不一样是不?如何进行非等价负载均衡呢?
红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处
R4的配置修改如下:
router bgp 400
 bgp router-id 4.4.4.4
 bgp dmzlink-bw
 network 44.44.44.44 mask 255.255.255.255
 neighbor 10.1.24.2 remote-as 123
 neighbor 10.1.24.2 dmzlink-bw
 neighbor 10.1.34.3 remote-as 123
 neighbor 10.1.34.3 dmzlink-bw
 maximum-paths 2
 no auto-summary
R4#show ip bgp 11.11.11.11
BGP routing table entry for 11.11.11.11/32, version 8
Paths: (2 available, best #1, table Default-IP-Routing-Table)
Multipath: eBGP
Flag: 0x840
  Advertised to update-groups:
     1         
  123
    10.1.24.2 from 10.1.24.2 (2.2.2.2)
      Origin IGP, localpref 100, valid, external, multipath, best
      DMZ-Link Bw 12500 kbytes
  123
    10.1.34.3 from 10.1.34.3 (3.3.3.3)
      Origin IGP, localpref 100, valid, external, multipath
      DMZ-Link Bw 193 kbytes
我们看到,这里两条路由都打上了一个新的属性值(Link Bandwidth Community),这个值就是接口带宽的1/8。这实际上是一个扩展的communuty值。这里利用的就是BGP Link Bandwidth特性。通过这个特性,BGP能够用一个扩展的Community属性来描述与eBGP邻居的直连链路的带宽信息,从而利用这个属性值进一步的实现非等价负载均衡。
R4#show ip route 11.11.11.11
Routing entry for 11.11.11.11/32
  Known via “bgp 400”, distance 20, metric 0
  Tag 123, type external
  Last update from 10.1.34.3 00:00:02 ago
  Routing Descriptor Blocks:
    10.1.34.3, from 10.1.34.3, 00:00:02 ago
      Route metric is 0, traffic share count is 1
      AS Hops 1
      Route tag 123
  * 10.1.24.2, from 10.1.24.2, 00:00:02 ago
      Route metric is 0, traffic share count is 60
      AS Hops 1
      Route tag 123
F0/0口带宽为100M,S0/0口带宽为1.544M, 除一下,刚好比为将近1:60。
注意此时虽然在R4上路由表中已经出现了非等价负载均衡的两条路由,但是由于该设备目前的交换机制是CEF,而CEF默认的负载均衡方式是per-desination的方式,实际上就是基于源、目地址对的负载均衡。因此为了真正实现非等价负载均衡,需要在R4的F0/0及S1/0接口上配置:ip load-sharing per-packet。这样一来当R4下挂的用户要访问11.11.11.11网络,数据就会被R4在F0/0及S1/0口上执行非等价负载均衡。流量的比例大致是1/60,当然,在实验环境中可以适当的在F0/0及S1/0接口上调节bandwidth来使现象更明显。
 
红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处
三、iBGP非等价负载均衡
 
R1的配置如下:
router bgp 123
 bgp router-id 1.1.1.1
 bgp dmzlink-bw                           !!一定要打开这个开关
 neighbor 2.2.2.2 remote-as 123
 neighbor 2.2.2.2 update-source Loopback0
 neighbor 3.3.3.3 remote-as 123
 neighbor 3.3.3.3 update-source Loopback0
 maximum-paths ibgp 2
R2的配置如下:
router bgp 123
 bgp router-id 2.2.2.2
 bgp dmzlink-bw
 neighbor 1.1.1.1 remote-as 123
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 1.1.1.1 next-hop-self
 neighbor 1.1.1.1 send-community extended   !!注意,一定要send-community ex,因为Link Bandwidth Community是个扩展的Community属性
 neighbor 10.1.24.4 remote-as 400
 neighbor 10.1.24.4 dmzlink-bw
 
R3的配置如下:
router bgp 123 
 bgp router-id 3.3.3.3
 bgp dmzlink-bw
 neighbor 1.1.1.1 remote-as 123
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 1.1.1.1 next-hop-self
 neighbor 1.1.1.1 send-community extended
 neighbor 10.1.34.4 remote-as 400
 neighbor 10.1.34.4 dmzlink-bw
红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处
R4的配置就不贴了,主要是通告44.44.44.44。
R1#show ip bgp 44.44.44.44
BGP routing table entry for 44.44.44.44/32, version 4
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Multipath: iBGP
  Not advertised to any peer
  400
    3.3.3.3 (metric 2) from 3.3.3.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, internal, multipath
      DMZ-Link Bw 193 kbytes
  400
    2.2.2.2 (metric 2) from 2.2.2.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, internal, multipath, best
      DMZ-Link Bw 12500 kbytes
R1#show ip route 44.44.44.44
Routing entry for 44.44.44.44/32
  Known via “bgp 123”, distance 200, metric 0
  Tag 400, type internal
  Last update from 2.2.2.2 00:10:40 ago
  Routing Descriptor Blocks:
   * 3.3.3.3, from 3.3.3.3, 00:10:40 ago
      Route metric is 0, traffic share count is 1
      AS Hops 1
      Route tag 400
    2.2.2.2, from 2.2.2.2, 00:10:40 ago
      Route metric is 0, traffic share count is 60
      AS Hops 1
      Route tag 400
四、BGP Link Bandwidth
 
1.特性描述
  • 通过利用BGP的Link Bandwidth特性,我们能够在AS边界路由器外部链路带宽不等价的情况下,实现BGP路由的非等价负载均衡。该特性通过在BGP进程的IPv4或VPNv4地址族中使用bgp dmz-bandwidth命令激活。这个特性搭配BGP multipath特性,即可实现非等价负载均衡。
  • BGP Link Bandwidth特性用于在扩展Community属性中通告一条AS出口链路的带宽。
  • 这个特性配置在一台AS边界路由器上,指向其eBGP邻居,那么此时该特性所描述的就是该路由器与其eBGP邻居之间的链路带宽。而且该链路带宽信息(使用扩展Community描述)除了AS边界路由器自己用(用于本地的非等代价负载均衡),还可以向AS内的iBGP邻居传递,当然,前提是得配置send-community extended.
  • 需要进一步的信息,可在CISCO.COM搜索BGP Link Bandwidth
2.BGP Link Bandwidth的前提条件
  • 需先激活maximum-paths特性
  • 当要向iBGP邻居通告Link Bandwidth特性时,需send-community extended
  • CEF或dCEF必须在所有参与该特性的路由器上打开
 
3.BGP Link Bandwidth特性的限制
 
  • 该特性只能配置在BGP进程的IPv4或VPNv4地址族下
  • BGP只能够在Link Bandwidth Community中通告与eBGP邻居直连的链路(接口)带宽
  • 在IPv4及VPNv4地址族中,iBGP及eBGP负载均衡都是支持的;但是eiBGP负载均衡却只能在VPNv4地址族中才能够支持,也就是iBGP与eBGP的负载均衡。
4.关于Link Bandwidth 扩展Community属性
该属性值是一个4bytes,描述的是一个单跳eBGP peer之间的直连链路(的带宽信息)。
例如上图中,R2作为一台ASBR,我们激活了bgp dmzlink-bw,同时neighbor dmz-bandwidth命令指定了一个单跳eBGP邻居R4。那么R3从F1/0接口收到来自R4的路由更新在本地会粘贴一个扩展Community属性(上图R2的BGP条目中红色粗体字),这个扩展Community属性值实际上描述的就是R2的F1/0口的带宽。这个扩展属性值R2自己可以用,当她有多条出口链路并且都激活了BGP Link Bandwidth特性、并搭配maximum-paths的话,就可以实现非等代价负载均衡;红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处
同时该扩展属性值也能传递给自己的iBGP邻居,例如R2及R3都激活Link Bandwidth特性,然后将描述各自出口链路Link Bandwidth信息的扩展Community属性传递给iBGP邻居R1,那么R1上就可以进一步执行非等代价负载均衡策略,其前往44.44.44.44的流量就可以在R2及R3上进行合理的分摊。
当然,R4上也可以利用BGP Link Bandwidth特性实现非等价负载均衡。

【BGP】BGP Policy Accounting

1.基本概念
 
BGP PA能够对BGP邻居发送来的、或者本地发出去的IP流量进行流量统计。
PA在接口上使能,可以基于Community-list、AS_PATH等参数来识别IP流量。
 
2.配置步骤
 
1)定义要统计的感兴趣流量并设置流量索引
 
Communitu-list、AS_PATH或者 AS号等参数都可以用于抓取感兴趣流量。
在route-map中匹配感兴趣流量。
例如:
ip community-list 30 permit 300:30
route-map PA permit 10
  match community-list 30
  set traffic-index 3
2)将IP流量归类
在BGP进程中使用table-map关键字关联上面定义好的route-map。
BGP将基于route-map中定义的规则对路由表中的路由进行归类。其实就是把感兴趣流量归类到traffic-index中。
例如:
router bgp 12
  table-map PA
3)在接口上激活BGP PA
bgp-policy accounting [input | output]
4)查看BGP PA的统计结果
show cef interface policy-statistics
3.配置案例一
 
配置的思路是,在R2上,想要抓取fast0/0口(也就是R1发过来的),去往30.30.30.0/24的流量
那么先在R2上对30.30.30.0/24的路由前缀进行标记,使用community标记,同时配置一个route-map PA,将特定community标记的路由设置traffic-index。配置如下:
ip prefix-list 30 permit 30.30.30.0/24
!
route-map setComm permit 10
  match ip address prefix-list 30
  set community 300:30
!
ip community-list 30 permit 300:30
!
route-map PA permit 10
  match community 30
  set traffic-index 30
!
router bgp 12
  table-map PA
  neighbor 10.1.23.3 route-map setComm in
!
interface fast0/0
 ip address 10.1.12.2 255.255.255.0
  bgp-policy accounting input
 
接下去在R1上向30.30.30.0/24去ping 10个ICMP包,那么就可以在R2上看到相应的流量:
R2#sh cef interface s0/0 policy-statistics input         
Serial0/0 is up (if_number 4)
  Corresponding hwidb fast_if_number 4
  Corresponding hwidb firstsw->if_number 4
  BGP policy accounting on input is enabled.
  IndexPacketsBytes
  …        …      
  30       10            1000
如果嫌输出太多,可以用管道符:sh cef interface s0/0 policy-statistics input | in 30
4.配置案例二
下面的示例,定义了多个流量索引(引用自CISCO官方文档)。
ip community-list 30 permit 100:190
ip community-list 40 permit 100:198
ip community-list 50 permit 100:197
ip community-list 60 permit 100:296
!
route-map set_bucket permit 10
match community 30
set traffic-index 2
!
route-map set_bucket permit 20
match community 40
set traffic-index 3
!
route-map set_bucket permit 30
match community 50
set traffic-index 4
!
route-map set_bucket permit 40
match community 60
set traffic-index 5

BGP 地址族分析 – Address-family

所谓地址族,就是把ipv4、ipv6和vpnv4分成不同的“块”,对每个“块”单独进行配置,如下所示:

Rack1R3(config-router)#address-family ?
ipv4   Address family
ipv6   Address family
vpnv4  Address family

由于ipv6现在应用较少,所以暂时不予讨论,如果大家配置过MPLS VPN,那么对ipv4和vpnv4这两个地址族应该有些了解。
其实如果不是有特殊应用(MPLS、Ipv6),也不会用到这些地址族的概念,直接默认建立全局BGP邻居及属性就可以了。所以可以理解地址组是BGP的一个扩展。
下面我们就这两个地址族进行分析。

Ipv4vpnv4地址族的分析:

特殊说明:“no bgp default ipv4-unicast” 命令是在全局BGP下禁用单播的传播,在MPLS中,正确的配置就是打上此命令,然后如果需要全局BGP连接或在BGP vpnv4连接,那么就在各个地址族中激活此邻居就可以了。
但有些全局命令是可以被继承到各个地址族中的。

以下分别分析几种常见的情况

1、如果没有配置“no bgp default ipv4-unicast”,直接在全局配置BGP邻居关系,这样ipv4地址族会默认被激活的,但是不会显示在“show run”中,如下所示:

Rack1R1#config ter
Enter configuration commands, one per line.  End with CNTL/Z.
Rack1R1(config)#router bgp 1
Rack1R1(config-router)#bgp router-id 150.1.1.1
Rack1R1(config-router)#nei 150.1.2.2 remote-as 1

Rack1R1(config-router)#nei 150.1.2.2 update-source lo0
Rack1R1(config-router)#address-family vpnv4

Rack1R1(config-router-af)#nei 150.1.2.2 activate
Rack1R1(config-router-af)#nei 150.1.2.2 send-community ex
Rack1R1(config-router-af)#exit
Rack1R1(config-router)#end
Rack1R1#
Rack1R1#sh run | b r b
router bgp 1
no synchronization
bgp router-id 150.1.1.1
neighbor 150.1.2.2 remote-as 1
neighbor 150.1.2.2 update-source Loopback0
no auto-summary
  >>>>> 没有ipv4地址族

address-family vpnv4
neighbor 150.1.2.2 activate
neighbor 150.1.2.2 send-community extended
exit-address-family
!

2、此时如果打上“no bgp default ipv4-unicast” address-family ipv4地址族就会自动显示出来,此时如果再建立BGP全局邻居,这条命令就会生效:

Rack1R1#config ter
Enter configuration commands, one per line.  End with CNTL/Z.
Rack1R1(config)#router bgp 1
Rack1R1(config-router)#no bgp default ipv4-unicast

Rack1R1(config-router)#end
Rack1R1#
Rack1R1#sh run | b r b
router bgp 1
bgp router-id 150.1.1.1
no bgp default ipv4-unicast
neighbor 150.1.2.2 remote-as 1
neighbor 150.1.2.2 update-source Loopback0
!
address-family ipv4
neighbor 150.1.2.2 activate
no auto-summary >>>>> 这些命令从全局BGP配置中继承到了ipv4的地址族中

no synchronization
exit-address-family

!
address-family vpnv4
neighbor 150.1.2.2 activate
neighbor 150.1.2.2 send-community extended
exit-address-family

再加一个全局BGP邻居会怎么样呢?

Rack1R1#config ter
Enter configuration commands, one per line.  End with CNTL/Z.
Rack1R1(config)#router bgp 1
Rack1R1(config-router)#nei 150.1.3.3 remot 1

Rack1R1(config-router)#nei 150.1.3.3 update-source lo0
Rack1R1(config-router)#end
Rack1R1#
Rack1R1#sh run | b r b
router bgp 1
bgp router-id 150.1.1.1
no bgp default ipv4-unicast
neighbor 150.1.2.2 remote-as 1
neighbor 150.1.2.2 update-source Loopback0
neighbor 150.1.3.3 remote-as 1
neighbor 150.1.3.3 update-source Loopback0
!
address-family ipv4     >>>>>
在ipv4地址族中没有150.1.3.3 的邻居
neighbor 150.1.2.2 activate
no auto-summary
no synchronization
exit-address-family
!
address-family vpnv4
neighbor 150.1.2.2 activate
neighbor 150.1.2.2 send-community extended
exit-address-family
!

由于“no bgp default ipv4-unicast”命令的关系,虽然建立了全局BGP的邻居,但它是不会出现在任何地址族中的。如果想在ipv4或vpnv4中起效果,就得在地址族中用“nei 150.1.3.3 active”把邻居激活:

Rack1R1(config-router)#address-family ipv4
Rack1R1(config-router-af)#nei 150.1.3.3 activate
Rack1R1(config-router-af)#exit
Rack1R1(config-router)#end
Rack1R1#
Rack1R1#sh run | b r b
router bgp 1
bgp router-id 150.1.1.1
no bgp default ipv4-unicast
neighbor 150.1.2.2 remote-as 1
neighbor 150.1.2.2 update-source Loopback0
neighbor 150.1.3.3 remote-as 1
neighbor 150.1.3.3 update-source Loopback0
!
address-family ipv4
neighbor 150.1.2.2 activate
neighbor 150.1.3.3 activate
no auto-summary
no synchronization
exit-address-family
!
address-family vpnv4
neighbor 150.1.2.2 activate
neighbor 150.1.2.2 send-community extended
exit-address-family

3、如果在没打“no bgp default ipv4-unicast”时,配置“address-family ipv4” (不用配置地址族,进去后直接end退出),会怎么样呢?

Rack1R2#sh run | b r b
router bgp 1
no synchronization
bgp router-id 150.1.2.2
neighbor 150.1.1.1 remote-as 1
neighbor 150.1.1.1 update-source Loopback0
no auto-summary
  >>>>> 此时没有ipv4地址族
address-family vpnv4
neighbor 150.1.1.1 activate
neighbor 150.1.1.1 send-community extended
exit-address-family

Rack1R2(config)#router bgp 1
Rack1R2(config-router)#address-family ipv4
Rack1R2(config-router-af)#exit
Rack1R2(config-router)#end
Rack1R2#
Rack1R2#sh run | b r b
router bgp 1
bgp router-id 150.1.2.2
neighbor 150.1.1.1 remote-as 1
neighbor 150.1.1.1 update-source Loopback0
!
address-family ipv4
neighbor 150.1.1.1 activate
no auto-summary
no synchronization
exit-address-family
!
address-family vpnv4
neighbor 150.1.1.1 activate
neighbor 150.1.1.1 send-community extended
exit-address-family
!

可以看出来,全局的BGP邻居出现在ipv4的地址族中了,所以得出结论:在不配置“no bgp default ipv4-unicast”命令时,默认会把全局BGP邻居关系继承到Ipv4的地址族中。

此时可以用no命令no掉Ipv4地址组中的邻居关系,但命令形式有两种,一种是直接从配置中no掉,一种是no掉后不会从配置中清除,详细如下所示:

No 掉后不会从配置中清除:

Rack1R2(config)#router bgp 1
Rack1R2(config-router)#address-family ipv4
Rack1R2(config-router-af)#no nei 150.1.3.3 activate
Rack1R2(config-router-af)#exit
Rack1R2(config-router)#end
Rack1R2#
Rack1R2#sh run | b r b
router bgp 1
bgp router-id 150.1.2.2
neighbor 150.1.1.1 remote-as 1
neighbor 150.1.1.1 update-source Loopback0
neighbor 150.1.3.3 remote-as 1
neighbor 150.1.3.3 update-source Loopback0
!
address-family ipv4
neighbor 150.1.1.1 activate
no neighbor 150.1.3.3 activate
no auto-summary
no synchronization
exit-address-family

此时有2种方法可以从配置中清除ipv4地址族中的没有用的BGP邻居关系:

1、直接在全局BGP配置下配置“no bgp default ipv4-unicast”
2、用“no nei ” 来把整个邻居No掉,如下所示:

No 掉后从配置中清除:

Rack1R2(config-router)#address-family ipv4
Rack1R2(config-router-af)#no nei 150.1.3.3
Rack1R2(config-router-af)#end
Rack1R2#
Rack1R2#sh run | b r b
router bgp 1
bgp router-id 150.1.2.2
neighbor 150.1.1.1 remote-as 1
neighbor 150.1.1.1 update-source Loopback0
  >>>>> 整个全局BGP的邻居被No掉了
address-family ipv4
neighbor 150.1.1.1 activate
no auto-summary
no synchronization
exit-address-family

4、关于vpnv4的地址族,只要在vpnv4地址族中打上“nei active”就可以了,“neighbor send-community extended”是自动生成的,其他的BGP Policies需要自己手工配置。

在有路由反射器的情况下,“no neighbor peer-group ”命令可以直接从配置中删除此行(ipv4地址族中),但是不能No掉整个peer group,如:

c12012-GD-RR(config-router)#address-family ipv4
c12012-GD-RR(config-router-af)#no neighbor pc1 activate
% Peergroups are automatically activated when parameters are configured

总结:

1、无论是否执行“no bgp default ipv4-unicast”,可以说全局BGP配置同等于ipv4地址组中的配置,如果此时你在ipv4下直接用“no nei ”命令,他会直接从全局BGP的邻居中no掉此邻居,所以不建议如此操作。

2、如果执行了“no bgp default ipv4-unicast”,BGP的Policies (如“route-reflector-client”、“next-hop-self”等)就不能在全局BGP中配置,它们只能在地址族中起作用,这是新版IOS的特性,其实也是强制使配置规范。

ipv4-family unicast 指的是普通的ipv4路由
ipv4-family VPN 指的是mpls VPN路由
还有ipv6等,全局默认的就是ipv4-family unicast
发布不同的路由需要在不同的address family下发布
ipv4-family unicast 当然是为单播路由用的 
ipv4-family vpnv4 当然就是传送VPN路由的 该地址簇里的路由只服务于VPN路由 可结合mpls vpn在路由中打上对等体属性 你去把《mpls vpn网络体系架构》看一遍就明白了

【BGP】BGP Cost Community详解 by 红茶三杯

1.Cost Community概述
 
  • Cost Community是一个扩展的Community属性,只能传递给iBGP邻居或联邦peer(含联邦iBGP及联邦eBGP邻居),不能传递给eBGP邻居;
  • 通过利用Cost Community,我们能够在一个AS或联邦内部自定义BGP的最优路径选择。Cost Community事实上是提供给我们除了“BGP13条选路规则”之外的又一“插入点”( point of insertion),相当于提供给我们另一个操控路由优选的手柄。
  • 针对internal路由,在route-map中使用set extcommunity cost命令去设置cost community值。
  • 在上述set命令后,配置一个ID(0-255)以及cost number(0- 4294967295)。Cost number值可以影响路径的优选,越小越优先。如果两个路径cost number值相等,那么拥有小ID值的被优选。
  • Cost community属性值是扩展community,在向邻居发送前需配置neighbor send-community extand。
  • 下述命令可以跟route-map来设置Cost Community:
      aggregate-address
      neighbor default-originate route-map {in | out}
      neighbor route-map
      network route-map
      redistribute route-map
红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处
2.Cost Community特性的限制
  • Cost Community特性只能部署在一个AS或联邦AS(大AS)内部。她是一个扩展Community属性并且只能传递给iBGP邻居或联邦邻居(联邦iBGP或联邦eBGP邻居),不能传递给eBGP邻居(不会报错,就是单纯的不携带)。
  • 在部署Cost Community之前需确保AS或联邦内所有路由器都能识别她,并且要在AS或联邦内保证Cost Community配置的连续性,以防止潜在的环路问题。
  • Multiple cost community set clauses may be configured with the set extcommunity cost command in a single route map block or sequence. However, each set clause must be configured with a different ID value (0-255) for each point of insertion (POI). The ID value determines preference when all other attributes are equal. The lowest ID value is preferred. 
3.Cost Community如何影响BGP最佳路径选择
 
  • Cost Community事实上是提供给我们除了“BGP13条选路规则”之外的又一“插入点”( point of insertion),相当于提供给我们另一个操控路由优选的手柄。
  • 默认情况下,这个插入点在“BGP13条选路规则”的规则八之后,规则九之前,也就是在负载均衡规则的前面。当一个BGP路由器有多条路径可达同一个目的地,选路规则进程会决定哪条路径是best,这条best的路径最终被安装进路由表使用。Cost Community允许我们在此之前横刀进入,干预路由的优选。如果路由器在本地路由优选过程中不能识别cost community,那么就默默的忽略cost community。
  • POI一共有两个,一个在规则八之后,体现在配置上就是set extcommunity cost igp,这是CISCO IOS的默认POI,也就是如果前面这条命令不加igp关键字,则默认就是igp;另一个POI是在所有的13条选路规则之前,也就是比weight的优先级还要高,体现在配置上就是set extcommunity cost pre-bestpath。
  • 我们可以针对多条路径,在同一个POI设置不同的Cost Community。当这些路由进行PK时,cost value最低的优选,如果cost value相等,则优选拥有最小cost ID的路由。如果某条路由没有携带cost community,那么在cost community PK的这个环节,一个默认的cost value会被赋给这条路由, 这个值是2147483647,也就是cost community最大可选值4294967295的一半儿。
  • 默认情况下,在CISCO IOS中如果BGP路由器收到的某条路由携带了Cost Community,那么这玩意儿就开始工作了(开始在POI影响选路规则并进行路由间的PK),如果本路由器想完全忽略Cost Community,那么可以在BGP进程中配置bgp bestpath cost-community ignore,即可无视Cost Community。
  • 多条同一目的地的路径,可以针对特定的POI配置多个Cost
    在PK的时候,从最小的CostID比起,例如下面两条路由:
 
    我们可以理解为在Cost Community的比较时,以CostID为组别进行,上面大家都只携带了一个CostCommunity,那就从最小的CostID=1比起,路由1的Cost Value是10,大于路由2的9,因此路由2胜出。
 红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处

    上图就有所不同了,按照Cost ID来PK,先看Cost ID=1,路由1的值是10,而路由2没有定义CostID=1的value,因此系统给了一个默认值2147483647,这样一来当然是路由1优选了。所以这里绝不能简单的理解成:“先比cost value,再比cost ID”。要充分理解比较的方法。
 
    再来看一个例子加深理解,上图中两条路由来PK,首先最小的CostID=1,所以先从1比起,路由1的CostID=1对应的Cost Value=2147483647,其实就是默认值,而路由2没有配置costID=1的costValue,因此系统分配一个默认值,这样在costID=1这组的PK,两人打了个平手。接下去比CostID=3,路由1的CostID=3对应的Cost Value没有配置,因此分配一个默认值2147483647,而路由2配置的是10,明显10更小,所以最终路由2被优选。
红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处
4.实验(初始环境)
 
    先考虑一下上述拓扑中的初始环境,R1-R2,R2-R3之间建立iBGP邻居关系。
    R1及R3都向R2通告一条8.8.8.8/32的BGP路由(直连网段)。所有路由器上没有部署策略。
    那么在默认情况下,在R2上这两条关于8.8.8.8/32的BGP路径具备等价负载均衡的条件,我们此时并没有开启maximum-paths,R2最终会优选来自R1的路由,因为R1的BGP RouterID1.1.1.1小于R3的BGP RouterID 3.3.3.3,这是规则11的作用。
    现在开启maximum-paths ibgp 2,那么这两条路径都会被放入IP路由表执行等价负载均衡。但是BGP表中的best路由仍然是优选的R1传来的路由。这些内容我们都已经烂熟了,当做复习也罢。
5.实验(Cost Community基础)
 
    现在我们在R1及R3上部署route-map,使得各自的BGP路由更新如上图所示。
R1的配置如下:
route-map setComm permit 10
  set extcommunity cost 1 20    !!注意,这里extcommunity后不加POI关键字的话,默认为igp
router bgp 123
  network 8.8.8.8 mask 255.255.255.255 route-map setComm
  neighbor 2.2.2.2 send-community extended
R3的配置类似,不再赘述。
那么在R2#show ip bgp 8.8.8.8
BGP routing table entry for 8.8.8.8/32, version 10
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Multipath: iBGP
Flag: 0xA00
  Not advertised to any peer
  Local
    1.1.1.1 (metric 65) from 1.1.1.1 (1.1.1.1)
      Origin IGP, metric 0, localpref 100, valid, internal
      Extended Community: Cost:igp:1:20
  Local
    3.3.3.3 (metric 65) from 3.3.3.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, internal, best
      Extended Community: Cost:igp:1:10
    我们看到,由于R3传递过来的路由,Cost Community值为10,要比R1的20小,因此R2优选R3传来的路由。注意这里的插入点POI默认是igp,也就是在规则八之后、规则九之前。此刻由于在规则九(等价负载均衡规则)前R2就已经优选了R3传来的路由,因此再看看R2的IP路由表:
R2#show ip route bgp 
B       8.8.8.8 [200/0] via 3.3.3.3, 00:06:37
就只有来自R3的路由了(即使我们配置了maximum-paths ibgp 2,路由表也不会出现等价负载均衡的现象)。
这里如果完美主义症又犯了的话,可以将R2上、连接R3的接口ospf cost改大,这样R2到3.3.3.3的IGP metric就变大了,R2就又优选R1传来的8.8.8.8,这就充分证明了Cost Community的IGP POI的插入点的位置: 
 
最后再来一个测试,如果此刻在R2的BGP进程中增加如下配置:
bgp bestpath cost-community ignore
则完全就当Cost Community不存在了,“选路规则13条”翻身做主人,如果配置了maximum-path照样等价负载均衡无鸭梨。
红茶三杯(http://weibo.com/vinsoney/)原创文章,作者版权所有,转载请注明出处
6.实验(测试默认Cost Community值)
 
    实验环境变成了如上所示。R3不携带Cost Community。
    那么在R2上,实际上已经收到了来自R1的8.8.8.8路由更新且携带了Cost Community,那么这厮就不能当Cost Community不存在了,自然要进行Cost Community的比较,但是R3发来的8.8.8.8没有Cost Community啊,咋办,于是乎就给丫一个默认值:2147483647,虽然这个值在show ip bgp 8.8.8.8时看不到,但是确实起作用了。
    因此最终优选的来自R1的路由,这里我们可以进一步验证,就是把R1传来的路由Cost value改成2147483648,那么这个值比默认值大了1,于是,R2此刻又优选R3传来的路由了。
R2#sh ip b 8.8.8.8
BGP routing table entry for 8.8.8.8/32, version 15
Paths: (2 available, best #1, table Default-IP-Routing-Table)
Multipath: iBGP
Flag: 0xA00
  Not advertised to any peer
  Local
    3.3.3.3 (metric 65) from 3.3.3.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, internal, best  !!没有costCommu,给默认值
  Local
    1.1.1.1 (metric 65) from 1.1.1.1 (1.1.1.1)
      Origin IGP, metric 0, localpref 100, valid, internal
      Extended Community: Cost:igp:1:2147483648 (default+1)    !!比默认值大1
7.实验(Cost ID的PK)
 
环境又发生了一点变化,R1及R3传来的8.8.8.8,Cost Community的value相等。但是costID不同。
前面我们已经说过了,具体的比较方法。最终R2优选来自R3的路由。
再做一个测试,将R3传来的路由CostID改大,则又优选R1了:
 
实际上这里不能死记:“如果cost value相等,则cost ID小的优选”,而要理解个中原因,具体原因在上文中已经说明的非常清楚了。
8.实验(测试pre-bestpath的POI)
在R2上做配置,neighbor 1.1.1.1 weight 100及neighbor 3.3.3.3 weight 200。
毫无疑问13条选路规则中的规则一生效了,R2将优选R3传来的路由,因为它的weight值大。
现在我们要通过利用pre-bestpath这一插入点,来在weight之前控制路由优选。
R1的配置如下:
route-map setComm permit 10
set extcommunity cost pre-bestpath 1 10     !!注意一定要加pre-bestpath关键字
router bgp 123
  network 8.8.8.8 mask 255.255.255.255 route-map setComm
  neighbor 2.2.2.2 send-community extended
R3的配置类似,不再赘述。
这样一来,当R2收到这两条路由,就会在13条选路规则开始之前,先进行Cost Community的比较,最终R1传来的路由胜出,因此优选R1传来的8.8.8.8,如下图。
 
9.实验(cost community在联邦eBGP邻居之间的传递)
 
环境又改变了。R1、R2、R3属于一个联邦AS123,同时分别属于联邦成员AS64551、63552、64553,
三台路由器都使用Loopback口建立联邦eBGP邻居关系,地址分别是1.1.1.1、2.2.2.2、3.3.3.3,
现在R1及R3都向R2发布一条8.8.8.8/32的BGP路由。
那么在不做任何策略的情况下,R2最终将优选BGP routerID小的BGP邻居发来的路由,也就是优选R1发来的路由。
 
现在开始在R1及R3上做策略了,如上图所示。
则最终R2优选R3发来的路由。所以Cost Community在联邦eBGP peer之间传递没有问题。