交換機在江湖】路由策略專題-第6期-BGP路由策略(下)
交換機在江湖】路由策略專題-第6期-BGP路由策略(下)
交換機在江湖官方號2016-12-1 09:34:32最新回覆:2020-02-17 01:49:10
第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所示。
表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所示:
表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所示:
表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屬性,所以這樣會匹配所有的路由。 至此,路由策略專題全部結束了,不知道大家是否有所收穫。相信每一位數通網路工程師都曾經追求過一個目標:對路由表做到精準控制,這樣才能保證業務流量按照規劃的流量模型轉發。我們希望通過這個技術貼,讓大家更加熟練的掌握路由策略的使用方法,控制路由能夠更加得心應手。謝謝大家持續關注,歡迎大家積極留言討論。 |