我們在前一篇教程中演示了如何使用Quagga,將一個CentOS設(shè)備變成邊界網(wǎng)關(guān)協(xié)議(BGP)路由器。我們當(dāng)時還探討了基本的BGP對等和前綴交換設(shè)置。我們在本教程中將著重介紹如何使用prefix-list(前綴列表)和route-map(路由映射表),控制入站和出站BGP前綴。
正如在之前的教程中描述的那樣,BGP路由決策是根據(jù)接收/通告的前綴做出的。為了確保路由沒有錯誤,建議你使用某種過濾機(jī)制,以控制這些入站和出站前綴。比如說,如果你的其中一個BGP鄰居開始通告并不屬于它們的前綴,你又錯誤地接收了這類虛假的前綴,你的流量就會被發(fā)送到那個錯誤的鄰居,最后不知其行蹤(這就是所謂的“進(jìn)入黑洞”)。為了確保沒有接收這類前綴,也沒有通告給任何鄰居,你可以使用前綴列表和路由映射表。前者是一種基于前綴的過濾機(jī)制,而后者是一種較為一般的基于前綴的策略機(jī)制,用來對動作進(jìn)行微調(diào)。
我們將演示如何在Quagga中使用前綴列表和路由映射表。
拓?fù)浣Y(jié)構(gòu)和需求
我們在本教程中假設(shè)采用下列拓?fù)浣Y(jié)構(gòu)。
服務(wù)提供者A已經(jīng)與服務(wù)提供者B建立了eBGP對等關(guān)系,它們在彼此之間交換路由信息。AS和前綴細(xì)節(jié)如下所述。
·對等塊:192.168.1.0/24
·服務(wù)提供者A:AS 100,前綴10.10.0.0/16
·服務(wù)提供者B:AS 200,前綴10.20.0.0/16
在這個場景下,服務(wù)提供者B只想接收來自提供者A的10.10.10.0/23、10.10.10.0/24和10.10.11.0/24這三個前綴。
Quagga安裝和BGP對等
我們在前一篇教程中已經(jīng)探討了安裝Quagga和設(shè)置BGP對等的方法。所以我們在此不會重復(fù)具體細(xì)節(jié)。不過,我提供了BGP配置和前綴通告方面的總結(jié):
上述輸出結(jié)果表明,BPG對等已建立起來。路由器A在向路由器B通告多個前綴。另一方面,路由器B向路由器A通告單單一個前綴10.20.0.0/16。這兩個路由器都可以正常接收前綴,沒有任何問題。
創(chuàng)建前綴列表
在路由器中,可以用訪問控制列表(ACL)或前綴列表來阻止前綴。人們常常更喜歡使用前綴列表,而不是ACL,因?yàn)榍熬Y列表不像ALC那樣大量占用處理器資源。另外,前綴列表創(chuàng)建和維護(hù)起來也更容易。
ip prefix-list DEMO-PRFX permit 192.168.0.0/23
上述命令創(chuàng)建了一個名為“DEMO-FRFX”的前綴列表,它只允許192.168.0.0/23。
前綴列表的另一個出色的特性是,我們可以指定子網(wǎng)掩碼范圍。不妨看一看下面這個例子:
ip prefix-list DEMO-PRFX permit 192.168.0.0/23 le 24
上述命令創(chuàng)建了一個名為“DEMO-PRFX”的前綴列表,允許192.168.0.0/23到/24之間的前綴,具體包括192.168.0.0/23、192.168.0.0/24和192.168.1.0/24. “le”運(yùn)算符意味著小于或等于。你還可以使用“ge”運(yùn)算符來表示大于或等于。
一個前綴列表語句可能有多個允許/拒絕動作。每個語句被賦予可以自動確定或人工指定的序號。
多個前綴列表語句以序號的遞增次序逐個加以分析。配置前綴列表時,我們應(yīng)該牢記一點(diǎn):在所有前綴列表語句末尾處總是有隱式拒絕(implicit deny)。這意味著,沒有顯式允許的任何前綴都將被拒絕。
為了允許一切,我們可以使用下列前綴列表語句,該語句允許任何前綴:從0.0.0.0/0開始,直到使用子網(wǎng)掩網(wǎng)/32的任何地址。
ip prefix-list DEMO-PRFX permit 0.0.0.0/0 le 32
現(xiàn)在我們已知道了如何創(chuàng)建前綴列表語句,接下來我們將創(chuàng)建名為“PRFX-LST”的前綴列表,允許我們場景下所需要的前綴。
router-b# conf t
router-b(config)# ip prefix-list PRFX-LST permit 10.10.10.0/23 le 24
[page]創(chuàng)建路由映射表
除了前綴列表和ACL外,還有另一種名為路由映射表的機(jī)制,它可以控制BGP路由器中的前綴。實(shí)際上,路由映射表可以針對用ACL或前綴列表匹配的前綴,對可能適合的動作進(jìn)行更靈活的微調(diào)。
類似前綴列表,路由映射表語句指定了允許或拒絕動作,后面跟著序號。每個路由映射表語句可能帶有多個允許/拒絕動作,比如:
route-map DEMO-RMAP permit 10
上述語句創(chuàng)建了名為“DEMO-RMAP”的路由映射表,并為允許動作增添了順序10?,F(xiàn)在,我們將在順序10下使用match命令。
router-a(config-route-map)# match (press ? in the keyboard)
as-path 匹配BGP AS路徑列表
community 匹配BGP團(tuán)體屬性列表
extcommunity 匹配BGP/VPN擴(kuò)展團(tuán)體屬性列表
interface 匹配路由的首段接口
ip IP信息
ipv6 IPv6信息
metric 匹配路由度量標(biāo)準(zhǔn)
origin BGP源編碼
peer 匹配對等體地址
probability 匹配百分比值定義的路由部分
tag 匹配路由標(biāo)記
正如我們所見,路由映射表可以匹配許多屬性。我們將在該教程中匹配前綴。
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
match命令將匹配之前創(chuàng)建的前綴列表“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 轉(zhuǎn)變BGP AS路徑屬性
atomic-aggregate BGP原子聚合屬性
comm-list 設(shè)置BGP團(tuán)體屬性列表(用于刪除)
community BGP團(tuán)體屬性
extcommunity BGP擴(kuò)展團(tuán)體屬性
forwarding-address 轉(zhuǎn)發(fā)地址
ip IP信息
ipv6 IPv6信息
local-preference BGP本地偏好路徑屬性
metric 用于目的地路由協(xié)議的度量標(biāo)準(zhǔn)值
metric-type 度量標(biāo)準(zhǔn)類型
origin BGP源編碼
originator-id BGP始發(fā)器ID屬性
src 路由的src地址
tag 路由協(xié)議的標(biāo)記值
vpnv4 VPNv4信息
weight 路由表的BGP權(quán)重
正如我們所見,set命令可以用來更改許多屬性。為了演示,我們將設(shè)置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命令,所以它在默認(rèn)情況下會匹配一切。由于決策是允許,該路由映射表語句將允許一切。
如果你還記得,我們的要求是只允許/拒絕一些前綴。于是在我們的場景下,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
這個路由映射表語句應(yīng)該能夠能取得想要的結(jié)果。
運(yùn)用路由映射表
牢記一點(diǎn):除非運(yùn)用于某個接口或BGP鄰居,否則ACL、前綴列表和路由映射表不管用。就像ACL或前綴列表那樣,單單一個路由映射表語句可以與任何數(shù)量的接口或鄰居結(jié)合使用。然而,任何一個接口或鄰居只能支持一個路由映射表語句用于入站流量,只能支持一個路由映射表語句用于出站流量。
我們將為鄰居192.168.1.1把剛創(chuàng)建的路由映射表運(yùn)用到路由器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
現(xiàn)在,我們使用下列命令,檢查通告和接收的路由。
針對通告的路由:
show ip bgp neighbor-IP advertised-routes
針對收到的路由:
show ip bgp neighbor-IP routes
你可以發(fā)現(xiàn),雖然路由器A向路由器B通告了四個前綴,但路由器只接收了三個前綴。如果我們檢查一下范圍,就能發(fā)現(xiàn),只有路由映射表允許的前綴才在路由器B上看得見。其他所有前綴被丟棄了。
提示:要是接收到的前綴沒有任何變化,試著使用命令:“clear ip bgp neighbor-IP”,重新設(shè)置BGP會話。在我們的例子中:
clear ip bgp 192.168.1.1
正如我們所見,已滿足了要求。我們可以在路由器A和B中創(chuàng)建類似的前綴列表和路由映射表語句,以便進(jìn)一步控制入站和出站前綴。
我在一個地方總結(jié)了配置,那樣你一眼就能看清。
router bgp 200
network 10.20.0.0/16
neighbor 192.168.1.1 remote-as 100
neighbor 192.168.1.1 route-map RMAP in
!
ip prefix-list PRFX-LST seq 5 permit 10.10.10.0/23 le 24
!
route-map RMAP permit 10
match ip address prefix-list PRFX-LST
結(jié)束語
我們在該教程中演示了如何定義前綴列表和路由映射表,從而在Quagga中過濾BPG路由。我們還演示了如何結(jié)合前綴列表和路由映射表,以便對入站前綴進(jìn)行精細(xì)控制。你可以以一種類似的方式來創(chuàng)建自己的前綴列表和路由映射表,從而與你的網(wǎng)絡(luò)要求相匹配。這些工具是保護(hù)生產(chǎn)網(wǎng)絡(luò)避免虛假路由的路由破壞和通告的最有效方式之一。
但愿本文有所幫助。