1. 程式人生 > 其它 >交換機在江湖】路由策略專題-第6期-BGP路由策略(下)

交換機在江湖】路由策略專題-第6期-BGP路由策略(下)

交換機在江湖】路由策略專題-第6期-BGP路由策略(下)

交換機在江湖官方號2016-12-1 09:34:32最新回覆:2020-02-17 01:49:10 1.1W19128

第6期BGP路由策略(下)

前面我們介紹的路由策略基本都是基於路由字首的,但是我們知道BGP的“用武之地”主要是一些大型骨幹網路,在這種網路中一般路由字首的規模會非常大,如果繼續基於路由字首執行路由策略,那麼工作量將會大的不可想象。能否跳出路由字首的“怪圈”,換一種角度去“抓取”感興趣的路由呢?對於BGP路由協議來說是可以實現的,本期我們主要介紹一下AS_Path過濾器和團體屬性過濾器在BGP路由策略中的使用方法。

1AS_Path_Filter在BGP中的應用

1.1AS_Path_Filter及正則表示式

AS_Path過濾器(AS_Path_Filter

AS_Path屬性按向量順序記錄了某條路由從本地到目的地址所要經過的所有AS編號。如圖1所示,某條BGP路由的AS_Path屬性實際上可以看作是一個包含空格的字串,所以可以通過正則表示式來進行匹配。

圖1 BGP路由的AS_Path屬性

正則表示式就是用一個“字串”來描述一個特徵,然後去驗證另一個“字串”是否符合這個特徵。BGP的AS_Path過濾器主要是定義AS_Path正則表示式,然後去匹配BGP路由的AS_Path屬性資訊,從而實現對BGP路由資訊的過濾。

例如ip as-path-filter 1 permit 495就定義了一個AS_Path過濾器1,使用的正則表示式是495,這個表示式的含義是匹配任何包含495的字串。

這麼來看,AS_Path過濾器的核心內容就是正則表示式。關於正則表示式的內容較為複雜,我們這裡僅討論一些跟AS_Path過濾器相關的內容。

AS_Path正則表示式的組成

AS_Path過濾器使用正則表示式來定義匹配規則。正則表示式由元字元和數值兩部分組成:

l元字元定義了匹配的規則。

l數值定義了匹配的物件。

BGP AS_Path正則表示式支援的元字元如表1所示。

元字元

含義

例項

.

匹配除“\n”之外任何單個字元,包括空格。

.*表示匹配任意字串,即AS_Path為任意,可以用來匹配所有路由。通常定義了多個deny模式的ip as-path-filter子句之後,會定義一個ip as-path-filter as-path-filter-name permit .*子句,用於允許其他路由通過。

*

之前的字元在目標物件中出現0次或連續多次。

參考上例。

+

之前的字元在目標物件中出現1次或連續多次。

65+表示6在AS_Path的首位,而5在AS_Path中出現一次或多次,那麼:

l如下字串都符合這個特徵:65,655,6559,65259,65529等。

l如下字串不符合這個特徵:56,556,5669,55269,56259等。

|

豎線左邊和右邊的字元為“或”的關係。

100|65002|65003表示匹配100、65002或65003。

^

之後的字串必須出現在目標物件的開始。

^65表示匹配以65開頭的字串,那麼:

l如下字串都符合這個特徵:65,651,6501,65001等。

l如下字串不符合這個特徵:165,1650,6650,60065等。

$

之前的字串必須出現在目標物件的結束。

65$表示匹配以65結尾的字串,那麼:

l如下字串都符合這個特徵:65,165,1065,10065,60065等。

l如下字串不符合這個特徵:651,1650,6650,60650,65001等。

^$表示匹配空字串,即AS_Path為空,通常用來匹配本地始發路由。

(xyz)

一對圓括號內的正則表示式作為一個子正則表示式,匹配子表示式並獲取這一匹配。圓括號內也可以為空。

100(200)+可以匹配100200、100200200、……

[xyz]

匹配方括號內列出的任意字元。

[896]表示匹配含有8、9或6中任意一個字元。

[^xyz]

匹配除了方括號內列出的字元外的任意字元(^號在字元前)。

[^896]表示匹配含有8、9或6這幾個字元之外的任意一個字元。

[a-z]

匹配指定範圍內的任意字元。

[2-4]表示匹配2,3,4;[0-9]表示匹配數字0~9。

[^a-z]

匹配不在指定範圍內的任意字元。

[^2-4]表示匹配除2,3,4外的其他字元;[^0-9]表示匹配除數字0~9外的其他字元。

_

匹配一個符號,包括逗號、左大括號、右大括號、左括號、右括號和空格,在表示式的開頭或結尾時還可作起始符、結束符(同^,$)。

l^65001_表示匹配字串的開始為65001,字串的後面為符號,也即AS_Path最左邊AS(最後一個AS)為65001,可以用來匹配AS 65001鄰居傳送的路由,

l_65001_表示匹配字串裡有65001,即AS_Path中有65001,可以用來匹配經過AS 65001的路由。

l_65001$表示匹配字串的最後為65001,字串前面是符號,即AS_Path最右邊AS(起始AS)為65001,可以用來匹配AS 65001始發的路由。

\

轉義字元。

用來將緊跟其後的元字元轉變為普通字元

表1 AS_Path正則表示式支援的元字元

1.2AS_Path_Filter的應用方式

AS_Path過濾器只定義一個過濾工具,需要在某個地方呼叫這個過濾工具才會最終生效。在BGP中可以有兩種方式呼叫AS_Path過濾器:1、通過peer命令直接呼叫as-path-filter,2、通過route-policy呼叫AS_Path_Filter。

應用方式一:通過peer命令直接呼叫as-path-filter

#

ip as-path-filter s1 permit ^100$

#

bgp 65100

peer 10.1.1.2 as-path-filter s1 import

#

在應用方式1中,我們定義了一個AS_Path_Filter並關聯了一個正則表示式^100$,這個AS_Path_Filter可以匹配AS_PATH嚴格為100的路由(不包含任何其他的AS號或其他數字),隨後我們將AS_Path_Filter應用在了peer命令上,這樣一來,只有被AS_Path_Filter 1所匹配的路由,才會被傳遞給BGP鄰居10.1.1.2。

應用方式二:通過route-policy呼叫as-path-filter

#

ip as-path-filter s1 permit ^100$

#

route-policy huawei permit node 10

if-match as-path-filter s1

apply local-preference 100

#

bgp 65100

peer 10.1.1.2 route-policy huawei import

#

在應用方式2中,我們在route-policy中的if-match命令呼叫定義好的AS_Path_Filter,隨後使用apply命令設定LP路徑屬性值,並在BGP配置模式下應用在了peer命令上(import方向)。這樣,該交換機在收到BGP鄰居10.1.1.2所傳送過來的BGP路由中,所有被AS_Path_Filter匹配的路由均將LP路徑屬性值設定為100。

1.3AS_Path_Filter的使用舉例

上面介紹完了AS_Path_Filter的匹配規則和應用方式,接下來我們通過一個示例來具體看一下在BGP中如何使用AS_Path_Filter進行路由過濾。

如圖2所示,LSW1與LSW2之間,LSW1與LSW3之間,LSW2與LSW3之間,LSW2與LSW4之間,LSW3與LSW4之間,LSW4與LSW5之間都建立EBGP鄰居。各個裝置把LoopBack0介面的IP地址通過network命令釋出到BGP中,用作測試路由網段。

圖2使用AS_Path_Filter對BGP路由進行過濾

當沒有使用AS_Path過濾器時,LSW1的原始BGP路由表如下。

[LSW1] display bgp routing-table

BGP Local router ID is 10.1.1.1

Status codes: * - valid, > - best, d - damped,

h - history, i - internal, s - suppressed, S - Stale

Origin : i - IGP, e - EGP, ? - incomplete

Total Number of Routes: 9

Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.9/32 0.0.0.0 0 0 i

*> 2.2.2.9/32 10.1.1.2 0 0 65200i

* 10.1.2.2 0 65300 65200i

*> 3.3.3.9/32 10.1.2.2 0 0 65300i

* 10.1.1.2 0 65200 65300i

*> 4.4.4.9/32 10.1.1.2 0 65200 65400i

* 10.1.2.2 0 65300 65400i

*> 5.5.5.9/32 10.1.1.2 0 65200 65400 65500i

* 10.1.2.2 0 65300 65400 65500i

Case1定義一個AS_Path過濾器s1,只接收AS 65500始發的路由。

[LSW1] ip as-path-filter s1 permit _65500$ //定義一個AS_Path過濾器s1

[LSW1] bgp 65100

[LSW1-bgp] ipv4-family unicast

[LSW1-bgp-af-ipv4] peer 10.1.1.2 as-path-filter s1 import //通過peer命令呼叫

[LSW1-bgp-af-ipv4] peer 10.1.2.2 as-path-filter s1 import

配置完成後BGP路由表如下:

[LSW1] display bgp routing-table

BGP Local router ID is 10.1.1.1

Status codes: * - valid, > - best, d - damped,

h - history, i - internal, s - suppressed, S - Stale

Origin : i - IGP, e - EGP, ? - incomplete

Total Number of Routes: 3

Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.9/32 0.0.0.0 0 0 i

*> 5.5.5.9/32 10.1.1.2 0 65200 65400 65500i

* 10.1.2.2 0 65300 65400 65500i

從以上顯示資訊可以看出,AS 65500始發的路由被允許,其他路由被拒絕。

Case2定義一個AS_Path過濾器s2,拒絕AS 65500始發的路由,允許接收其他路由。

[LSW1] ip as-path-filter s2 deny _65500$

[LSW1] ip as-path-filter s2 permit .*

[LSW1] bgp 65100

[LSW1-bgp] ipv4-family unicast

[LSW1-bgp-af-ipv4] peer 10.1.1.2 as-path-filter s2 import

[LSW1-bgp-af-ipv4] peer 10.1.2.2 as-path-filter s2 impor

配置完成後BGP路由表如下:

[LSW1]display bgp routing-table

BGP Local router ID is 10.1.1.1

Status codes: * - valid, > - best, d - damped,

h - history, i - internal, s - suppressed, S - Stale

Origin : i - IGP, e - EGP, ? - incomplete

Total Number of Routes: 7

Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.9/32 0.0.0.0 0 0 i

*> 2.2.2.9/32 10.1.1.2 0 0 65200i

* 10.1.2.2 0 65300 65200i

*> 3.3.3.9/32 10.1.2.2 0 0 65300i

* 10.1.1.2 0 65200 65300i

*> 4.4.4.9/32 10.1.1.2 0 65200 65400i

* 10.1.2.2 0 65300 65400i

從以上顯示資訊可以看出,AS 65500始發的路由被拒絕,其他路由被允許。

Case3定義一個AS_Path過濾器s3,拒絕經過AS 65400的路由

[LSW1] ip as-path-filter s3 deny _65400_

[LSW1] ip as-path-filter s3 permit .*

[LSW1] bgp 65100

[LSW1-bgp] ipv4-family unicast

[LSW1-bgp-af-ipv4] peer 10.1.1.2 as-path-filter s3 import

[LSW1-bgp-af-ipv4] peer 10.1.2.2 as-path-filter s3 import

配置完成後BGP路由表如下:

[LSW1] display bgp routing-table

BGP Local router ID is 10.1.1.1

Status codes: * - valid, > - best, d - damped,

h - history, i - internal, s - suppressed, S - Stale

Origin : i - IGP, e - EGP, ? - incomplete

Total Number of Routes: 5

Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.9/32 0.0.0.0 0 0 i

*> 2.2.2.9/32 10.1.1.2 0 0 65200i

* 10.1.2.2 0 65300 65200i

*> 3.3.3.9/32 10.1.2.2 0 0 65300i

* 10.1.1.2 0 65200 65300i

從以上顯示資訊可以看出,經過AS 65400的路由被拒絕,其他路由被允許。

Case4定義一個AS_Path過濾器s4,拒絕經過AS 65400的路由,其中AS 65400既不是路由的始發AS,也不是路由經過的最後一個AS。

[LSW1] ip as-path-filter s4 deny ._65400_.

[LSW1] ip as-path-filter s4 permit .*

[LSW1] bgp 65100

[LSW1-bgp] ipv4-family unicast

[LSW1-bgp-af-ipv4] peer 10.1.1.2 as-path-filter s4 import

[LSW1-bgp-af-ipv4] peer 10.1.2.2 as-path-filter s4 import

配置完成後BGP路由表如下:

[LSW1] display bgp routing-table

BGP Local router ID is 10.1.1.1

Status codes: * - valid, > - best, d - damped,

h - history, i - internal, s - suppressed, S - Stale

Origin : i - IGP, e - EGP, ? - incomplete

Total Number of Routes: 7

Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.9/32 0.0.0.0 0 0 i

*> 2.2.2.9/32 10.1.1.2 0 0 65200i

* 10.1.2.2 0 65300 65200i

*> 3.3.3.9/32 10.1.2.2 0 0 65300i

* 10.1.1.2 0 65200 65300i

*> 4.4.4.9/32 10.1.1.2 0 65200 65400i

* 10.1.2.2 0 65300 65400i

從以上顯示資訊可以看出,只有AS_Path的中間AS是65400的路由被拒絕,其他路由被允許。

Case5定義一個AS_Path過濾器s5,匹配本地始發路由,不接收其他AS的任何路由。

[LSW1] ip as-path-filter s5 permit ^$

[LSW1] bgp 65100

[LSW1-bgp] ipv4-family unicast

[LSW1-bgp-af-ipv4] peer 10.1.1.2 as-path-filter s5 import

[LSW1-bgp-af-ipv4] peer 10.1.2.2 as-path-filter s5 import

配置完成後BGP路由表如下:

[LSW1] display bgp routing-table

BGP Local router ID is 10.1.1.1

Status codes: * - valid, > - best, d - damped,

h - history, i - internal, s - suppressed, S - Stale

Origin : i - IGP, e - EGP, ? - incomplete

Total Number of Routes: 1

Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.9/32 0.0.0.0 0 0 i

從以上顯示資訊可以看出,只有AS_Path為空的本地始發路由被允許,其他路由被拒絕。

2Community屬性在BGP中的應用

2.1Community屬性介紹

Community屬性的作用

在討論Community屬性之前,我們先說一點題外話。相信大家在外出旅遊的時候有時候會發現,某個旅行團的遊客通常會統一帶一個“小紅帽”,上面寫著某某團隊,這樣導遊就很方便的對這個團隊進行引導和管理,比如要上車了,導遊只需要喊一嗓子:“某某團隊的,上車了”,而不需要逐個喊每個遊客的名字。這就相當於為這一類遊客打上一個相同的標籤(團體屬性),後續的引導和管理就統一用這個標籤進行,大大提高了效率和安全性。

其實在BGP路由裡面,也有一個類似“小紅帽”的屬性。就是Community屬性,即團體屬性。

lCommunity屬性是一組4個位元組的數值,RFC1997規定前兩個位元組表示AS號,後兩個位元組表示基於管理目的設定的標示符,格式為AA:NN。

lCommunity屬性是一種BGP路由標記,用於簡化路由策略的執行。可以將某些路由分配一個特定的Community屬性值,之後就可以基於Community值而不是每條路由來抓取路由並執行相應的策略了。

圖3 Community屬性的應用場景

在圖3中,AS100內有大量的路由被引入BGP,這些路由分別用於語音通話和視訊監控兩種業務。路由通過BGP通告給AS200。現在AS200的裝置基於某種需求,需要分別對語音通話和視訊監控的路由執行不同的策略,那麼怎麼匹配這些路由呢?可以用ACL或者ip-prefix逐條匹配路由,但是由於路由字首非常多,這樣工作量太大,效率低下。

可以使用Community屬性來解決這個問題。在AS100引入這些路由的時候,就分別打上相應的Community值用來區分語音通話的路由和視訊監控的路由,凡是語音通話的路由,就打上標記100:1,凡是視訊監控的路由就打上標記100:2,那麼這些屬性值隨著路由傳遞給了AS200,在AS200上需要分別對語音通話和視訊監控的路由做策略的時候,只需要抓取相應Community值即可。例如抓取100:1的community值也就抓取了所有語音業務的路由。

BGP公認的團體屬性

BGP定義了一些公認的團體屬性,這些團體屬性可以直接使用,常見的如表2所示:

團體屬性名稱

說明

internet

預設情況下,所有的路由都屬於Internet團體。具有此屬性的路由可以被通告給所有的BGP對等體。

no-advertise

具有此屬性的路由在收到後,不能被通告給任何其他的BGP對等體。

no-export

具有此屬性的路由在收到後,不能被髮布到本地AS之外。如果使用了聯盟,則不能被髮布到聯盟之外,但可以釋出給聯盟中的其他子AS。

no-export-subconfed

具有此屬性的路由在收到後,不能被髮布到本地AS之外,也不能釋出到聯盟中的其他子AS。

表2 BGP公認團體屬性

2.2設定路由的Community屬性

要使用團體屬性過濾器,前提是路由攜帶了Community屬性。就好比遊客頭上戴的“小紅帽”,如果沒有這個“小紅帽”,那麼所有基於這個“小紅帽”的策略都無法執行。所以我們先來看一下如何設定路由的Community屬性,我們通過下面這個舉例來看一下。

圖4設定路由字首的Community屬性

需求描述

如圖4所示,在AS100內的LSW1上通過BGP釋出兩條路由:10.1.1.0/24和10.1.2.0/24。在LSW1的BGP程序中,使用出方向(export)路由策略,修改10.1.1.0/24這條路由的Community屬性為100:1,這樣下游裝置就可以根據這個Community屬性執行相應的策略。

配置方法

R1上的關鍵配置:

#

ip ip-prefix huawei index 10 permit 10.1.1.0 24 //定義一個字首列表,匹配目標路由

#

route-policy RP permit node 10 //定義一個路由策略,設定目標路由的團體屬性

if-match ip-prefix huawei

apply community 100:1

route-policy RP permit node 20 //用於允許剩餘所有路由通過

#

bgp 100

router-id 1.1.1.1

peer 192.168.12.2 as-number 200

#

ipv4-family unicast

undo synchronization

network 10.1.1.0 255.255.255.0 //釋出路由

network 10.1.2.0 255.255.255.0 //釋出路由

peer 192.168.12.2 enable

peer 192.168.12.2 route-policy RP export//對BGP對等體的export方向繫結路由策略

peer 192.168.12.2 advertise-community //配置將團體屬性發布給對等體

#

R2上的關鍵配置:

#

bgp 200

router-id 2.2.2.2

peer 192.168.12.1 as-number 100

peer 192.168.23.2 as-number 300

#

ipv4-family unicast

undo synchronization

peer 192.168.12.1 enable

peer 192.168.23.2 enable

peer 192.168.23.2 advertise-community//配置將團體屬性發布給對等體

#

值得注意的是,預設情況下,Community屬性是不會隨路由字首更新給BGP peer的,因此在LSW1和LSW2上都需要通過peer advertise-community配置將團體屬性發布給對等體功能。

結果驗證

完成上述配置之後,我們在LSW3上檢視一下BGP路由,結果如下:

<LSW3> display bgp routing-table 10.1.1.0

BGP local router ID : 3.3.3.3

Local AS number : 300

Paths: 1 available, 1 best, 1 select

BGP routing table entry information of 10.1.1.0/24:

From: 192.168.23.1 (2.2.2.2)

Route Duration: 01h08m07s

Direct Out-interface: Vlanif23

Original nexthop: 192.168.23.1

Qos information : 0x0

Community:<100:1>//這個團體屬性就是在LSW1上通過路由策略設定,並傳遞到下游的

AS-path 200 100, origin igp, pref-val 0, valid, external, best, select, active,

pre 255

Not advertised to any peer yet

從LSW3的BGP路由表項可以看到,在LSW1上設定路由的Community屬性以後,經過路由傳遞,到達LSW3上的時候攜帶一個Community屬性,這樣,在LSW3上就可以根據這個標記執行某些策略了。

關於設定BGP路由的Community屬性,還有更詳細的設定方法,這裡我們就不再一一列舉,舉幾個常見的例子,供大家參考,如表3所示:

命令

功能

apply community 100

團體名更改為100。

apply community 100 150

團體名更改為100或150,即BGP路由屬於兩個團體。

apply community 100 150 additive

在原來基礎上追加100和150兩個團體屬性。即BGP路由屬於三個團體。

apply community none

刪除BGP路由的團體屬性。

表3設定BGP路由的Community屬性舉例

2.3使用Community-filter匹配BGP路由

上一小節,我們介紹瞭如何設定BGP路由的Community屬性,當上遊的路由器設定了Community屬性以後,這個屬性會隨著路由傳遞下來,這樣下游的裝置就可以根據這個屬性執行相應的策略。BGP提供了一個工具:community-filter,即團體屬性過濾器。下面我們通過一個例子來看一下如何使用團體屬性過濾器。

圖5使用community-filter匹配BGP路由

需求描述

如圖5所示,AS100內的LSW1釋出三條BGP路由,Community屬性的設定如圖所示,這個Community屬性隨著路由的傳遞到達AS300內的LSW3裝置上。執行策略之前我們先看一下LSW3的BGP路由表:

<LSW3> display bgp routing-table

BGP Local router ID is 3.3.3.3

Status codes: * - valid, > - best, d - damped,

h - history, i - internal, s - suppressed, S - Stale

Origin : i - IGP, e - EGP, ? - incomplete

Total Number of Routes: 3

Network NextHop MED LocPrf PrefVal Path/Ogn

*> 10.1.1.0/24 192.168.23.1 0 200 100i

*> 10.1.2.0/24 192.168.23.1 0 200 100i

*> 10.1.3.0/24 192.168.23.1 0 200 100i

可以看到,LSW3上的BGP路由表裡有三條路由。現在LSW3上根據團體屬性執行路由策略,允許攜帶100:999屬性的路由通過,其他的路由不允許通過。

配置方法

設定Community屬性的方法上面已經講過,不再贅述,這裡只看一下如何使用community-filter過濾路由。

LSW3上的關鍵配置:

#

ip community-filter 1 permit 100:999 //允許包含團體屬性100:999的路由

#

route-policy huawei permit node 10 //通過路由策略呼叫團體屬性過濾器

if-match community-filter 1

#

bgp 300

router-id 3.3.3.3

peer 192.168.23.1 as-number 200

#

ipv4-family unicast

undo synchronization

peer 192.168.23.1 enable

peer 192.168.23.1 route-policy huawei import //對peer使用入方向路由策略

#

結果驗證

完成上述配置以後,檢視LSW3的BGP路由表:

[LSW3] display bgp routing-table

BGP Local router ID is 3.3.3.3

Status codes: * - valid, > - best, d - damped,

h - history, i - internal, s - suppressed, S - Stale

Origin : i - IGP, e - EGP, ? - incomplete

Total Number of Routes: 2

Network NextHop MED LocPrf PrefVal Path/Ogn

*> 10.1.1.0/24 192.168.23.1 0 200 100i

*> 10.1.2.0/24 192.168.23.1 0 200 100i

由於定義的community-filter匹配包含團體屬性為100:999的路由,因此10.1.1.0/24,10.1.2.0/24這兩條路由將在LSW3上允許,其他BGP路由被禁止通過。

針對這個場景,我們再給出如下幾個常用的community-filter的配置方法,供大家參考:

Case1

ip community-filter 1 permit 100:1 100:999

需要100:1 100:999這兩個團體屬性都有才能匹配。因此匹配10.1.1.0/24這條路由。

Case2

ip community-filter 1 permit 100:1

ip community-filter 1 permit 100:2

只要community屬性中包含100:1或者100:2就能匹配到。因此匹配10.1.1.0/24和10.1.2.0/24這兩條路由。

Case3

ip community-filter 1 permit internet

預設所有路由攜帶internet屬性,所以這樣會匹配所有的路由。

至此,路由策略專題全部結束了,不知道大家是否有所收穫。相信每一位數通網路工程師都曾經追求過一個目標:對路由表做到精準控制,這樣才能保證業務流量按照規劃的流量模型轉發。我們希望通過這個技術貼,讓大家更加熟練的掌握路由策略的使用方法,控制路由能夠更加得心應手。謝謝大家持續關注,歡迎大家積極留言討論。