บทที่ 31 · Advanced

iBGP & Route Reflector Lab

SW1 · SW2 · SW3 อยู่ใน AS 65000 เดียวกัน — ต่อกันเป็นสาย SW1–SW2–SW3 (SW1 กับ SW3 ไม่ได้ต่อตรง) OSPF area 0 ถูกตั้งไว้ให้แล้ว ทุก Loopback0 เห็นกันหมด งานของคุณคือตั้ง iBGP peer บน Loopback0 แล้วให้ SW1 ประกาศ LAN 172.16.10.0/24 เข้า BGP — จะเจอว่า SW3 ไม่เห็น route นั้นทั้งที่ SW2 เห็น (กฎ iBGP split-horizon) แล้วแก้ด้วย full-mesh หรือ Route Reflector (ค่าที่ต้องตั้งดูได้จากป้ายด้านล่าง)

SW1 · Lo0 1.1.1.1 · LAN 172.16.10.0/24 SW2 · Lo0 2.2.2.2 (ตัวกลาง / RR ได้) SW3 · Lo0 3.3.3.3 AS 65000 · OSPF area 0 พร้อมใช้

Topology — สถานะสด

Terminal

<SW1>

คำสั่งอ้างอิง — คลิกเพื่อแทรกลงเทอร์มินัลของอุปกรณ์ที่กำลังเลือกอยู่

รองรับ system-view, bgp 65000, router-id, peer <ip> as-number 65000, peer <ip> connect-interface LoopBack0 (สอง คำสั่งนี้อยู่ใน bgp view), ipv4-family unicastnetwork <ip> <mask> / peer <ip> enable / peer <ip> reflect-client / peer <ip> next-hop-local (สาม คำสั่งหลังอยู่ใน address-family view), undo, quit/return และ display bgp peer / display bgp routing-table / display ip routing-table / display current-configuration — interface + OSPF ตั้งไว้ให้แล้ว โฟกัสที่ BGP — กด Tab เพื่อเติมคำสั่ง หรือ ? เพื่อดูตัวเลือก

อ้างอิงจาก Huawei S5700 & S6700 V200R022 Configuration Guide – IP Unicast Routing ("Configuring BGP Peers", "Configuring a BGP Route Reflector")

สรุปท้ายบท — เข้าใจภาพรวม

บทนี้แก้ปัญหาอะไร

eBGP (บท 18) เชื่อมระหว่าง AS — แต่ภายใน AS เดียวที่มี BGP router หลายตัว (เช่นมี edge eBGP หลายจุด, MPLS PE, spine/leaf ที่ไม่ใช้ EVPN) ตัวเหล่านั้นต้องแลก prefix กันด้วย iBGP iBGP มีกฎ split-horizon: route ที่เรียนมาจาก iBGP peer จะไม่ถูกส่งต่อให้ iBGP peer อื่น — จึงต้องทำ full-mesh (n(n-1)/2 sessions) หรือใช้ Route Reflector ให้ตัวกลางสะท้อน route ระหว่าง client

ใช้เมื่อไหร่ · ไม่ควรใช้เมื่อไหร่

  • ใช้: มี BGP router มากกว่าหนึ่งตัวใน AS เดียว และต้องแชร์ external / customer prefix กันภายใน
  • RR: iBGP เกิน ~4–5 ตัว full-mesh เริ่มไม่ไหว (จำนวน session โตแบบกำลังสอง) → ยก 1–2 ตัวเป็น RR
  • ไม่ต้องใช้: มี BGP แค่ตัวเดียวใน AS, หรือ routing ภายในใช้ OSPF/IS-IS พอแล้ว — iBGP ไม่จำเป็น
  • RR ช่วยเฉพาะ client-to-client — non-client ยังต้อง mesh กันเอง

จุดที่คนมักพลาด

  • peer <ip> as-number ของ iBGP ต้องเป็น AS เดียวกับตัวเอง — ใส่ AS ต่างเมื่อไหร่กลายเป็น eBGP
  • peer อยู่บน Loopback ต้องสั่ง peer <ip> connect-interface LoopBack0 ทั้งสองฝั่ง ไม่งั้น TCP source เป็น IP ของ interface ที่วิ่งออก → ปลายทางไม่รับ session ไม่ขึ้น
  • Loopback ของ peer ต้อง reachable ผ่าน IGP ก่อน (บทนี้ OSPF ตั้งไว้ให้) — ไม่มี IGP ก็ตั้ง static route ไปหา loopback
  • reflect-client / next-hop-local อยู่ใน ipv4-family unicast view — ไม่ใช่ bgp view (ต่างจาก peer as-number / connect-interface)
  • iBGP ไม่เปลี่ยน next-hop — SW3 เห็น route ด้วย next-hop เดิม (1.1.1.1) ต้องมี route ไปหา 1.1.1.1 ด้วย ถ้า next-hop เป็น IP ของ eBGP peer ที่ไม่อยู่ใน IGP ต้อง peer <ip> next-hop-local ที่ตัวส่ง/RR
  • เปิด RR แล้ว full-mesh ไม่ได้หายไปหมด — ที่ RR ช่วยคือระหว่าง client เท่านั้น

คำสั่งในบทนี้ — ใช้ทำอะไร

peer <ip> as-number 65000
ประกาศ iBGP neighbor (AS = ของตัวเอง)
peer <ip> connect-interface LoopBack0
ให้ BGP source TCP จาก Loopback0 (บังคับเมื่อ peer เป็น loopback)
ipv4-family unicast
เข้า address-family view เพื่อตั้ง network / policy
network <addr> <mask>
ประกาศ prefix ที่มีใน routing table เข้า BGP
peer <ip> reflect-client
(ใน af view) ทำให้ peer นั้นเป็น RR client → RR จะสะท้อน route ให้
peer <ip> next-hop-local
(ใน af view) เขียน next-hop เป็นตัวเองก่อนส่งให้ peer นั้น
display bgp routing-table
ดู prefix ใน BGP — *>i = valid/best/internal, ดู NextHop + LocPrf

เชื่อมกับบทอื่น

  • บท 18 · eBGP — ระหว่าง AS; iBGP คือฝั่งภายใน AS เดียวกัน
  • บท 5 · OSPF — IGP ที่ทำให้ Loopback ของ iBGP peer เห็นกัน
  • บท 20 · VXLAN EVPN — ใช้ iBGP + RR เป็น control plane ของ fabric