如何在Quagga BGP路由器中過濾BGP路由?

責(zé)任編輯:editor005

2015-02-10 14:13:31

摘自:51CTO

我們在前一篇教程中演示了如何使用Quagga,將一個CentOS設(shè)備變成邊界網(wǎng)關(guān)協(xié)議(BGP)路由器。類似前綴列表,路由映射表語句指定了允許或拒絕動作,后面跟著序號。我們將為鄰居192 168 1 1把剛創(chuàng)建的路由映射表運(yùn)用到路由器B的BGP配置,使用入站前綴通告。

我們在前一篇教程中演示了如何使用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ò)避免虛假路由的路由破壞和通告的最有效方式之一。

但愿本文有所幫助。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號