ตัวอย่างการใช้ BGP Community บน Cisco — Part 1

การใช้ BGP community แบบที่เค้าเตรียมมาให้แล้ว

Nopnithi Khaokaew (Game)
4 min readNov 17, 2019

— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —

— — — — — — — — — — — — — — — — — — — — — — — -

ฝากคอร์ส Python for Network Automation ผมด้วยครับ

— — — — — — — — — — — — — — — — — — — — — — — -

สำหรับ Part 1 นี้จะเป็นตัวอย่างการใช้ BGP well-known community ได้แก่

  1. no-advertise = prefix จะไม่ถูก advertise ต่อ (ทั้ง iBGP และ eBGP)
  2. no-export = prefix จะไม่ถูก advertise ออกนอก AS (eBGP)
  3. local-as = prefix จะถูก advertise เฉพาะภายใน AS
  4. internet = prefix จะถูกบังคับ advertise ออกแม้โดน community อื่นห้าม
BGP network topology

Case 1: no-advertise

R1 ต้องการ advertise network 1.0.0.0/8 ไปให้ R2 แค่ตัวเดียว และห้ามไม่ให้ R2 advertise ต่อไปให้ใครอีก

Configuration บน R1

1. สร้าง Access List (ACL) เพื่อ identify เฉพาะ prefix 1.0.0.0/8

ip access-list extended NET_1
permit ip 1.0.0.0 0.255.255.255 any

2. สร้าง Route Map เพื่อ set community เป็น no-advertise

no-advertise คือ well-known community ที่บอกกับคนอื่นว่า “อย่า advertise ไปให้ peer ใด ๆ นะจ๊ะ” อะไรทำนองนั้น

route-map NO_ADV_1 permit 10
match ip address NET_1
set community no-advertise
!
route-map NO_ADV_1 permit 90

ส่วนบรรทัด permit 90 ถ้าเป็น programming ก็คือ else ซึ่งเป็นการบอกว่าถ้านอกเหนือจาก prefix 1.0.0.0/8 นั้นก็ปล่อยผ่านไปเฉย ๆ

3. สั่งให้ R1 ส่ง community (no-advertise) ออกไปให้ R2

router bgp 100
neighbor 12.1.1.2 send-community
neighbor 12.1.1.2 route-map NO_ADV1 out

ตรง policy direction นั้น ถ้าเราต้องการ apply policty บน local router (ตัวเราเอง) ให้ใช้ in แต่ที่ใช้ out เพราะ policy นี้จะถูกส่งออกไปยัง R2 นั่นเอง

4. ลอง Verify บน R2 ดู

จะเห็นว่า R2 ได้รับ comminuty เป็น no-advertise มากับ network 1.0.0.0/8 แล้ว ซึ่ง R2 จะไม่ advertise network นี้ให้ใครต่อ

R2# show ip bgp 1.0.0.0
BGP routing table entry for 1.0.0.0/8, version 18
Paths: (1 available, best # 1, table default, not advertised to any peer)
Not advertised to any peer
100
12.1.1.1 from 12.1.1.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, external, best
Community: no-advertise

Case 2: no-export

R5 advertise network 5.0.0.0/8 ไปให้ R3 โดย R3 สามารถ advertise ต่อไปให้ neighbor ใน Local AS ได้ แต่ห้าม advertise ออกไปนอก AS

Configuration บน R5

  1. สร้าง Prefix List เพื่อ identify เฉพาะ prefix 5.0.0.0/8

คราวนี้เปลี่ยนจาก ACL มาเป็น Prefix List มั่งละกัน

ip prefix-list NET_5 permit 5.0.0.0/8

2. สร้าง Route Map เพื่อ set community เป็น no-export

no-export คือ well-known community ที่บอกกับคนอื่นว่า “อย่า advertise ไปให้ peer ที่อยู่นอก AS นะจ๊ะ”

route-map NO_EXP_5 permit 10
match ip address prefix-list NET_5
set community no-export
!
route-map NO_EXP_5 permit 90

3. สั่งให้ R5 ส่ง community (no-export) ออกไป

router bgp 500
neighbor 35.1.1.3 send-community
neighbor 35.1.1.3 route-map NO_EXP_5 out

4. ลอง Verify ดู

จะเห็นว่า R1 ได้รับ comminuty เป็น no-advertise มาพร้อมกับ network 1.0.0.0/8 แล้ว ซึ่ง R2 จะไม่ advertise network นี้ให้ใครต่อ

R3# show ip bgp 5.0.0.0BGP routing table entry for 5.0.0.0/8, version 8
Paths: (1 available, best # 1, table default, not advertised to EBGP peer)
Advertised to update-groups:
10
500
35.1.1.5 from 35.1.1.5 (5.5.5.5)
Origin IGP, metric 0, localpref 100, valid, external, best
Community: no-export

พบว่า R3 ได้รับ no-export community มากับ network 5.0.0.0/8

R2# show ip bgp 5.0.0.0BGP routing table entry for 5.0.0.0/8, version 19
Paths: (1 available, best # 1, table default, not advertised to EBGP peer)
Not advertised to any peer
500
23.1.1.3 from 23.1.1.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, internal, best
Community: no-export

ส่วน R2 ก็เหมือนกัน ซึ่งรับมาจาก R3 (R3 advertise ให้ เพราะอยู่ใน AS เดียวกัน)

R4# show ip bgp 5.0.0.0% Network not in tableR1# show ip bgp 5.0.0.0% Network not in table

แน่นอนว่าทั้ง R4 หรือ R1 จะไม่รู้จัก network 5.0.0.0/8 เพราะไม่มีใคร advertise ผ่าน eBGP มาให้เลย

Case 3: local-as

R3 advertise network 3.0.0.0/8 ออกไปเฉพาะ AS ของตัวเองเท่านั้น

Configuration บน R3

1. สร้าง Route Map เพื่อ set community เป็น local-as

local-as คือ well-known community ที่บอกกับตัวเองว่า “ให้ advertise แค่ใน AS ของเราเท่านั้นนะจ๊ะ”

route-map LOCAL_ADV permit 10
set community local-as

2. กำหนดให้ R3 ส่ง community (local-as) ออกไปพร้อมกับ network 3.0.0.0/8

router bgp 230
network 3.0.0.0 route-map LOCAL_ADV
neighbor 23.1.1.2 send-community

คงไม่ต้อง verify แล้วเนอะ เพราะตอนนี้ R3 จะ advertise network 3.0.0.0/8 ให้เฉพาะภายใน AS (iBGP neighbor) เท่านั้น และแน่นอนว่า network นี้จะอยู่แค่ภายใน AS 230 เท่านั้น ไม่ให้ advertise ออกไปข้างนอก

Case 4: internet

R2 จะแหกกฎจาก Case 1 ที่ถูก no-advertise community จาก R1 ห้ามไม่ให้ advertise network ต่อไปให้ใคร

Configuration บน R2

1. สร้าง Access List (ACL) เพื่อ identify เฉพาะ prefix 1.0.0.0/8

ip access-list extended NET_1
permit ip 1.0.0.0 0.255.255.255 any

2. สร้าง Route Map เพื่อ set community เป็น internet

internet คือ well-known community ที่บอกว่า network นี้สามารถ advertise ไปให้ใครก็ได้

route-map ADV_1 permit 10
match ip address NET_1
set community internet

3. บอกให้ R2 เอา community (internet) override community (no-advertise) กับ network ที่รับมาจาก R1

router bgp 230
neighbor 12.1.1.1 route-map ADV_1 in

แม้ R1 จะส่ง no-advertise community มาให้ R2 เพื่อบอก R2 ว่าห้าม advertise network ดังกล่าวให้คนอื่น แต่ตอนนี้ R2 ก็เอา internet community มา override ทับไปบน network ใด ๆ ก็ตามที่รับมาจาก R1 ดังนั้น R2 จะ advertise network 1.0.0.0/8 ไปให้คนอื่นได้แล้ว

— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —

--

--

Nopnithi Khaokaew (Game)

Cloud Solutions Architect & Hobbyist Developer | 6x AWS Certified, CKA, CKAD, 2x HashiCorp Certified (Terraform, Vault), etc.