实验原理:

 

        当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由。

首先要比较的属性是Preferred  Value,然后是Local  Preference,再次是路由生成方式,如果在比较了这几个属性之后还是无法确定出最优路由,则将进行

AS_Path属性的比较。

        AS_Path属性顺序地记录了某条BGP路由所经过的AS信息。BGP路由在向EBGP对等体通告路由时,会在该路由的AS_Path属性的最左端添加本地自治

系统的AS编号。BGP在比较了AS_Path属性后,会优先AS_Path长度最短的那条路由。如果AS_Path的长度相等,则BGP会对下一个属性Origin进行比较。

        另外,AS_Path还可以用来防止AS之间的路由环路。当路由器从EBGP邻居收到BGP路由时,如果该路由的AS_Path中包含了自己的AS编号,则该路由

将会被直接丢弃。

        类似于其他BGP路由属性,AS_Path属性也是可以被手动修改的。

 

实验目的:

  • 理解AS_Path属性的概念
  • 理解通过AS_Path属性进行选路的机制
  • 掌握修改AS_Path属性的方法

 

网络图:

BGP路径选择--AS_Path_链路

BGP路径选择--AS_Path_链路_02

 

BGP路径选择--AS_Path_路由表_03

 

 

 BGP路径选择--AS_Path_路由表_04

 

 BGP路径选择--AS_Path_链路_05

 

 BGP路径选择--AS_Path_路由表_06

 

 BGP路径选择--AS_Path_链路_07

 

 BGP路径选择--AS_Path_路由表_08

 

 可以看到,R1已经与R3和R5建立了EBGP邻居关系。

 

 

观察AS_Path属性对BGP选路的影响 

BGP路径选择--AS_Path_链路_09

 

 在R1上查看BGP路由表,观察10.0.1.1/32访问10.0.2.2/32的选路情况,可以看到,R1的BGP路由表中存在两条去往10.0.2.2/32的路由,下一跳分别为R5(10.0.15.5)

和R3(10.0.13.3),但是优先的是下一跳为R5的路由。这两条路由的PrefVal值均为0,LocPrf属性均为空,均不是本地生成的路由,但它们的AS_Path属性不同。观察

发现,下一跳为R5的路由的AS_Path属性为500 200,所以长度为2,而下一跳为R3的路由的AS_Path属性为300 400 200,所以长度为3,于是,R1最终选择了下一跳

为R5的路由,因为它的AS_Path长度较小。

 

在R1上使用tracert命令验证从10.0.1.1/32去往10.0.2.2/32的报文所经过的路径。

BGP路径选择--AS_Path_链路_10

 

 可以看到,10.0.1.1/32访问10.0.2.2/32时的确选用了经过R5、R6的路径。

 

在R2上查看BGP路由表:

BGP路径选择--AS_Path_路由表_11

 

 可以看到,R2去往10.0.1.1/32的路由也有两条,优选的是下一跳为R6(10.0.26.6)的路由,其原因也量力而行为这条路由的AS_Path的长度短。

 

在R2上使用tracert,去往R1:

BGP路径选择--AS_Path_路由表_12

 

 可以看到,路径选择了R6、R5的路径。

 

4、修改AS_Path属性控制BGP选路

 

        现在,假定R5和R6的流量负担太重,希望用户网络10.0.1.1/32与10.0.2.2/32之间的通信优先选用经由R3和R4的路径。

        为了实现这个需求,最直接的做法是在R1上拒绝接收来自AS 500的关于10.0.2.2/32的路由信息,以及在R2上拒绝接收来自AS 500的关于10.0.1.1/32的路由信息。但是,

如此一来,R1和R2的BGP路由表中将不再有经由AS 500去往对方的路由信息,当经由R3和R4之间的链路发生故障时,两个用户网络的通信就会中断。为此,可以采用修改

AS_Path的方法来更好地实现上述需求。

        使用Router-Policy对R1接收来自AS 500的关于10.0.2.2/32的路由信息中的AS_Path属性进行修改。

BGP路径选择--AS_Path_路由表_13

 

 配置完成后,在R1上查看BGP路由表:

BGP路径选择--AS_Path_路由表_14

 

         可以看到,现在R1优选了下一跳为10.0.13.3,即通过R3的路径,原因是现在经由R5的路由的AS_Path属性变为了500 500 500 200,长度为4.

 

        在R1上使用tracert命令验证从10.0.1.1/32去往10.0.2.2/32的报文所以过的路径:

BGP路径选择--AS_Path_链路_15

 

 可以看到,从10.0.1.1/32去往10.0.2.2/32的报文选用了经由R3、R4的路径。

 

在R2上使用tracert命令验证从10.0.2.2/32去往10.0.1.1/32的报文所经过的路径:

BGP路径选择--AS_Path_链路_16

 

 可以看到,从10.0.2.2/32去往10.0.1.1/32的报文依旧选用的是经由AS 500的路径。

       为了实现从10.0.2.2/32去往10.0.1.1/32的报文同样选用经由R4、R3的路径,可以在R2上修改来自AS 500的关于10.0.1.1/32的路由信息的AS_Path属性:

BGP路径选择--AS_Path_路由表_17

 

 注意,使用关键字overwrite,意味着将用300 500 500 100覆盖路由信息原有的AS_Path属性,所以系统弹出了警告。输入y选择继续。

        创建路由策略的后续索引节点允许未被匹配的路由能够正常被接收:

BGP路径选择--AS_Path_链路_18

 

 在R2的BGP视图下调用路由策略:

BGP路径选择--AS_Path_路由表_19

 

 配置完成后,在R2上观察BGP路由表:

BGP路径选择--AS_Path_路由表_20

 

 可以看到,现在R2去往10.0.1.1/32网络时,选用的是下一跳为10.0.24.4,即经由R4和R3的路径。经由R6的路由的AS_Path属性已被修改为300 500 500 100,长度为4。

注意,选用overwrite关键字,路由策略会使用配置的AS编号序列替换原有的AS_Path属性。

        在R1上使用tracert命令验证从10.0.1.1/32去往10.0.2.2/32的报文所经过的路径:

BGP路径选择--AS_Path_链路_21

 

 可以看到,从10.0.1.1/32去往10.0.2.2/32的报文选用了经由R3和R4的路径。

        在R2上使用tracert命令验证从10.0.2.2/32去往10.0.1.1/32的报文所经过的路径 :

BGP路径选择--AS_Path_链路_22

 

 可以看到,从10.0.2.2/32去往10.0.1.1/32的报文也选用的是经由R4和R3的路径。

        至此,在10.0.1.1/32与10.0.2.2/32之间进行通信时,往返路径均经过了R3和R4,实现了所需的路径控制,同时也实现了路径的冗余备份。