如何使用 Quagga BGP(邊界網關協議)路由器來過濾 BGP 路由

來源:互聯網
上載者:User

如何使用 Quagga BGP(邊界網關協議)路由器來過濾 BGP 路由

在之前的文章中,我們介紹了如何使用 Quagga 將 CentOS 伺服器變成一個 BGP 路由器,也介紹了 BGP 對等體和首碼交換設定。在本教程中,我們將重點放在如何使用首碼列表(prefix-list)和路由映射(route-map)來分別控制資料注入和資料輸出。

之前的文章已經說過,BGP 的路由判定是基於首碼的收取和首碼的廣播。為避免錯誤的路由,你需要使用一些過濾機制來控制這些首碼的收發。舉個例子,如果你的一個 BGP 鄰居開始廣播一個本不屬於它們的首碼,而你也將錯就錯地接收了這些不正常首碼,並且也將它轉寄到網路上,這個轉寄過程會不斷進行下去,永不停止(所謂的“黑洞”就這樣產生了)。所以確保這樣的首碼不會被收到,或者不會轉寄到任何網路,要達到這個目的,你可以使用首碼列表和路由映射。前者是基於首碼的過濾機制,後者是更為常用的基於首碼的策略,可用於精調過濾機制。

本文會向你展示如何在 Quagga 中使用首碼列表和路由映射。

 

拓撲和需求

本教程使用下面的拓撲結構。

服務供應商A和供應商B已經將對方設定成為 eBGP 對等體,實現互相通訊。他們的自治系統號和首碼分別如下所示。

  • 對等區段: 192.168.1.0/24
  • 服務供應商A: 自治系統號 100, 首碼 10.10.0.0/16
  • 服務供應商B: 自治系統號 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 配置和首碼廣播:

說明 BGP 對等體已經開啟。Router-A 在向 router-B 廣播多個首碼,而 Router-B 也在向 router-A 廣播一個首碼 10.20.0.0/16。兩個路由器都能正確無誤地收發首碼。

 

建立首碼列表

路由器可以使用 ACL 或首碼列表來過濾一個首碼。首碼列表比 ACL 更常用,因為前者處理步驟少,而且易於建立和維護。

  1. ip prefix-list DEMO-PRFX permit 192.168.0.0/23

上面的命令建立了名為“DEMO-FRFX”的首碼列表,只允許存在 192.168.0.0/23 這個首碼。

首碼列表的另一個強大功能是支援子網路遮罩區間,請看下面的例子:

  1. ip prefix-list DEMO-PRFX permit 192.168.0.0/23 le 24

這個命令建立的首碼列表包含在 192.168.0.0/23 和 /24 之間的首碼,分別是 192.168.0.0/23, 192.168.0.0/24 和 192.168.1.0/24。運算子“le”表示小於等於,你也可以使用“ge”表示大於等於。

一個首碼列表語句可以有多個允許或拒絕操作。每個語句都自動或手動地分配有一個序號。

如果存在多個首碼列表語句,則這些語句會按序號順序被依次執行。在配置首碼列表的時候,我們需要注意在所有首碼列表語句之後是隱性拒絕語句,就是說凡是不被明顯允許的,都會被拒絕。

如果要設定成允許所有首碼,首碼列表語句設定如下:

  1. ip prefix-list DEMO-PRFX permit 0.0.0.0/0 le 32

我們已經知道如何建立首碼列表語句了,現在我們要建立一個名為“PRFX-LST”的首碼列表,來滿足我們實驗情境的需求。

  1. router-b# conf t
  2. router-b(config)#ip prefix-list PRFX-LST permit 10.10.10.0/23 le 24

 

建立路由映射

除了首碼列表和 ACL,這裡還有另一種機制,叫做路由映射,也可以在 BGP 路由器中控制首碼。事實上,路由映射針對首碼匹配的微調效果比首碼列表和 ACL 都強。

與首碼列表類似,路由映射語句也可以指定允許和拒絕操作,也需要分配一個序號。每個路由匹配可以有多個允許或拒絕操作。例如:

  1. route-map DEMO-RMAP permit 10

上面的語句建立了名為“DEMO-RMAP”的路由映射,添加序號為10的允許操作。現在我們在這個序號所對應的路由映射下使用 match 命令進行匹配。

  1. router-a(config-route-map)# match (press ?in the keyboard)
  1. as-path Match BGP AS path list
  2. community Match BGP community list
  3. extcommunity Match BGP/VPN extended community list
  4. interface match first hop interface of route
  5. ip IP information
  6. ipv6 IPv6 information
  7. metric Match metric of route
  8. origin BGP origin code
  9. peer Match peer address
  10. probability Match portion of routes defined by percentage value
  11. tag Match tag of route

如你所見,路由映射可以匹配很多屬性,在本教程中匹配的是首碼。

  1. route-map DEMO-RMAP permit 10
  2. match ip address prefix-list DEMO-PRFX

這個 match 命令會匹配之前建好的首碼列表中允許的 IP 位址(也就是首碼 192.168.0.0/23, 192.168.0.0/24 和 192.168.1.0/24)。

接下來,我們可以使用 set 命令來修改這些屬性。例子如下:

  1. route-map DEMO-RMAP permit 10
  2. match ip address prefix-list DEMO-PRFX
  3. set(press ?in keyboard)
  1. aggregator BGP aggregator attribute
  2. as-path Transform BGP AS-path attribute
  3. atomic-aggregate BGP atomic aggregate attribute
  4. comm-listset BGP community list(for deletion)
  5. community BGP community attribute
  6. extcommunity BGP extended community attribute
  7. forwarding-address ForwardingAddress
  8. ip IP information
  9. ipv6 IPv6 information
  10. local-preference BGP local preference path attribute
  11. metric Metric value for destination routing protocol
  12. metric-type Type of metric
  13. origin BGP origin code
  14. originator-id BGP originator ID attribute
  15. src src address forroute
  16. tag Tag value for routing protocol
  17. vpnv4 VPNv4 information
  18. weight BGP weight for routing table

如你所見,set 命令也可以修改很多屬性。為了作個示範,我們修改一下 BGP 的 local-preference 這個屬性。

  1. route-map DEMO-RMAP permit 10
  2. match ip address prefix-list DEMO-PRFX
  3. setlocal-preference 500

如同首碼列表,路由映射語句的末尾也有隱性拒絕操作。所以我們需要添加另外一個允許語句(使用序號20)來允許所有首碼。

  1. route-map DEMO-RMAP permit 10
  2. match ip address prefix-list DEMO-PRFX
  3. setlocal-preference 500
  4. !
  5. route-map DEMO-RMAP permit 20

序號20未指定任何匹配命令,所以預設匹配所有首碼。在這個路由映射語句中,所有的首碼都被允許。

回想一下,我們的需求是只允許或只拒絕一些首碼,所以上面的 set 命令不應該存在於這個情境中。我們只需要一個允許語句,如下如示:

  1. router-b# conf t
  2. router-b(config)#route-map RMAP permit 10
  3. router-b(config-route-map)# match ip address prefix-list PRFX-LST

這個路由映射才是我們需要的效果。

 

應用路由映射

注意,在被應用於一個介面或一個 BGP 鄰居之前,ACL、首碼列表和路由映射都不會生效。與 ACL 和首碼列表一樣,一條路由映射語句也能被多個介面或鄰居使用。然而,一個介面或一個鄰居只能有一條路由映射語句應用於輸入端,以及一條路由映射語句應用於輸出端。

下面我們將這條路由映射語句應用於 router-B 的 BGP 配置,為 router-B 的鄰居 192.168.1.1 設定輸入首碼廣播。

  1. router-b# conf terminal
  2. router-b(config)# router bgp 200
  3. router-b(config-router)# neighbor 192.168.1.1route-map RMAP in

現在檢查下廣播路由和收取路由。

顯示廣播路由的命令:

  1. show ip bgp neighbor-IP advertised-routes

顯示收取路由的命令:

  1. show ip bgp neighbor-IP routes

可以看到,router-A 有4條路由首碼到達 router-B,而 router-B 只接收3條。查看一下範圍,我們就能知道只有被路由映射允許的首碼才能在 router-B 上顯示出來,其他的首碼一概丟棄。

小提示:如果接收首碼內容沒有重新整理,試試重設下 BGP 會話,使用這個命令:clear ip bgp neighbor-IP。本教程中命令如下:

  1. clearip bgp 192.168.1.1

我們能看到系統已經滿足我們的要求了。接下來我們可以在 router-A 和 router-B 上建立相似的首碼列表和路由映射語句來更好地控制輸入輸出的首碼。

這裡把配置過程總結一下,方便查看。

  1. router bgp 200
  2. network 10.20.0.0/16
  3. neighbor 192.168.1.1 remote-as100
  4. neighbor 192.168.1.1route-map RMAP in
  5. !
  6. ip prefix-list PRFX-LST seq 5 permit 10.10.10.0/23 le 24
  7. !
  8. route-map RMAP permit 10
  9. match ip address prefix-list PRFX-LST

 

總結

在本教程中我們示範了如何在 Quagga 中設定首碼列表和路由映射來過濾 BGP 路由。我們也展示了如何將首碼列表結合進路由映射來進行輸入首碼的微調功能。你可以參考這些方法來設定滿足自己需求的首碼列表和路由映射。這些工具是保護網路免受路由毒化和來自 bogon 路由(LCTT 譯註:指不該出現在internet路由表中的地址)的廣播。

希望本文對你有協助。

本文永久更新連結地址:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.