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
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 NAME {permit|deny} SEQ
match 條件... (可多條,邏輯 AND)
set 動作... (修改屬性、Metric、Community、Local-Pref 等)
deny。RouterB(config)# route-map RMAP permit 10
RouterB(config-route-map)# match ip address prefix-list PRFX-LST
! 無 set 動作,純過濾:符合 PRFX-LST 者 permit,其餘隱性 deny
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
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)
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 | 純前綴過濾 (IP/掩碼範圍) | 極高 (Radix Tree) | 低 (無法匹配 AS-PATH, Community 等) |
| ACL (Standard/Extended) | 需匹配來源/目的 IP、埠、協定 (資料平面) | 中 | 中 (控制平面較慢) |
| Route-map | 複合條件匹配 + 屬性修改 (Local-Pref, MED, Community, AS-PATH Prepend) | 中 | 最高 (完整策略引擎) |
最佳實務:前綴過濾優先用 Prefix-list;需修改屬性或複合條件才用 Route-map;資料平面封包過濾用 ACL。
ip prefix-list DEFAULT_ONLY permit 0.0.0.0/0 + Route-map 限制僅從上游接收預設路由。neighbor IP maximum-prefix 100000 80 restart 30 防止路由表爆炸。Prefix-list 提供高效能前綴匹配,Route-map 提供完整策略引擎。兩者結合構成 BGP 路由過濾的鋼鐵防線:入站保護自己,出站保護他人。在 Quagga/FRR 中熟練掌握 ip prefix-list, route-map, match ip address prefix-list, neighbor route-map in/out 指令組合,是網路工程師進階 BGP 運維的核心技能。