测试环境拓扑图
每一种规则测试完后记得恢复初始状态!!
各设备BGP Router_ID为loopback 0的地址。
AR1 配置
[V200R003C00]
#
sysname AR1
#
interface GigabitEthernet0/0/0
ip address 10.1.12.1 255.255.255.0
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
interface LoopBack66
ip address 66.66.66.66 255.255.255.255
#
bgp 100
router-id 1.1.1.1
peer 10.1.12.2 as-number 200
#
ipv4-family unicast
undo synchronization
peer 10.1.12.2 enable
#
AR2 配置
[V200R003C00]
#
sysname AR2
#
interface GigabitEthernet0/0/0
ip address 10.1.12.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.1.23.2 255.255.255.0
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
bgp 200
router-id 2.2.2.2
peer 3.3.3.3 as-number 200
peer 3.3.3.3 connect-interface LoopBack0
peer 10.1.12.1 as-number 100
#
ipv4-family unicast
undo synchronization
peer 3.3.3.3 enable
peer 3.3.3.3 next-hop-local
peer 10.1.12.1 enable
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 10.1.23.2 0.0.0.0
#
return
AR3 配置
[V200R003C00]
#
sysname AR3
#
interface GigabitEthernet0/0/0
ip address 10.1.23.3 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.1.34.3 255.255.255.0
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
bgp 200
router-id 3.3.3.3
peer 2.2.2.2 as-number 200
peer 2.2.2.2 connect-interface LoopBack0
peer 4.4.4.4 as-number 200
peer 4.4.4.4 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
peer 2.2.2.2 enable
peer 4.4.4.4 enable
#
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 3.3.3.3 0.0.0.0
network 10.1.23.3 0.0.0.0
network 10.1.34.3 0.0.0.0
#
AR4 配置
[V200R003C00]
#
sysname AR4
#
interface GigabitEthernet0/0/0
ip address 10.1.45.4 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.1.34.4 255.255.255.0
#
interface LoopBack0
ip address 4.4.4.4 255.255.255.255
#
bgp 200
router-id 4.4.4.4
peer 3.3.3.3 as-number 200
peer 3.3.3.3 connect-interface LoopBack0
peer 10.1.45.5 as-number 300
#
ipv4-family unicast
undo synchronization
peer 3.3.3.3 enable
peer 3.3.3.3 next-hop-local
peer 10.1.45.5 enable
#
ospf 1 router-id 4.4.4.4
area 0.0.0.0
network 4.4.4.4 0.0.0.0
network 10.1.34.4 0.0.0.0
#
AR5 配置
[V200R003C00]
#
sysname AR5
#
interface GigabitEthernet0/0/0
ip address 10.1.45.5 255.255.255.0
#
interface LoopBack0
ip address 5.5.5.5 255.255.255.255
#
interface LoopBack66
ip address 66.66.66.66 255.255.255.255
#
bgp 300
router-id 5.5.5.5
peer 10.1.45.4 as-number 200
#
ipv4-family unicast
undo synchronization
peer 10.1.45.4 enable
#
丢弃下一跳不可达的路由
测试方法:
1、将AR1和AR5上的loopback66接口地址宣告到BGP中。
2、预先已经在AR2和AR4上向AR3配置了peer 3.3.3.3 next-hop-local,所以AR3上会有两条去往66.66.66.66/32的路由。
可以看到,在默认情况下,BGP所有选路规则中前10条都无法比较出,直至匹配了Router_ID小的路由,所以选择了对等体2.2.2.2的路由,
而将4.4.4.4的路由标记为有效,但不是最优。
可以通过display bgp routing-table 66.66.66.66 32查看具体原因:(不是首选的Router_ID)
3、将AR2上的next-hop-local配置undo,再次观察AR3的路由表情况。
[AR2-bgp]undo peer 3.3.3.3 next-hop-local
配置上述命令后可能需要等待更新周期才能看到路有变化,可使用下列命令进行刷新:
refresh bgp internal export|import 或者 refresh bgp external export|import
可以看到,原来优选了对等体2.2.2.2的路由现在下一跳地址变为了10.1.12.1,因为路由器会将从EBGP学习到的路由信息原封不动的发送给其他对等体,而peer 3.3.3.3 next-hop-local这条命令就是告诉其他对等体,我发给你们的路由,下一跳来找我。所以对于AR3来说10.1.12.1是不可达的,所以将该条路由标记为无效也不是最优的路由。从而选择了对等体4.4.4.4发来的。
1 优选Preferred-Value值最大的路由
恢复拓扑初始状态,查看AR3的BGP路由表信息:
测试方法:
1、在AR3上将来自对等体4.4.4.4的路由信息的PrefVal属性值调大。
[AR3-bgp]peer 4.4.4.4 route-policy PrefVal import
Route-policy : PrefVal
permit : 10 (matched counts: 2)
Apply clauses :
apply preferred-value 100 #该路由策略的意思是直接将来自4.4.4.4对等体的所有路由的preferred-value属性值都标记为100
查看AR3的BGP 路由表信息。
可以看到,来自对等体4.4.4.4的路由的PrefVal属性值被标记为100,且被选为最优路由。
查看具体原因:
针对来自对等体2.2.2.2的路由,显示:PreVal不是最优的。
2 优选Local-Preference属性值最大的路由
先恢复初始配置。
AR3的初始BGP路由信息:
可以看到,初始的LocPrf属性值默认为100。
测试方法:
1、在AR3上对来自对等体4.4.4.4的路由,将其LocPrf调整为101。
[AR3-bgp]peer 4.4.4.4 route-policy LocPrf import
#
route-policy LocPrf permit node 10
apply local-preference 101
#
观察AR3的BGP路由表信息:
可以看到,对等体4.4.4.4的路由的LocPrf属性值被标记为101,并成为最优路由。
查看具体原因:
针对对等体2.2.2.2的路由,显示不是最优的Local_Pref。
3 本地始发路由优于从对等体学习到的路由
本地始发具体规则为:
手动聚合>自动聚会>Network>import>从对等体学习到的路由
为了验证上述选路规则,本实验将从后往前匹配条件进行验证。
在初始情况下,AR3上的BGP路由表信息如下:
可以从NextHop信息看到,去往66.66.66.66/32的路由是来自不同对等体的
1、在AR3的lo66接口上配置该地址,并引入BGP中,查看AR3的BGP路由表信息。(测试import>从对等体学习到的)
相关命令如下:
import-route direct route-policy 66
Route-policy : 66
permit : 10 (matched counts: 10)
Match clauses :
if-match ip-prefix 66
Apply clauses :
apply as-path 200 additive #确保AR3本地引入的相关属性与其他路与相同
apply local-preference 100 #同上
Prefix-list 66
Permitted 8
Denied 0
index: 10 permit 66.66.66.66/32
确保之前的属性值(PreVal、LocPrf)相同的情况下:
此时可以看到,BGP路由表中对于66.66.66.66/32条目而言,选择了自身引入的路由为最优。
查看具体路由信息:
2、测试Network>import>从对等体学习到的路由
将AR3上配置的loopback66接口地址66.66.66.66/32使用Network宣告到BGP中。
可以看到两条来自本地的66.66.66.66/32的路由,查看具体路由信息:
可以看到,最优选择了Network方式发布的路由。
3、测试自动聚合优于Network
为了测试更为直观,现在改为使用88.0.0.0/8 的路由条目作为测试,AR2、AR4上配置一条静态路由ip route-static 88.0.0.0 8 NULL 0,并引入BGP中。
在AR3BGP中宣告一条88.0.0.0 8的路由,同时配置两条静态路由:
ip route-static 88.0.0.0 255.0.0.0 NULL0
ip route-static 88.128.0.0 255.128.0.0 NULL0
观察AR3BGP路由表信息:
启用自动聚合功能:
[AR3-bgp]summary automatic
此时静态路88.128.0.0/9聚合后会被抑制,变为无效路由,查看具体路由信息:
可以看到,最终选了自动聚合的路由,而Network不是最优的路由类型。
4、测试手动聚合优于自动聚合
保持前面配置不变,在AR3的BGP视图中执行以下命令:
[AR3-bgp]aggregate 88.0.0.0 8 detail-suppressed
观察AR3的BGP路由表信息:
可以看到,此时又多了一条下一跳为127.0.0.1的88.0.0.0的路由。
查看具体的路由选择信息:
可以看到,优选了手动聚合路由。
4 优选AS_Path最短的路由
恢复初始配置,查看AR3 BGP 路由表:
测试方法:
对来自对等体2.2.2.2的路由,为其添加一个Path属性值100,使其成为次优路由:
[AR3-bgp]peer 2.2.2.2 route-policy 66 import
Route-policy : 66
permit : 10 (matched counts: 16)
Match clauses :
if-match ip-prefix 66
Apply clauses :
apply as-path 100 additive
查看AR3路由表信息:
5 优选Origin属性最优的路由
恢复拓扑初始化配置,查看当前AR3的BGP路由表信息:
如上图所示,由于在 AR1、AR5上使用的是Network方式宣告的66.66.66.66/32的路由对应的Origin属性为i。
- Origin属性相应关联:
i - IGP —> Network
e - EGP—> 该方式可以通过route-policy修改测试
? - incomplete—> import
测试方法:
1 将来自对等体2.2.2.2的路由使用路由策略将其Origin属性改为EGP。
[AR3-bgp]peer 2.2.2.2 route-policy 66 import
#
route-policy 66 permit node 10
apply origin egp 100
#
可以看到,此时对等体2.2.2.2的路由Origin属性改为了e,且变为了次优
2 保持前面的配置,在AR5上将原来的Network方式改为import方式引入BGP。
如上图所示,此时来自对等体4.4.4.4的路由Origin属性标记为了 ?,且成为了次优路径。
6 优选MED属性值最小的路由
恢复拓扑初始配置,查看AR3的BGP路由表信息。
测试方法:
将来自对等体2.2.2.2的路由的MED属性值改为1:
[AR3-bgp]peer 2.2.2.2 route-policy 66 import
#
route-policy 66 permit node 10
apply cost 1
#
[AR3-bgp]compare-different-as-med #允许比较来自不同AS的路由的MED属性(默认情况下BGP只会对来自同一AS的路由进行MED属性值的比较)
7 优选从EBGP学习到的路由
恢复初始配置,查看AR2的路由表信息:
测试方法:
在AR3上也宣告一条66.66.66.66/32的路由到BGP中,使得AR2可以从3.3.3.3通过IBGP学习到该路由。
并且要保证其他属性条件相同。
[AR3-bgp]network 66.66.66.66 32 route-policy 66
Route-policy : 66
permit : 10 (matched counts: 5)
Apply clauses :
apply as-path 200 additive
8 优选到Next-hop的IGP度量值最小的路由
恢复初始配置,查看AR3初始BGP路由信息:
可以看到,当前到两个对等体的IGP开销都为1。
测试方法:
因为AR2、AR3、AR4之间使用的是OSPF作为IGP
将AR3与AR2连接的接口的OSPF的开销值改为10。
[AR3-GigabitEthernet0/0/0]ospf cost 10
如上图所示,AR3到达对等体2.2.2.2的IGP开销改为10后,变为了次优路由,提示:不是最优的IGP开销。
扩展-BGP路由负载分担
扩展:
当在前面的8条BGP路由匹配规则都无法比较出最优路由时,可以为该BGP路由设置负载分担,而BGP默认只对AS_Path完全相同的路由进行负载分担。
可以使用:load-balancing as-path-ignore忽略AS_Path的不一致。
另外,在配置负载分担前,BGP自身虽然有多条次优路由,但设备只会选择最优的那条路由放进RIB和FIB中,如下图所示:
在公网中到达同一目的地的路由形成负载分担时,系统会首先判断最优路由的类型。
若最优路由为IBGP路由则只是IBGP路由参与负载分担,若最优路由为EBGP路由则只是EBGP路由参与负载分担,即公网中到达同一目的地的IBGP和EBGP路由不能形成负载分担。
[AR3-bgp]maximum load-balancing ibgp ? #针对路由的IBGP或EBGP配置负载分担的数量
INTEGER<1-8> Specify maximum equal cost routes
[AR3-bgp]load-balancing as-path-ignore #忽略AS_Path的不一致的路由的负载分担
9 优选Cluster_List最短的路由
恢复拓扑初始配置。
测试方法,拓扑做以下修改:
1、取消在AR1上宣告路由,只在AR5上宣告。
2、配置AR3为RR,AR4为AR3的客户端。
3、AR2与AR4之间配置基于回环接口的IBGP关系。
经过上面的修改后,在AR2上会收到AR4的BGP路由,和AR3反射过来的BGP路由66.66.66.66/32。
默认情况下,前面8条规则无法比较出最优路由,此时需要根据Cluster_List进行比较。
如上图所示,设备最终选择了来自对等体4.4.4.4的IBGP路由为最优,而对于来自对等体3.3.3.3的路由,以为来自对等体3.3.3.3的Cluster_List不为空。
在BGP(Border Gateway Protocol)中,Cluster_List(集群列表)是一种用于避免循环的路由属性。它用于解决以下情况:当一个路由反射器(Route Reflector)将一个路由反射给其他反射器时,可能会导致路由循环。
在BGP网络中,路由反射器用于简化路由器之间的BGP对等体关系。它们接收来自客户端路由器的路由信息,并将其反射给其他客户端路由器。当一个路由反射器将一条路由发送给其他反射器时,可能会遇到问题,因为路由信息可能会在不同的反射器之间循环传播。
为了解决这个问题,BGP引入了Cluster_List属性。当一个路由反射器接收到一条路由信息时,它会检查该路由的Cluster_List属性。Cluster_List是一个有序的集群标识符列表,用于跟踪路由信息的传播路径。
在BGP中,路由器使用Cluster_List属性来比较和处理路由信息。具体比较的方式如下:
-
当一个路由反射器收到一条路由信息时,它首先检查Cluster_List属性是否为空。如果为空,表示该路由是首次被反射,可以继续处理。
-
如果Cluster_List属性不为空,则路由反射器会检查列表中的集群标识符是否包含自己的集群标识符。如果集群标识符列表中包含自己的标识符,表示该路由已经经过当前的路由反射器处理过了,不再转发给其他反射器,从而避免了循环。
-
如果集群标识符列表中不包含自己的标识符,则路由反射器会将自己的集群标识符添加到Cluster_List属性的末尾,并将该更新后的路由信息发送给其他客户端路由器和反射器。
-
在转发路由信息时,路由反射器还需要更新AS_Path属性,以便其他路由器能够正确地了解路由信息的路径。通常,反射器会将自己的AS号添加到AS_Path属性中。
10 优选Router_ID最小的路由
恢复初始配置,观察AR3的BGP初始路由信息。
如果前面9条规则都匹配不上,默认会比较到Router_ID的大小,所以选择了Router_ID较小的2.2.2.2的路由。
但是,在比较该条规则下,还有一个潜在的规则:如果路由中携带有Originator_ID,则先比较Originator_ID,再比较Router_ID,同样,具有最小的Originator_ID值的路由为最优。
测试Originator_ID属性:
在第9条规则的测试图中,在Cluster_ID的上一行可以看到一条Originator_ID记录:
测试方法:
1、保持AS200中的配置不变,将AR1和AR5改到AS200下,IGP使用OSPF,并宣告各自的loopback0地址和接口地址段。
2、AR1与AR2设置为IBGP;AR4与AR5设置为IBGP。
2、将AR2设置为RR,AR1为AR2的客户端;
3、将AR4设置为RR,AR5为AR2的客户端;
经过上述的变更后,AR3上会学习到来自反射器AR2和AR4的路由,但是优选了来自对等体2.2.2.2的路由,因为其Originator_ID属性值较小,但此时好像也很难辨别究竟是不是Originator_ID选举规则生效。
上图中:
From:X.X.X.X (Y.Y.Y.Y) 不都是Router_ID的值,X是建立对等体时使用的地址,Y是对等体的Router_ID。
Original nexthop: 是该路由的下一条地址,因为在AR1、AR5上配置了peer X.X.X.X next-hop-local,所以显示的是该路由下一跳的回环接口地址(基于回环接口建立的IBGP)。
Originator_ID 其实就是对应对等体的Router_ID,当经过RR后会携带有Originator_ID属性,该属性映射到Router_ID。
在AR1的BGP视图下取消配置BGP的Router_ID,再次查看AR3的BGP路由表信息:
可以看到,此时来自反射器AR4的路由变为最优,因为Originator_ID属性值比来自反射器AR2的值小,提示信息依旧是显示不是最优的Router_ID值。
将AR5的BGP Router_ID也取消,再次查看AR3的BGP路由表信息:
如上图所示,因为Originator属性小,从而选择了来自反射器2.2.2.2的路由为最优,提示信息仍旧是:不是最优的Router_ID。
由此可见,其实Originator_ID相当于就是Router_ID,在携带该属性时,要优于Router_ID先比较。
11 优选具有最小IP地址的对等体通告的路由
更改拓扑信息:
在AR5上宣告66.66.66.66/32 都处于同一AS200,AR5和AR2设置为IBGP,AR5和AR4设置为IBGP。
将AR2和AR4设置为RR,且AR5分别是他们的客户端。
经过上述的变更后,AR3上会有两条路由,且前面10条选路规则也无法比较出最优路由,此时会选择具有较小IP地址的对等体(2.2.2.2)的路由:
10.1.23.2 < 10.1.34.4