天天看點

BGP路徑選擇--AS_Path

實驗原理:

        當一台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
BGP路徑選擇--AS_Path
BGP路徑選擇--AS_Path
BGP路徑選擇--AS_Path
BGP路徑選擇--AS_Path
BGP路徑選擇--AS_Path
BGP路徑選擇--AS_Path

 可以看到,R1已經與R3和R5建立了EBGP鄰居關系。

觀察AS_Path屬性對BGP選路的影響 

BGP路徑選擇--AS_Path

 在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.0.1.1/32通路10.0.2.2/32時的确選用了經過R5、R6的路徑。

在R2上檢視BGP路由表:

BGP路徑選擇--AS_Path

 可以看到,R2去往10.0.1.1/32的路由也有兩條,優選的是下一跳為R6(10.0.26.6)的路由,其原因也量力而行為這條路由的AS_Path的長度短。

在R2上使用tracert,去往R1:

BGP路徑選擇--AS_Path

 可以看到,路徑選擇了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

 配置完成後,在R1上檢視BGP路由表:

BGP路徑選擇--AS_Path

         可以看到,現在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

 可以看到,從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

 可以看到,從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

 注意,使用關鍵字overwrite,意味着将用300 500 500 100覆寫路由資訊原有的AS_Path屬性,是以系統彈出了警告。輸入y選擇繼續。

        建立路由政策的後續索引節點允許未被比對的路由能夠正常被接收:

BGP路徑選擇--AS_Path

 在R2的BGP視圖下調用路由政策:

BGP路徑選擇--AS_Path

 配置完成後,在R2上觀察BGP路由表:

BGP路徑選擇--AS_Path

 可以看到,現在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

 可以看到,從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

 可以看到,從10.0.2.2/32去往10.0.1.1/32的封包也選用的是經由R4和R3的路徑。