AI
BGP หรือ Border Gateway Protocol เนี่ย สมัยผมทำร้านเน็ตยุคแรกๆ ไม่ค่อยได้ยุ่งเท่าไหร่ เพราะมันเป็นการคุยกันระหว่างผู้ให้บริการอินเทอร์เน็ต (ISP) แต่ปัจจุบันนี้ Cloud Computing มาแรง, Hybrid Cloud เริ่มเยอะ, การเชื่อมต่อระหว่าง Data Center สำคัญขึ้น BGP เลยกลับมามีบทบาทมากขึ้นไงน้อง
BGP มันเป็น Protocol ที่ใช้ "ประกาศเส้นทาง" ในอินเทอร์เน็ตระดับโลก พูดง่ายๆ คือ Router แต่ละตัวจะ "บอก" เพื่อนบ้านว่า "ถ้าจะไปที่ Network นี้ ให้มาทางฉันนะ" ทำให้ข้อมูลวิ่งไปถึงปลายทางได้อย่างถูกต้องและรวดเร็ว
ถ้าไม่มี BGP อินเทอร์เน็ตก็คงเหมือนถนนที่ไม่มีป้ายบอกทาง คิดดูสิว่าจะวุ่นวายขนาดไหน
Autonomous System (AS) ก็เหมือน "อาณาจักร" ในโลกอินเทอร์เน็ต แต่ละ AS จะมี Network ของตัวเอง และมีนโยบายการ Routing ที่เป็นอิสระ AS แต่ละแห่งจะมี AS Number (ASN) เป็นเหมือน "หมายเลขประจำตัว" ของอาณาจักรนั้นๆ
สมัยก่อนตอนผมเริ่มทำร้านเน็ต ผมก็งงๆ กับ ASN นี่แหละ แต่พอเข้าใจว่ามันเหมือนเบอร์โทรศัพท์ของแต่ละ ISP ก็เริ่ม Get ละ
BGP มันมี 2 แบบหลักๆ คือ iBGP (Internal BGP) กับ eBGP (External BGP)
eBGP นี่แหละที่ทำให้ Internet มันเชื่อมต่อกันได้หมด
BGP จะประกาศ "Prefixes" ซึ่งก็คือช่วง IP Address ที่ AS นั้นๆ ดูแลอยู่ พร้อมกับ "Attributes" ที่เป็นข้อมูลเพิ่มเติมเกี่ยวกับเส้นทางนั้นๆ เช่น AS Path (เส้นทางที่ Prefix นี้เดินทางผ่าน AS อะไรมาบ้าง) Weight, Local Preference, MED (Multi Exit Discriminator) ฯลฯ
Attributes นี่แหละที่ทำให้ BGP มัน "ฉลาด" เพราะ Router สามารถใช้ Attributes เหล่านี้ในการตัดสินใจเลือกเส้นทางที่ดีที่สุดได้
การใช้งาน BGP จริงๆ จังๆ ต้องมีความรู้เรื่อง Network พอสมควรเลยนะน้อง แต่หลักการมันไม่ได้ยากอย่างที่คิด
ขั้นแรกคือการ "สร้างเพื่อนบ้าน" (Neighbors) ให้ Router ของเรา Router จะต้องรู้ว่า Router ตัวไหนบ้างที่มันจะคุยด้วย BGP
ตัวอย่าง Config (Cisco):
router bgp 65001
neighbor 192.168.1.1 remote-as 65002
neighbor 192.168.1.1 update-source Loopback0
โค้ดข้างบนบอกว่า Router นี้มี ASN คือ 65001 และมี Neighbor คือ 192.168.1.1 ซึ่งมี ASN เป็น 65002 และใช้ Loopback0 เป็น Source IP ในการคุย BGP
หลังจากสร้าง Neighbors แล้ว เราก็ต้อง "ประกาศ" Network ของเราให้ Neighbors รู้
ตัวอย่าง Config (Cisco):
router bgp 65001
network 10.0.0.0 mask 255.255.255.0
โค้ดข้างบนบอกว่า Router นี้จะประกาศ Network 10.0.0.0/24 ให้ Neighbors รู้
BGP มัน Powerful ตรงที่เราสามารถ "กรอง" เส้นทางที่เราได้รับมา หรือ "ปรับแต่ง" เส้นทางที่เราจะประกาศออกไปได้
ตัวอย่าง: เราอาจจะไม่อยากรับ Prefix ที่มี AS Path ยาวเกินไป หรือเราอาจจะอยากให้ Traffic ออกจาก AS ของเราทาง Link ที่เรากำหนด
เรื่องพวกนี้ซับซ้อนหน่อย ต้องศึกษาเรื่อง Route Maps, Prefix Lists, AS Path Filters เพิ่มเติม
สมัยผมทำร้านเน็ตเคยเจอเคสลูกค้า Config BGP ผิดพลาด ทำให้ Traffic วิ่งวนไปวนมาใน AS ของตัวเอง แก้กันหัวปั่นเลย
ดูวิดีโอเพิ่มเติมเกี่ยวกับBgp Routing Protocol Explained:
BGP ไม่ได้เป็น Protocol เดียวที่ใช้ในการ Routing มันยังมีทางเลือกอื่นๆ อีก เช่น OSPF (Open Shortest Path First), RIP (Routing Information Protocol)
แต่ Protocol พวกนี้ส่วนใหญ่จะใช้ภายใน AS เดียวกัน (Interior Gateway Protocol - IGP) ไม่เหมาะกับการ Routing ระหว่าง AS
ลองดูตารางเปรียบเทียบ:
| Protocol | ประเภท | Scalability | Complexity | Use Case |
|---|---|---|---|---|
| BGP | Exterior Gateway Protocol (EGP) | สูง (Internet Scale) | สูง | Routing ระหว่าง AS |
| OSPF | Interior Gateway Protocol (IGP) | ปานกลาง (ภายใน AS) | ปานกลาง | Routing ภายใน AS |
| RIP | Interior Gateway Protocol (IGP) | ต่ำ | ต่ำ | Network ขนาดเล็ก |
จะเห็นว่า BGP เหมาะกับ Network ขนาดใหญ่ที่มีความซับซ้อนสูง แต่ก็ต้องแลกมาด้วยความยากในการ Config และ Maintenance
ถ้าอยากรู้เรื่อง Network เพิ่มเติม แวะไปอ่าน SiamCafe Blog ได้นะน้อง มีบทความดีๆ เยอะเลย
BGP เป็นเรื่องที่ต้องใช้เวลาศึกษาและทำความเข้าใจ แต่ถ้าเข้าใจหลักการแล้ว จะช่วยให้เราจัดการ Network ขนาดใหญ่ได้อย่างมีประสิทธิภาพ
อย่าลืมแวะไปอ่านบทความอื่นๆ ใน SiamCafe Blog ด้วยนะ! มีเรื่อง IT สนุกๆ อีกเพียบ
เอาล่ะน้องๆ มาถึงส่วนสำคัญที่เราจะมาคุยกันถึงเรื่อง Best Practices หรือเคล็ดลับที่ผมสั่งสมมาตลอด 28+ ปี ในวงการ IT โดยเฉพาะเรื่อง BGP เนี่ย บอกเลยว่าไม่ใช่แค่เซ็ตอัพให้มันทำงานได้ แต่ต้องทำให้มันทำงานได้ดี เสถียร และปลอดภัยด้วย
สมัยผมทำร้านเน็ต SiamCafe เนี่ย เรื่องเน็ตเวิร์คมันสำคัญสุดๆ เพราะถ้าเน็ตล่ม ลูกค้าก็หายหมด ดังนั้นเรื่อง BGP นี่ผมให้ความสำคัญมากๆ ต้องคอยปรับ คอยจูน ให้มันเข้ากับสถานการณ์ตลอดเวลา
คิดง่ายๆ Route Filtering ก็เหมือนยามหน้าประตูบ้าน ที่คอยสกรีนว่าใครจะเข้าออกได้บ้าง ในโลกของ BGP มันคือการที่เรากำหนดว่าเราจะรับ route อะไรบ้าง และจะประกาศ route อะไรออกไปบ้าง
สมัยก่อนผมเคยเจอเคสที่ router ดันไปรับ route ที่ผิดพลาดเข้ามา ทำให้ network ล่มทั้งร้าน! ตั้งแต่นั้นมา ผมเลยเน้นย้ำเรื่อง Route Filtering มากๆ ใครไม่รู้จัก ผมจับมาอบรมใหม่หมด SiamCafe Blog มีเขียนเรื่องนี้ไว้ด้วยนะ ลองไปอ่านดู
! Example Route Filter
ip prefix-list ALLOW_MY_ROUTES seq 5 permit 103.x.x.0/24
route-map EXPORT_TO_ISP permit 10
match ip address prefix-list ALLOW_MY_ROUTES
! Apply route-map to BGP neighbor
router bgp 65001
neighbor x.x.x.x route-map EXPORT_TO_ISP out
AS Path Prepending เนี่ย มันคือการที่เรา "แกล้ง" เพิ่ม AS number ของเราเข้าไปใน AS Path เพื่อให้ router อื่นๆ มองว่าเส้นทางของเรา "ยาว" กว่าเส้นทางอื่นๆ ทำให้ traffic ไม่วิ่งมาทางเรา (หรือวิ่งมาน้อยกว่า)
คิดภาพง่ายๆ เหมือนเรามีถนนสองสาย ถนนสายแรกสั้น ตรง แต่รถติด ส่วนถนนสายที่สองยาวกว่า แต่รถไม่ติด เราก็อยากให้คนไปใช้ถนนสายที่สองมากกว่าใช่ไหม? AS Path Prepending ก็ช่วยให้เราทำแบบนั้นได้
! Example AS Path Prepending
router bgp 65001
neighbor x.x.x.x route-map SET_AS_PATH out
route-map SET_AS_PATH permit 10
set as-path prepend 65001 65001 65001
BGP Communities เนี่ย มันคือ tag เล็กๆ ที่เราใส่ไปกับ route เพื่อบอกให้ router อื่นๆ รู้ว่าเราอยากให้เขาทำอะไรกับ route นั้นๆ
ยกตัวอย่างเช่น เราอาจจะใช้ BGP Community เพื่อบอกให้ ISP ของเรา ไม่ต้องประกาศ route ของเราออกไปให้ใครเลย หรือจะบอกให้ ISP ของเรา ใช้ preference ต่ำสุดสำหรับ route ของเราก็ได้
! Example BGP Community
router bgp 65001
neighbor x.x.x.x route-map SET_COMMUNITY out
route-map SET_COMMUNITY permit 10
set community 65001:100
! หมายเหตุ: 65001:100 เป็น Community ที่กำหนดขึ้นเอง
BGP Dampening เนี่ย เอาไว้จัดการกับเส้นทางที่ขึ้นๆ ลงๆ บ่อยๆ (flapping routes) มันจะ "ลงโทษ" เส้นทางเหล่านั้น โดยการลดความน่าเชื่อถือลง
แต่! Dampening มันเหมือนดาบสองคม ถ้าตั้งค่าไม่ดี มันอาจจะทำให้เส้นทางที่ปกติ กลายเป็นเส้นทางที่ไม่น่าเชื่อถือไปเลยก็ได้ ดังนั้นต้องระวังมากๆ ก่อนจะใช้
มันขึ้นอยู่กับ use case ของเรา ถ้าเราต้องการ routing ที่ละเอียดมากๆ ต้องการรู้ทุกเส้นทางบน internet เราก็ต้องรับ Full Table แต่ถ้าเราแค่ต้องการออก internet ได้ เราก็ใช้แค่ Default Route ก็พอ
มีหลายสาเหตุครับ Firewall บล็อค, IP Address ผิด, AS Number ไม่ตรงกัน, Authentication Failure (ถ้ามี), หรือ MTU size ไม่ match กัน ลองไล่เช็คดูทีละข้อ
ลองปรับ timers ดูครับ แต่ระวัง! การปรับ timers ต้องทำด้วยความระมัดระวัง เพราะมันอาจจะส่งผลกระทบต่อ stability ของ network ได้ นอกจากนี้ลองดูเรื่อง iBGP scaling ด้วย Route Reflector หรือ Confederation
BGP เป็น protocol ที่ซับซ้อน แต่ก็ทรงพลังมากๆ ถ้าเราเข้าใจหลักการทำงานของมัน และรู้จักใช้ tools ต่างๆ ที่ BGP มีให้ เราก็จะสามารถสร้าง network ที่เสถียรและมีประสิทธิภาพได้
อย่าลืมว่า BGP ไม่ใช่แค่เรื่องของ configuration แต่มันคือเรื่องของการทำความเข้าใจ network ของเรา และ network ของคนอื่นด้วย iCafeForex ผมก็ใช้ BGP นี่แหละ เชื่อมต่อหลายๆ สาขาเข้าด้วยกัน