萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 網路安全 >  >> 網路應用技術

Quagga BGP 路由器路由過濾實戰:Prefix-list 與 Route-map 控制入站/出站前綴

BGP 路由決策完全基於接收與通告的前綴。缺乏過濾機制將導致路由洩漏、劫持、黑洞路由。本文以 Quagga (FRR 前身) 為平台,實戰演示如何使用 Prefix-list 與 Route-map 精準控制入站/出站 BGP 前綴,包含拓撲規劃、配置指令、驗證指令與最佳實務。

實驗拓撲與需求

AS 100 (Provider A) ---- 192.168.1.0/24 (Peering Link) ---- AS 200 (Provider B)
   Prefixes: 10.10.0.0/16                    Prefixes: 10.20.0.0/16

需求:Provider B 僅接受 Provider A 通告的三個特定前綴:
10.10.10.0/23, 10.10.10.0/24, 10.10.11.0/24

Prefix-list:高效能前綴過濾器

基本語法

ip prefix-list NAME [seq NUM] {permit|deny} NETWORK/LEN [ge MIN] [le MAX]
  • ge (greater-equal):子網掩碼長度 ≥ MIN。
  • le (less-equal):子網掩碼長度 ≤ MAX。
  • ge MIN le MAX:掩碼長度在區間內。
  • 隱性拒絕:列表末尾隱含 deny 0.0.0.0/0 le 32。
  • 允許所有:ip prefix-list ALLOW_ALL permit 0.0.0.0/0 le 32。

建立需求前綴清單

RouterB# configure terminal
RouterB(config)# ip prefix-list PRFX-LST permit 10.10.10.0/23 le 24
! 解析:允許 10.10.10.0/23 及其子網 (掩碼 23~24)
! 涵蓋:10.10.10.0/23, 10.10.10.0/24, 10.10.11.0/24

Route-map:策略式路由控制引擎

結構

route-map NAME {permit|deny} SEQ
  match 條件...   (可多條,邏輯 AND)
  set 動作...     (修改屬性、Metric、Community、Local-Pref 等)
  • 序號決定處理順序,預設 10 遞增 10。
  • 隱性拒絕:最後隱含 deny。

建立匹配 Prefix-list 的 Route-map

RouterB(config)# route-map RMAP permit 10
RouterB(config-route-map)# match ip address prefix-list PRFX-LST
! 無 set 動作,純過濾:符合 PRFX-LST 者 permit,其餘隱性 deny

將 Route-map 套用至 BGP 鄰居 (入站方向)

RouterB(config)# router bgp 200
RouterB(config-router)# neighbor 192.168.1.1 route-map RMAP in
! in = 套用於從鄰居接收的前綴 (入站過濾)
! out = 套用於通告給鄰居的前綴 (出站過濾)

驗證成效

! 檢視鄰居通告給我的前綴 (套用過濾後)
RouterB# show ip bgp neighbor 192.168.1.1 routes
! 應僅見 10.10.10.0/23, 10.10.10.0/24, 10.10.11.0/24 三條

! 檢視我通告給鄰居的前綴
RouterB# show ip bgp neighbor 192.168.1.1 advertised-routes
! 應見 10.20.0.0/16

! 檢視 BGP 表整體
RouterB# show ip bgp
! 已過濾前綴不會安裝至 BGP 表

進階應用:出站過濾、屬性操作、社群標記

出站過濾:只通告特定前綴給上游

RouterA(config)# ip prefix-list TO_UPSTREAM permit 10.10.0.0/16
RouterA(config)# route-map OUT_FILTER permit 10
RouterA(config-route-map)# match ip address prefix-list TO_UPSTREAM
RouterA(config)# router bgp 100
RouterA(config-router)# neighbor 192.168.1.2 route-map OUT_FILTER out

修改 Local Preference 影響出站路徑選擇

route-map SET_LP permit 10
 match ip address prefix-list IMPORTANT_PREFIXES
 set local-preference 500
!
route-map SET_LP permit 20
! 隱性允許其餘,不修改 Local-Pref (預設 100)

附加 Community 標記實現上游策略

ip prefix-list CUSTOMER_ROUTES permit 10.10.10.0/24
route-map TAG_CUSTOMER permit 10
 match ip address prefix-list CUSTOMER_ROUTES
 set community 100:1000 additive  ! 傳遞給上游識別客戶路由
!
route-map TAG_CUSTOMER permit 20
! 其餘不打標

Prefix-list vs ACL vs Route-map 選型指南

工具適用場景效能功能豐富度
Prefix-list純前綴過濾 (IP/掩碼範圍)極高 (Radix Tree)低 (無法匹配 AS-PATH, Community 等)
ACL (Standard/Extended)需匹配來源/目的 IP、埠、協定 (資料平面)中中 (控制平面較慢)
Route-map複合條件匹配 + 屬性修改 (Local-Pref, MED, Community, AS-PATH Prepend)中最高 (完整策略引擎)

最佳實務:前綴過濾優先用 Prefix-list;需修改屬性或複合條件才用 Route-map;資料平面封包過濾用 ACL。

生產環境部署清單

  1. 入站過濾:每個 eBGP 鄰居必須套用入站 Route-map,僅接受合法客戶前綴 (配合 IRR/RPKI 驗證)。
  2. 出站過濾:僅通告自有分配前綴,防止成為傳輸網路。
  3. 預設路由保護:ip prefix-list DEFAULT_ONLY permit 0.0.0.0/0 + Route-map 限制僅從上游接收預設路由。
  4. 最大前綴限制:neighbor IP maximum-prefix 100000 80 restart 30 防止路由表爆炸。
  5. 變更管理:所有 Prefix-list/Route-map 變更納入 GitOps 流程,CI/CD 自動測試語法、模擬影響範圍。
  6. 監控告警:BGP 狀態變化、前綴數量突變、RPKI 驗證失敗 → 即時告警。

總結

Prefix-list 提供高效能前綴匹配,Route-map 提供完整策略引擎。兩者結合構成 BGP 路由過濾的鋼鐵防線:入站保護自己,出站保護他人。在 Quagga/FRR 中熟練掌握 ip prefix-list, route-map, match ip address prefix-list, neighbor route-map in/out 指令組合,是網路工程師進階 BGP 運維的核心技能。

copyright © 萬盛學電腦網 all rights reserved