Extreme XOS 網路架構大師

深入淺出 BGP:從 iBGP/eBGP 到 Route Reflector

一、核心概念 (Concept)

💡一句話定義

BGP (Border Gateway Protocol) 是網際網路的「標準語言」,屬於 EGP (外部閘道協定),用於在不同的自治系統 (AS) 之間交換路由資訊,決定數據傳輸的最佳路徑。

🌍 基礎分類:IGP 與 EGP 的差異

網路協定依據「運作範圍」分為兩大類:

graph TB subgraph Global_Internet ["網際網路 (EGP Domain)"] direction LR AS1[("AS 100
(企業)")] AS2[("AS 200
(ISP A)")] AS3[("AS 300
(ISP B)")] AS1 == "BGP (EGP)" ==> AS2 AS2 == "BGP (EGP)" ==> AS3 AS1 == "BGP (EGP)" ==> AS3 end subgraph Inside_AS1 ["AS 100 內部 (IGP Domain)"] R1((Router A)) --- R2((Router B)) R2 --- R3((Router C)) R1 --- R3 linkStyle 3,4,5 stroke:blue,stroke-width:2px; end %% Add invisible link to position graphs AS1 ~~~ Inside_AS1

特性 IGP (內部閘道協定) EGP (外部閘道協定)
全名 Interior Gateway Protocol Exterior Gateway Protocol
運作範圍 單一 AS 內部 不同 AS 之間
主要目標 速度:快速收斂,找最短路徑。 控制:政策路由 (Policy),選最「好」的路徑。
常見協定 OSPF, RIP, IS-IS, EIGRP BGP (目前唯一)
生活比喻 國內導航:從台北開車到高雄,要在意路況、距離、紅綠燈 (在意速度)。 國際航班:從台灣飛往美國,要考慮簽證、航權、政治因素 (在意政策與可達性)。

🍎BGP 生活化比喻

BGP 就像是國際外交官與國內郵差的結合:

  • AS (自治系統): 想像成一個「國家」或「大型跨國企業」。
  • eBGP (External BGP): 像是「外交官」。負責國與國之間(不同 ISP 或企業間)交換地圖資訊。「嘿,要去 Google 國,請走這條路」。
  • iBGP (Internal BGP): 像是「國內郵差」。當外交官拿到國外的地圖後,必須透過國內郵差告訴國內的所有郵局(路由器),讓大家知道怎麼把信寄出國。

🔑 關鍵知識:公有 vs 私有 AS Number

就像 IP 位址有分 Public (公網) 與 Private (內網) 一樣,AS Number 也有區分。私有 AS 僅能在企業內部或與 ISP 約定使用,不可在網際網路上廣播

類型 2-Byte Range (傳統) 4-Byte Range (新式) 用途類似於
Public AS (公有) 1 - 64511 1 - 4199999999 全球唯一的電話號碼 (+886...)
Private AS (私有) 64512 - 65534 4200000000 - 4294967294 公司內部分機 (Ext. 1234)

* 註:AS 0, 23456, 65535 等為保留用途。

二、運作原理 (Mechanism)

技術細節

BGP 是一種 路徑向量 (Path Vector) 協定,它不只看距離,更看「路徑屬性」(Attributes)。

  • 連線建立: 使用 TCP Port 179 建立可靠連線。
  • eBGP 行為: 預設 TTL 為 1 (直接相連)。當路由傳給鄰居 AS 時,會將自己的 AS 號碼加入 `AS_PATH`,並將 `Next-Hop` 改為自己。
  • iBGP 行為: 為了防止路由迴圈,iBGP 遵守 Split Horizon (水平分割) 規則:從一個 iBGP 鄰居學到的路由,不會再傳給另一個 iBGP 鄰居。
    這導致了擴展性問題: 必須所有路由器互連 (Full Mesh),或使用 Route Reflector (RR) 來打破此規則。
  • MBGP (Multiprotocol BGP): 標準 BGP 只能傳 IPv4。MBGP 擴充了能力,可以在同一個 BGP session 中傳遞 IPv6、MPLS VPN label、Multicast 等多種「位址族群 (Address Families)」。

三、架構視覺化 (Visuals)

以下展示 BGP 的三種關鍵架構場景:基礎對接、Full Mesh 的困境、以及 Route Reflector 的解決方案。

圖 1:eBGP 與 iBGP 的基本關係
graph LR subgraph AS_100 ["AS 100 (企業總部)"] R1(("R1
Edge")) --- R2(("R2
Core")) R2 --- R3(("R3
Core")) R1 -. "iBGP Session" .- R2 R2 -. "iBGP Session" .- R3 style R1 fill:#d4edda,stroke:#155724 style R2 fill:#d4edda,stroke:#155724 style R3 fill:#d4edda,stroke:#155724 end subgraph AS_200 ["AS 200 (ISP 服務商)"] ISP1(("ISP Router")) style ISP1 fill:#cce5ff,stroke:#004085 end R1 == "eBGP Session
(TTL=1)" ==> ISP1 linkStyle 4 stroke-width:4px,fill:none,stroke:red;

說明:跨越 AS 邊界使用 eBGP,AS 內部傳遞外部路由使用 iBGP。

圖 2:iBGP Full Mesh (沒有 RR 的混亂世界)
graph TD subgraph AS_300 ["AS 300 - iBGP Full Mesh"] A(("R_A")) --- B(("R_B")) A --- C(("R_C")) A --- D(("R_D")) B --- C B --- D C --- D style A fill:#fff3cd,stroke:#856404 style B fill:#fff3cd,stroke:#856404 style C fill:#fff3cd,stroke:#856404 style D fill:#fff3cd,stroke:#856404 end

說明:根據 iBGP Split Horizon 規則,若無 RR,所有路由器必須兩兩互連 (N*(N-1)/2),管理極其困難。

圖 3:Route Reflector (RR) 架構優化
graph TD subgraph AS_300_Optimized ["AS 300 - 使用 Route Reflector"] RR(("RR Server
Route Reflector")) Client1(("Client 1")) Client2(("Client 2")) Client3(("Client 3")) RR -. "反射路由" .- Client1 RR -. "反射路由" .- Client2 RR -. "反射路由" .- Client3 Client1 --- RR Client2 --- RR Client3 --- RR style RR fill:#f8d7da,stroke:#721c24,stroke-width:4px style Client1 fill:#d4edda,stroke:#155724 style Client2 fill:#d4edda,stroke:#155724 style Client3 fill:#d4edda,stroke:#155724 end

說明:所有 Client 只需與 RR 建立鄰居關係。RR 打破 Split Horizon 規則,將路由「反射」給其他 Client,大幅簡化架構。

四、實務應用場景 (Use Case)

場景一:企業申請自帶 IP (BYOIP) 對接 ISP (eBGP)

情境: 「快樂科技公司」是一家中型企業,因為業務擴張,決定向 TWNIC 申請自己的網段 (203.0.113.0/24) 和 AS 號碼 (AS 65001),並與 ISP (AS 3462) 建立連線。

graph LR subgraph Customer ["快樂科技 (AS 65001)"] CE(("企業路由器
Edge Router
192.0.2.2")) end subgraph ISP ["ISP 服務商 (AS 3462)"] PE(("ISP 路由器
PE Router
192.0.2.1")) end CE == "eBGP Session" ==> PE CE -- "廣告: 203.0.113.0/24" --> PE PE -- "接收: Default Route (0.0.0.0/0)" --> CE style CE fill:#d4edda,stroke:#155724 style PE fill:#cce5ff,stroke:#004085

  • 設定重點: 建立 eBGP Neighbor 並宣告 (Network) 自己的網段。
  • AS 選擇: 本案例 AS 65001 屬於 私有 AS 範圍,通常若是真實對外服務,需申請 Public AS。若僅對單一 ISP 或實驗性質,則使用 Private AS。
💻 ExtremeXOS eBGP 設定範例
# 1. 基礎介面設定 (假設 Port 1 接 ISP)
create vlan isp_link
configure vlan isp_link tag 100
configure vlan isp_link add port 1
configure vlan isp_link ipaddress 192.0.2.2/30
enable ipforwarding vlan isp_link

# 2. 啟動 BGP 並設定本地 AS (65001 - Private AS Example)
enable bgp
configure bgp as-number 65001
configure bgp routerid 192.0.2.2

# 3. 建立 eBGP 鄰居關係 (ISP AS 3462)
create bgp neighbor 192.0.2.1 remote-AS 3462
enable bgp neighbor 192.0.2.1

# 4. 宣告自己的網段 (需先有路由存在)
configure bgp add network 203.0.113.0/24
                

場景二:iBGP 內部核心路由優化 (Route Reflector)

情境: 企業內部有多個核心節點需要交換 BGP 路由。為了避免每台設備都要互聯 (Full Mesh) 造成管理災難,決定將 HQ 核心交換器設為 Route Reflector (RR),分公司設備設為 Client

  • AS Number: 全網皆為 AS 65000 (屬於 Private AS 範圍)。
  • 角色分配:
    • HQ Core (RR): 負責反射路由。IP: 10.0.0.1
    • Branch A (Client): 接收並傳送路由給 HQ。IP: 10.0.0.2
    • Branch B (Client): 接收並傳送路由給 HQ。IP: 10.0.0.3
graph TD subgraph AS_65000 ["AS 65000 (Private AS)"] HQ(("HQ Core
(RR Server)
10.0.0.1")) BR_A(("Branch A
(Client)
10.0.0.2")) BR_B(("Branch B
(Client)
10.0.0.3")) HQ -. "Reflects Routes" .- BR_A HQ -. "Reflects Routes" .- BR_B BR_A -- "iBGP Session" --- HQ BR_B -- "iBGP Session" --- HQ style HQ fill:#f8d7da,stroke:#721c24,stroke-width:4px style BR_A fill:#d4edda,stroke:#155724 style BR_B fill:#d4edda,stroke:#155724 end

💻 ExtremeXOS RR & Client 設定範例
# --- 設定 HQ Core (RR Server) ---
enable bgp
configure bgp as-number 65000
configure bgp routerid 10.0.0.1

# 建立 iBGP Neighbor (指向 Branch A)
create bgp neighbor 10.0.0.2 remote-AS 65000
enable bgp neighbor 10.0.0.2
# 關鍵指令:將此鄰居設為 Client,啟用反射功能
configure bgp neighbor 10.0.0.2 route-reflector-client

# 建立 iBGP Neighbor (指向 Branch B)
create bgp neighbor 10.0.0.3 remote-AS 65000
enable bgp neighbor 10.0.0.3
configure bgp neighbor 10.0.0.3 route-reflector-client


# --- 設定 Branch A (RR Client) ---
# Client 端不需要知道誰是 RR,只需當作一般 iBGP 設定即可
enable bgp
configure bgp as-number 65000
configure bgp routerid 10.0.0.2

# 建立指向 HQ 的連線
create bgp neighbor 10.0.0.1 remote-AS 65000
enable bgp neighbor 10.0.0.1
# 注意:Client 端不需要設定 route-reflector-client 指令
                

五、隨堂測驗 (Quiz)

1. 下列哪一個協定屬於 EGP (外部閘道協定)?

2. 為什麼在標準 iBGP 架構中(無 RR) 需要 Full Mesh 連線?

3. Route Reflector (RR) 的主要功能是什麼?

4. 關於 AS Number (自治系統號碼),下列敘述何者正確?

5. IGP (如 OSPF) 與 EGP (如 BGP) 的主要目標差異為何?