本文是小編帶來如何在Quagga BGP路由器中過濾BGP路由,歡迎大家閱讀。
我們在本教程中將著重介紹如何使用prefix-list(前綴列表)和route-map(路由映射表),控制入站和出站BGP前綴。
正如在之前的教程中描述的那樣,BGP路由決策是根據接收/通告的前綴做出的。為了確保路由沒有錯誤,建議你使用某種過濾機制,以控制這些入站和出站前綴。比如說,如果你的其中一個BGP鄰居開始通告並不屬於它們的前綴,你又錯誤地接收了這類虛假的前綴,你的流量就會被發送到那個錯誤的鄰居,最後不知其行蹤(這就是所謂的“進入黑洞”)。為了確保沒有接收這類前綴,也沒有通告給任何鄰居,你可以使用前綴列表和路由映射表。前者是一種基於前綴的過濾機制,而後者是一種較為一般的基於前綴的策略機制,用來對動作進行微調。
我們將演示如何在Quagga中使用前綴列表和路由映射表。
拓撲結構和需求
我們在本教程中假設采用下列拓撲結構。
服務提供者A已經與服務提供者B建立了eBGP對等關系,它們在彼此之間交換路由信息。AS和前綴細節如下所述。
•對等塊:192.168.1.0/24
•服務提供者A:AS 100,前綴10.10.0.0/16
•服務提供者B:AS 200,前綴10.20.0.0/16
在這個場景下,服務提供者B只想接收來自提供者A的10.10.10.0/23、10.10.10.0/24和10.10.11.0/24這三個前綴。
Quagga安裝和BGP對等
我們在前一篇教程中已經探討了安裝Quagga和設置BGP對等的方法。所以我們在此不會重復具體細節。不過,我提供了BGP配置和前綴通告方面的總結:
上述輸出結果表明,BPG對等已建立起來。路由器A在向路由器B通告多個前綴。另一方面,路由器B向路由器A通告單單一個前綴10.20.0.0/16。這兩個路由器都可以正常接收前綴,沒有任何問題。
創建前綴列表
在路由器中,可以用訪問控制列表(ACL)或前綴列表來阻止前綴。人們常常更喜歡使用前綴列表,而不是ACL,因為前綴列表不像ALC那樣大量占用處理器資源。另外,前綴列表創建和維護起來也更容易。
ip prefix-list DEMO-PRFX permit 192.168.0.0/23
上述命令創建了一個名為“DEMO-FRFX”的前綴列表,它只允許192.168.0.0/23。
前綴列表的另一個出色的特性是,我們可以指定子網掩碼范圍。不妨看一看下面這個例子:
ip prefix-list DEMO-PRFX permit 192.168.0.0/23 le 24
上述命令創建了一個名為“DEMO-PRFX”的前綴列表,允許192.168.0.0/23到/24之間的前綴,具體包括192.168.0.0/23、192.168.0.0/24和192.168.1.0/24. “le”運算符意味著小於或等於。你還可以使用“ge”運算符來表示大於或等於。
一個前綴列表語句可能有多個允許/拒絕動作。每個語句被賦予可以自動確定或人工指定的序號。
多個前綴列表語句以序號的遞增次序逐個加以分析。配置前綴列表時,我們應該牢記一點:在所有前綴列表語句末尾處總是有隱式拒絕(implicit deny)。這意味著,沒有顯式允許的任何前綴都將被拒絕。
為了允許一切,我們可以使用下列前綴列表語句,該語句允許任何前綴:從0.0.0.0/0開始,直到使用子網掩網/32的任何地址。
ip prefix-list DEMO-PRFX permit 0.0.0.0/0 le 32
現在我們已知道了如何創建前綴列表語句,接下來我們將創建名為“PRFX-LST”的前綴列表,允許我們場景下所需要的前綴。
router-b# conf t
router-b(config)# ip prefix-list PRFX-LST permit 10.10.10.0/23 le 24
創建路由映射表
除了前綴列表和ACL外,還有另一種名為路由映射表的機制,它可以控制BGP路由器中的前綴。實際上,路由映射表可以針對用ACL或前綴列表匹配的前綴,對可能適合的動作進行更靈活的微調。
類似前綴列表,路由映射表語句指定了允許或拒絕動作,後面跟著序號。每個路由映射表語句可能帶有多個允許/拒絕動作,比如:
route-map DEMO-RMAP permit 10
上述語句創建了名為“DEMO-RMAP”的路由映射表,並為允許動作增添了順序10。現在,我們將在順序10下使用match命令。
router-a(config-route-map)# match (press ? in the keyboard)
as-path 匹配BGP AS路徑列表
community 匹配BGP團體屬性列表
extcommunity 匹配BGP/VPN擴展團體屬性列表
interface 匹配路由的首段接口
ip IP信息
ipv6 IPv6信息
metric 匹配路由度量標准
origin BGP源編碼
peer 匹配對等體地址
probability 匹配百分比值定義的路由部分
tag 匹配路由標記
正如我們所見,路由映射表可以匹配許多屬性。我們將在該教程中匹配前綴。
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
match命令將匹配之前創建的前綴列表“DEMO-PRFX”所允許的IP地址(即192.168.0.0/23、192.168.0.0/24和192.168.1.0/24這三個前綴)。
下一步,我們可以使用set命令,改動屬性。下面這個例子顯示了set可能存在的使用場合。
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
set (press ? in keyboard)
aggregator BGP聚合器屬性
as-path 轉變BGP AS路徑屬性
atomic-aggregate BGP原子聚合屬性
comm-list 設置BGP團體屬性列表(用於刪除)
community BGP團體屬性
extcommunity BGP擴展團體屬性
forwarding-address 轉發地址
ip IP信息
ipv6 IPv6信息
local-preference BGP本地偏好路徑屬性
metric 用於目的地路由協議的度量標准值
metric-type 度量標准類型
origin BGP源編碼
originator-id BGP始發器ID屬性
src 路由的src地址
tag 路由協議的標記值
vpnv4 VPNv4信息
weight 路由表的BGP權重
正如我們所見,set命令可以用來更改許多屬性。為了演示,我們將設置BGP本地偏好。
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
set local-preference 500
就像前綴列表一樣,所有路由映射表語句的末尾也都有隱式拒絕。所以,我們將在序號20添加另一個允許語句,允許一切前綴。
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
set local-preference 500
!
route-map DEMO-RMAP permit 20
序號20沒有特定的match命令,所以它在默認情況下會匹配一切。由於決策是允許,該路由映射表語句將允許一切。
如果你還記得,我們的要求是只允許/拒絕一些前綴。於是在我們的場景下,set命令沒有必要。我們將只使用一個允許語句,如下所示。
router-b# conf t
router-b(config)# route-map RMAP permit 10
router-b(config-route-map)# match ip address prefix-list PRFX-LST
這個路由映射表語句應該能夠能取得想要的結果。
運用路由映射表
牢記一點:除非運用於某個接口或BGP鄰居,否則ACL、前綴列表和路由映射表不管用。就像ACL或前綴列表那樣,單單一個路由映射表語句可以與任何數量的接口或鄰居結合使用。然而,任何一個接口或鄰居只能支持一個路由映射表語句用於入站流量,只能支持一個路由映射表語句用於出站流量。
我們將為鄰居192.168.1.1把剛創建的路由映射表運用到路由器B的BGP配置,使用入站前綴通告。
router-b# conf terminal
router-b(config)# router bgp 200
router-b(config-router)# neighbor 192.168.1.1 route-map RMAP in
現在,我們使用下列命令,檢查通告和接收的路由。
針對通告的路由:
show ip bgp neighbor-IP advertised-routes
針對收到的路由:
show ip bgp neighbor-IP routes
你可以發現,雖然路由器A向路由器B通告了四個前綴,但路由器只接收了三個前綴。如果我們檢查一下范圍,就能發現,只有路由映射表允許的前綴才在路由器B