Cisco 300-410: BGP 策略、擴展性與路徑選擇 — 學習指南
屬於 Cisco CCNP Enterprise 300-410 ENARSI — 學習指南. 使用經過驗證的解答練習: Cisco 考試中心, 或參加限時模擬考試: ExamRoll.io.
總覽
Border Gateway Protocol (BGP) 負責管理跨網域的路由政策以及可擴展的連線能力分發。設計具備彈性的 session、了解 next-hop 與更新行為,並在充分了解最佳路徑演算法的情況下應用政策,這些都是基礎。在大規模環境中,iBGP 仰賴 route reflector 或 confederation,而像是條件式宣告 (conditional advertisement)、預設路由產生 (default-origination)、多路徑 (multipath) 和路由抑制 (dampening) 等進階工具則能微調其行為。本節將詳細說明其運作機制、設計上的權衡取捨、您必須預期的故障模式,並提供一套系統性的故障排除方法,以應對遺失的 prefix 和非預期的路徑選擇。
Session 設計與 Neighbor 建立
- eBGP vs. iBGP 的鄰接關係
- eBGP peer 位於不同的 ASN 中,預設使用 TTL 1,因此除非另有設定,否則需要單一跳躍 (single-hop) 的鄰接關係。
- iBGP peer 位於相同的 ASN 中,需要 full mesh 或可擴展的替代方案 (route reflector 或 confederation)。iBGP 使用 TTL 255,且 session 經常使用 loopback 介面以確保穩定性。
- TCP 連線能力與 BGP FSM
- BGP 運行於 TCP port 179;session 的形成取決於一般的 IP/TCP 連線能力以及 BGP 的有限狀態機 (finite state machine, FSM) (Idle → Connect/Active → OpenSent → OpenConfirm → Established)。
- 常見的阻礙:針對 TCP/179 的 ACLs/防火牆、限制 BGP 速率的 Control-Plane Policing (CoPP),以及會破壞 TCP 的非對稱路由。
- 實務檢查:執行
show ip bgp summary;如果 session 不穩定 (flapping),請檢查show policy-map control-plane來驗證 CoPP。在驗證政策期間,將 conform/exceed 的動作設定為 transmit,以避免非預期的丟棄。
- 驗證與 TTL 強化
- MD5 驗證 (
neighbor x password y) 可防止偽造的 session;若驗證不符,session 會停留在 Active 狀態。 - GTSM/TTL 安全性 (
neighbor x ttl-security hops n) 可減輕基於 CPU 的攻擊;請勿在同一個 neighbor 上將其與ebgp-multihop合併使用。
- MD5 驗證 (
- Loopback peering、update-source 與 multihop
- Loopback 對 Loopback 的 peering 對於介面故障更具彈性;需要指定唯一的來源並擴展 TTL:
neighbor 203.0.113.2 update-source Loopback0neighbor 203.0.113.2 ebgp-multihop 2
- 確保透過靜態路由或 IGP 能以 unicast 方式連到 loopback。若無法遞迴解析到 loopback,將會無聲無息地導致 session 建立失敗。
- Loopback 對 Loopback 的 peering 對於介面故障更具彈性;需要指定唯一的來源並擴展 TTL:
- Next-hop 處理與 next-hop-self
- eBGP 預設會將 next hop 設定為宣告此路由的 neighbor。
- iBGP 預設不會變更 next hop;邊界路由器必須在 iBGP 上設定
next-hop-self,以避免第三方 next-hop 的黑洞問題。address-family ipv4neighbor 10.0.0.2 next-hop-self
Next-Hop 處理與最佳路徑選擇
Cisco 平台上的 BGP 最佳路徑選擇演算法 (依重要性由高至低排列):
- Weight (Cisco 專有,僅在路由器本機有效;愈高愈好)。預設值:本機注入的路由為 32768,其餘為 0。
- Local Preference (AS 內部使用;愈高愈好)。預設值 100;會在 iBGP 中傳播。
- 本機產生的路由 (透過 network/aggregate/redistribute) 優先於學習到的路由。
- AS-path 長度 (愈短愈好)。在 AS-path 前面附加 (Prepending) 會增加其感知距離。
- Origin code (IGP < EGP < Incomplete)。
- MED (愈低愈好)。除非啟用
bgp always-compare-med,否則只會比較來自同一個鄰居 AS 的路徑;bgp deterministic-med確保在不同 peer 之間進行一致的 MED 比較。 - 優先選擇 eBGP 路徑,而非 iBGP 路徑。
- 到 BGP next hop 的 IGP metric 最低者 (hot-potato routing)。
- 優先選擇最舊的路由以減少網路抖動 (churn) (若啟用,會受到 dampening/multipath 影響)。
- 決勝規則 (Tie-breakers):最短的 cluster-list 長度、最低的 originator-ID、最低的 neighbor BGP router-ID,最後是最低的 neighbor IP 位址。
設計注意事項與陷阱:
- Next-hop 的連線能力是基礎。一條路徑即使在 BGP 中獲選,但如果 next hop 無法解析,仍然會導致 CEF 遞迴查詢失敗。
- 從 eBGP 學習到路由後,要將其宣告進 iBGP 時,切勿忘記設定
next-hop-self;否則 iBGP 路由器可能會看到一個無法連線的 eBGP next hop,進而丟棄流量。 - MED 經常被誤解;若沒有設定
always-compare-med,來自不同鄰居 AS 的 MED 值將不會被互相比較,導致其值看似被「忽略」。
策略工具:屬性、Community 與過濾
- Local Preference、Weight、AS-path prepending、MED
- 針對來自低延遲 ISP 的路由提高 LOCAL_PREF(例如,設定 local-preference 200),藉此優先選擇該 ISP。這會改變整個 AS 的出向流量選擇,且無需更動 IP 資料層面。
- Weight 僅具本地路由器效力;用於設定特定路由器的偏好(
neighbor 198.51.100.1 weight 50或透過 route-mapset weight)。 - AS-path prepending(
set as-path prepend 65000 65000 …)透過增加感知上的距離,讓進入您 AS 的某條路徑吸引力降低。請選擇性地套用;過度使用會降低可達性。 - MED(
set metric)向您的鄰居建議一個進入您 AS 的出口點。其效果取決於鄰居端的策略。
- Community 策略
- Community 的發送並非自動;需使用
neighbor x send-community [both | extended]來啟用。 - 公認 (Well-known) Community:
no-export、no-advertise、internet、local-AS,以及no-export-subconfed(在聯盟 (confederations) 環境中很有用)。 - 標準 Community 是 32 位元的值(使用
ip bgp community new-format指令可設為 AA:NN 格式)。 - 擴展 Community(64 位元)承載額外的語意(例如,VPNv4 中的 route-targets)。
- 大型 Community(96 位元,A:B:C 格式)在 4-byte ASN 環境中提供擴展性與清晰度。
- 範例:匹配 community 並設定屬性
- ip community-list standard PREFERED permit 65000:100
- route-map INBOUND-POLICY permit 10 match community PREFERED set local-preference 200
- Community 的發送並非自動;需使用
- 前綴與 AS-path 過濾
ip prefix-list控制 NLRI 的粒度;as-path access-list使用正規表示式 (regex) 來限制 AS 路徑。兩者都可透過 route-map 或直接用neighbor … prefix-list/as-path access-group來附加。- 入向 vs. 出向:
- 入向過濾決定了哪些路由會進入您的 BGP 表,並影響最佳路徑的選擇。
- 出向過濾控制您要宣告的路由;一個錯誤套用的出向 route-map 可能會意外地改變本地產生路由的屬性(例如,在所有宣告上都前置本地 AS,會導致外部鄰居看到您的前綴距離為兩個 AS hop,而非一個)。務必使用明確的匹配條件來約束 route-map。
- 最小化、目標明確的策略能減少路由變動 (churn) 並避免產生黑洞 (blackholing)。務必在 prefix-list 的結尾加上一個最終的 permit 條款,以避免非預期的拒絕。
簡短、目標明確的設定範例:
- 提高來自 ISP-A 路由的 local preference:
- route-map SET-LP permit 10 set local-preference 200
- neighbor 203.0.113.1 route-map SET-LP in
- 針對特定出向宣告進行 AS-path prepend:
- ip prefix-list OUT-ONLY permit 192.0.2.0/24
- route-map PREPEND permit 10 match ip address prefix-list OUT-ONLY set as-path prepend 65000 65000
- neighbor 198.51.100.1 route-map PREPEND out
iBGP 的擴展與進階行為
- 路由反射器 (Route reflectors, RRs)
- 透過指定 RRs 在客戶端 (client) 與非客戶端 (non-client) 之間反射路由,來取代 iBGP 的全網狀拓撲。使用 originator-ID 和 cluster-list 屬性來防止迴圈。
- Cluster ID 預設為 RR 的 router ID;當存在多個 RR 時,應使用獨一無二的 cluster ID 來防止持續性迴圈並改善路徑多樣性。
- 權衡取捨:RR 可能導致次佳路徑選擇(路徑隱藏)。可透過客戶端佈署位置、多樣化的叢集、add-path 功能以及調整 bestpath 參數來緩解此問題。
- 聯盟 (Confederations)
- 將一個大型 AS 分割成多個子 AS,這些子 AS 內部使用 eBGP 通訊,但對外呈現為單一 AS。
- 優點:減少 iBGP 網狀拓撲和策略影響範圍;缺點:操作複雜度高,且跨越子 AS 邊界時可能存在 MED/next-hop 的細微問題。
- 條件式宣告與預設路由
條件式宣告讓您只在某個路由存在或不存在時,才宣告另一個路由。
undefined
undefined
undefined
undefined
undefined
undefined
- 預設路由產生 (Default-origination):
neighbor 198.51.100.1 default-originate [route-map RM]會宣告 0.0.0.0/0,無論 RIB 中是否存在該路由(由 RM 控制條件)。另一種方式是,network 0.0.0.0指令則要求 RIB 中必須存在一筆相符的路由。
- 多路徑負載平衡 (Multipath)
- 使用
maximum-paths [ebgp|ibgp] n可在多個等成本的 BGP 路徑上進行負載分擔。使用bgp bestpath as-path multipath-relax則允許在受控條件下,跨越不同 AS-path 的 eBGP 進行多路徑負載平衡。在 MPLS L3VPNs 環境中,maximum-paths ibgp n可啟用 PE 到 PE 之間的 ECMP。
- 使用
- 路由遞迴與 RIB 失敗
- 只有當 next hop 可以遞迴解析到一個有效的轉發條目,且沒有管理距離 (administrative distance) 更低的路由已佔用該前綴時,BGP 才會安裝該路徑。
- 常見的 RIB-failure 原因:
- 存在 AD 值更優的路由(connected/static/IGP)。
- Next hop 無法解析(沒有到達 next hop 的 IGP/static 路由)。
- 存在更長、更具體的路由(流量會匹配更具體的路由)。
- 實用的檢查指令:
show ip bgp <prefix>、show ip bgp rib-failure、show ip route [vrf NAME] <prefix>,以及用於遞迴驗證的 CEF 查詢。
- 路由抑制 (Dampening)
bgp dampening會對不穩定 (flapping) 的前綴進行懲罰,並在它們穩定下來之前抑制它們。相關參數包括:half-life、reuse、suppress、max-suppress-time。- 權衡取捨:可能會隱藏合法的路由恢復過程並減慢收斂速度。應小範圍地應用於不穩定的邊界,並避免對核心網路的可達性或客戶關鍵網段進行抑制。
系統性故障排除 (遺失前綴與錯誤路徑):
- 驗證 BGP session 健康狀態:
show ip bgp summary;如果 session 不穩定 (flapping),檢查 CoPP 與 TCP/179 的可達性。 - 確認策略接受情況:
show ip bgp neighbors x received-routes/advertised-routes;必要時確保已啟用 soft-reconfiguration 或 route refresh。 - 驗證 next-hop:
show ip bgp <prefix>和show ip route [vrf NAME] <next-hop>;在調整屬性之前,先修復 IGP/遞迴問題。 - 檢查過濾器:prefix-lists、as-path access-lists 和 communities;確認鄰居已設定
send-community。 - 檢查屬性:weight/local-pref/AS-path/origin/MED;在適當情況下啟用 deterministic/always-compare MED。
- 檢查 RIB-failure 和路由具體性:一個 AD 值較低的 connected/static/IGP 路由,或是一個更具體的路由,將會覆蓋 BGP 路由。
- 確認擴展機制的運作:在 RR 上,注意路徑隱藏和 cluster-list 迴圈;在聯盟中,驗證
no-export-subconfed的使用情況。
實務問題情境
Acme 製造公司營運 AS 65010,並有兩家 ISP:ISP-A(低延遲)和 ISP-B(備援)。Acme 在三台核心路由器上運行 iBGP,並設有兩台路由反射器,宣告 203.0.113.0/24。在 ISP-B 邊界路由器上新增一個 outbound route-map 後,遠端站點回報延遲增加,且部分路徑意外地選擇了 ISP-B。
解決方法:
確認 session 與策略健康狀態
show ip bgp summary和show policy-map control-plane以確保 BGP 沒有因為 CoPP 而不穩定。理由:不穩定的控制層會產生變動,從而掩蓋策略的實際效果。
驗證 next-hop 可達性
show ip bgp 203.0.113.0/24和show ip route <next-hop>。理由:在考慮屬性之前,next-hop 的遞迴解析必須成功。
檢查對 ISP-B 的 outbound 策略
show run | sec router bgp;檢視neighbor … route-map OUT out。理由:範圍過於寬鬆的 route-map 可能會無意中修改所有宣告的前綴,包括本地產生的前綴。
將 AS-path prepending 限制在目標 NLRI
undefined
undefined
undefined
undefined
undefined
undefined
理由:具體的匹配條件將 prepending 限制在預期的前綴上,避免改變其他宣告的屬性。明確的 permit 20 確保未匹配的路由不會被丟棄。
全域性地優先選擇 ISP-A 作為 outbound 流量路徑
undefined
undefined
undefined
理由:LOCAL_PREF 影響整個 AS 的出口選擇(值越高越優先),是優先選擇低延遲 ISP 最乾淨俐落的方法。
確保 community 能傳遞預期的行為
undefined
undefined
undefined
undefined
undefined
理由:標記 (Tagging) 允許下游設備(例如,基於 RR 的偏好設定)進行策略決策,且需要 send-community 才能傳播。
驗證 RR 行為並避免路徑隱藏
- 在兩台 RR 上,確認 cluster-id 的唯一性與客戶端分配;在支援的設備上啟用
bgp additional-paths send receive select best 2。 理由:在多出口環境中,RR 可能會隱藏更佳的路徑。Additional-paths 功能或謹慎的客戶端拓撲設計可以減少次佳路徑的發生。
- 在兩台 RR 上,確認 cluster-id 的唯一性與客戶端分配;在支援的設備上啟用
驗證結果與安裝狀態
- 使用
show ip bgp 203.0.113.0/24確認 weight/local-pref/AS-path/MED;確認 eBGP 路徑優先於 iBGP 路徑的選擇,以及到 next hop 的 IGP metric。 - 使用
show ip bgp rib-failure確保所選路徑已安裝至 RIB。 理由:確認控制層與資料層都反映了預期的設計。
- 使用
此順序修正了非預期的 AS-path 變更(確保外部 AS 看到 Acme 前綴的距離符合預期),透過 LOCAL_PREF 強制優先選擇 ISP-A,利用 communities 維持策略的可見性,並驗證 next-hop 與安裝狀態,使最終的轉發行為與設計相符。
← EIGRP 設計、度量與收斂 · 所有領域 · 路由重分佈與策略式路由 →
練習這些題目 → · 在 ExamRoll.io 上限時練習 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
通過考試 →