การตั้งค่า Equal Cost Multipath (ECMP) และ Policy Routing บน FortiGate

การทำ ECMP ด้วย Static Route บน FortiGate ต้องอาศัยค่าสองอย่างที่เท่ากันพร้อมกัน คือ Administrative Distance และ Priority หากค่าใดค่าหนึ่งยังต่างกันอยู่ FortiGate จะยังคงเลือกใช้เพียงเส้นทางเดียวเสมอ

อ่าน 12 ครั้ง
การตั้งค่า Equal Cost Multipath (ECMP) และ Policy Routing บน FortiGate

การตั้งค่า Equal Cost Multipath (ECMP) และ Policy Routing บน FortiGate

1. วัตถุประสงค์

บทความนี้มีจุดประสงค์เพื่อฝึกฝนการตั้งค่าการกระจายโหลดทราฟฟิกอินเทอร์เน็ตแบบ Equal Cost Multipath (ECMP) ระหว่างสองพอร์ต (port1 และ port2) บน Local-FortiGate รวมถึงการสร้าง Policy Route เพื่อบังคับให้ทราฟฟิก HTTPS วิ่งผ่านพอร์ตใดพอร์ตหนึ่งโดยเฉพาะ

โดยสรุปแล้วจะได้ฝึก 3 เรื่องหลัก คือ

  • การทำให้ Static Route สองเส้นทางมีสถานะ "เท่ากัน" (Equal Cost) เพื่อให้ FortiGate สามารถใช้งานทั้งสองเส้นทางพร้อมกันได้
  • การปรับอัลกอริทึมการกระจายโหลดของ ECMP ให้เหมาะสมกับสภาพแวดล้อมของ Lab ที่มีไคลเอนต์เพียงเครื่องเดียว
  • การสร้าง Policy Route เพื่อกำหนดเส้นทางเฉพาะให้กับทราฟฟิกประเภทหนึ่ง (ในที่นี้คือ HTTPS) โดยไม่กระทบกับทราฟฟิกประเภทอื่น

2. Configure Administrative Distance

ก่อนที่ FortiGate จะสามารถทำ ECMP ได้ เงื่อนไขแรกที่ต้องทำให้ตรงกันก่อนคือค่า Administrative Distance ของทั้งสอง Static Route ต้องเท่ากัน เพราะ FortiGate จะเลือกใช้เฉพาะเส้นทางที่มีค่า Distance ต่ำที่สุดเท่านั้น หากค่า Distance ต่างกัน เส้นทางที่มีค่าสูงกว่าจะไม่ถูกติดตั้งลงในตารางเส้นทาง (Routing Table) เลย

ขั้นตอนการตั้งค่ามีดังนี้

  1. เข้าสู่ระบบ Local-FortiGate GUI ด้วยชื่อผู้ใช้ admin และรหัสผ่าน password
  2. ไปที่เมนู Network > Static Routes
  3. ดับเบิลคลิกที่ Static Route ของ port2 เพื่อแก้ไข
  4. เปลี่ยนค่า Administrative Distance จากค่าเดิมเป็น 10 เพื่อให้เท่ากับค่า Distance ของ port1 ที่มีอยู่แล้ว
  5. กด OK เพื่อบันทึกการเปลี่ยนแปลง

จากนั้นให้ตรวจสอบตารางเส้นทางที่เมนู Dashboard > Network > Routing (เลือกมุมมองแบบ Static & Dynamic) จะพบว่าทั้ง Default Route ของ port1 และ port2 ปรากฏอยู่ในตารางพร้อมกัน โดยทั้งคู่มีค่า Distance เท่ากันที่ 10 ซึ่งเป็นเงื่อนไขเบื้องต้นที่ทำให้ ECMP เกิดขึ้นได้จริง

3. Change the ECMP Load Balancing Algorithm

โดยค่าเริ่มต้น FortiGate จะใช้อัลกอริทึม ECMP แบบ source IP address ในการกระจายโหลด ซึ่งวิธีนี้จะทำงานได้ดีเมื่อมีไคลเอนต์หลายเครื่องที่สร้างทราฟฟิกพร้อมกัน แต่ในสภาพแวดล้อมของ Lab นี้มีไคลเอนต์เพียงเครื่องเดียว (Local-Client) ทำให้ค่า Source IP มีเพียงค่าเดียวเสมอ ส่งผลให้ FortiGate เลือกใช้เพียงเส้นทางเดียวตลอดเวลา ไม่มีการกระจายโหลดเกิดขึ้นจริง

เพื่อแก้ปัญหานี้ จึงต้องเปลี่ยนวิธีคำนวณเป็นแบบ source and destination IP address แทน ซึ่งจะทำให้ตราบใดที่ทราฟฟิกมีปลายทาง (Destination) หลากหลาย FortiGate ก็จะสามารถกระจายโหลดข้ามทั้งสองเส้นทางได้

วิธีตั้งค่าผ่าน CLI มีดังนี้

  1. เข้าสู่ระบบ Local-FortiGate CLI ด้วยชื่อผู้ใช้ admin และรหัสผ่าน password
  2. ป้อนคำสั่งต่อไปนี้
 
config system settings
    set v4-ecmp-mode source-dest-ip-based
end
  1. เปิดเซสชัน CLI ของ Local-FortiGate ค้างไว้เพื่อใช้งานในขั้นตอนถัดไป

หลังจากตั้งค่านี้แล้ว เมื่อไคลเอนต์เข้าเว็บไซต์ปลายทางที่แตกต่างกันหลาย ๆ เว็บ ทราฟฟิกจะถูกกระจายไปยังทั้ง port1 และ port2 ตามคู่ของ IP ต้นทางและปลายทางที่ต่างกัน

4. Configure Priority

หลังจากตรวจสอบ Forward Traffic Log แล้วพบว่าทราฟฟิกทั้งหมดยังคงถูกส่งออกผ่าน port1 เพียงพอร์ตเดียว ทั้งที่ Distance ของทั้งสองเส้นทางเท่ากันแล้ว และปรับอัลกอริทึมเป็น source-destination แล้วก็ตาม สาเหตุคือยังมีอีกหนึ่งค่าที่ต้องพิจารณาเพิ่มเติม นั่นคือ Priority ของ Static Route

หลักการทำงานของ FortiGate คือ เมื่อสองเส้นทางไปยังปลายทางเดียวกันมีค่า Distance เท่ากัน ทั้งสองเส้นทางจะถูกเก็บไว้ในตารางเส้นทางพร้อมกัน แต่ถ้าค่า Priority ของทั้งสองเส้นทางยังต่างกันอยู่ FortiGate จะยังคงเลือกใช้เฉพาะเส้นทางที่มีค่า Priority ต่ำกว่าเพียงเส้นทางเดียวเท่านั้น (ค่ายิ่งต่ำยิ่งมีความสำคัญสูงกว่า) ในกรณีของ Lab นี้ port1 มีค่า Priority เท่ากับ 1 ในขณะที่ port2 ยังคงมีค่า Priority เท่ากับ 5 ซึ่งเป็นค่าที่ตั้งไว้ตั้งแต่บทความก่อนหน้าตอนสร้าง Second Default Route

ดังนั้น เพื่อให้เกิด ECMP ที่แท้จริง จำเป็นต้องปรับให้ค่า Priority ของ Static Route ทั้งสองเส้นทางเท่ากันด้วย โดยเข้าไปแก้ไขที่ Static Route ของ port2 ผ่านเมนู Network > Static Routes เปิดส่วน Advanced Options แล้วปรับค่า Priority ของ port2 ให้เท่ากับของ port1 (คือ 1) จากนั้นกด OK เพื่อบันทึก

สรุปคือ การทำ ECMP ด้วย Static Route ให้สำเร็จอย่างสมบูรณ์ ต้องปรับให้ค่าทั้งสองอย่างตรงกันพร้อมกัน คือ Administrative Distance เท่ากัน และ Priority เท่ากัน

5. Verify ECMP

หลังจากปรับค่าต่าง ๆ ครบถ้วนแล้ว ขั้นตอนถัดไปคือการตรวจสอบว่าตารางเส้นทางและการกระจายโหลดทำงานถูกต้องจริงหรือไม่

ขั้นแรก ตรวจสอบผ่าน CLI ด้วยคำสั่ง

get router info routing-table all

ผลลัพธ์ที่ถูกต้องควรแสดง Default Route (0.0.0.0/0) สองเส้นทางพร้อมกันภายใต้เครื่องหมาย S* (candidate default) คือเส้นทางผ่าน port1 ไปยัง 10.200.1.254 และเส้นทางผ่าน port2 ไปยัง 10.200.2.254 โดยทั้งคู่มีค่า Distance/Priority เท่ากันคือ [10/0]... [1/0] ซึ่งหมายความว่าทั้งสองเส้นทางถูกใช้งานพร้อมกันจริง

ขั้นต่อมา ใช้คำสั่ง sniffer เพื่อดักจับแพ็กเก็ตที่มีการเปิดการเชื่อมต่อใหม่ (SYN packet) บนพอร์ต 80

diagnose sniffer packet any 'not host 172.16.100.1 and not host 172.16.100.3 and tcp [13]&2==2 and port 80' 4

จากนั้นบน Local-Client ให้เปิดเบราว์เซอร์เข้าเว็บไซต์ทดสอบหลายเว็บ เช่น neverssl.com, testingmcafeesites.com และ eu.httpbin.org แล้วกลับมาหยุด sniffer ด้วย Ctrl+C เมื่อวิเคราะห์ผลลัพธ์จะพบว่า SYN packet บางส่วนออกทาง port1 และบางส่วนออกทาง port2 สลับกันไปตามปลายทางที่ต่างกัน ซึ่งยืนยันได้ว่า ECMP ทำงานถูกต้องแล้ว ทราฟฟิกถูกกระจายโหลดข้ามทั้งสองพอร์ตจริง

6. Configure a Policy Route for HTTPS Traffic

หลังจากตั้งค่า ECMP สำเร็จแล้ว ขั้นตอนถัดไปคือการสร้าง Policy Route เพื่อกำหนดให้ทราฟฟิกเฉพาะประเภท HTTPS (พอร์ต TCP 443) วิ่งผ่าน port1 เพียงเส้นทางเดียวเท่านั้น โดยไม่ให้ไปกระจายโหลดผ่าน ECMP เหมือนทราฟฟิกประเภทอื่น

การสร้าง Policy Route ทำได้โดยกำหนดเงื่อนไขและการกระทำดังนี้

  • Incoming interface: port3 (อินเทอร์เฟซที่รับทราฟฟิกจากไคลเอนต์)
  • Source Address: 10.0.1.0/24 (เครือข่ายของ Local-Client)
  • Destination Address: 0.0.0.0/0 (ทุกปลายทาง)
  • Protocol: TCP
  • Source ports: 1 - 65535
  • Destination ports: 443 - 443 (เฉพาะ HTTPS)
  • Action: Forward Traffic
  • Outgoing interface: port1
  • Gateway address: 10.200.1.254

เมื่อกรอกครบถ้วนแล้วให้กด OK เพื่อบันทึก Policy Route นี้ ผลลัพธ์คือทราฟฟิกที่มีปลายทางพอร์ต 443 (HTTPS) จากเครือข่าย 10.0.1.0/24 จะถูกบังคับให้วิ่งออกทาง port1 เสมอ ไม่ว่าตารางเส้นทางปกติหรือ ECMP จะกำหนดไว้อย่างไรก็ตาม เนื่องจาก Policy Route มีลำดับความสำคัญเหนือกว่า Routing Table ปกติ

7. Verify the Policy Route

การตรวจสอบว่า Policy Route ทำงานถูกต้องแบ่งออกเป็น 2 ส่วน คือตรวจสอบตาราง Policy Route และตรวจสอบพฤติกรรมทราฟฟิกจริง

ตรวจสอบตาราง Policy Route

ที่เมนู Dashboard > Network > Routing ให้ขยายเป็นแบบเต็มจอ แล้วเปลี่ยนมุมมองด้านขวาบนจาก Static & Dynamic เป็น Policy จะพบรายการ Policy Route ที่สร้างไว้ ระบุ From: port3, Destination: 0.0.0.0/0, Gateway IP: 10.200.1.254, Protocol: TCP, Action: Route

ตรวจสอบทราฟฟิก HTTPS

รัน sniffer เพื่อดักจับ SYN packet บนพอร์ต 443

diagnose sniffer packet any 'not host 172.16.100.1 and not host 172.16.100.3 and tcp [13]&2==2 and port 443' 4

จากนั้นเข้าเว็บไซต์ HTTPS ทดสอบ เช่น fortiguard.com และ support.fortinet.com ผลลัพธ์ที่ถูกต้องคือ SYN packet ทั้งหมดจะออกทาง port1 เพียงพอร์ตเดียวเท่านั้น ซึ่งยืนยันว่า Policy Route ทำงานถูกต้องกับทราฟฟิก HTTPS

ตรวจสอบทราฟฟิกที่ไม่ใช่ HTTPS

เพื่อยืนยันว่า Policy Route ไม่กระทบกับทราฟฟิกประเภทอื่น ให้รัน sniffer ดักจับพอร์ต 80 อีกครั้ง แล้วเข้าเว็บไซต์ HTTP ทดสอบ ผลลัพธ์ที่ได้คือทราฟฟิก HTTP (พอร์ต 80) ยังคงถูกกระจายโหลดข้ามทั้ง port1 และ port2 ตามปกติ ไม่ได้รับผลกระทบจาก Policy Route ที่สร้างไว้เฉพาะพอร์ต 443 แต่อย่างใด

นอกจากนี้ยังมีประเด็นที่ควรทราบเพิ่มเติมคือ Local-FortiGate ยังคงมี Link Health Monitor สำหรับ port1 และ port2 อยู่ ซึ่ง Health Monitor เหล่านี้ก็มีผลต่อ ECMP เช่นกัน กล่าวคือ หาก FortiGate ตรวจพบปัญหาในเส้นทางใดเส้นทางหนึ่ง Link Monitor จะทำการถอดเส้นทางนั้นออกจากตารางเส้นทางโดยอัตโนมัติ และทราฟฟิกทั้งหมดจะถูกส่งผ่านเส้นทางที่เหลืออยู่เพียงเส้นทางเดียวแทน ทำให้ระบบยังคงมีความสามารถในการสำรอง (Failover) ควบคู่ไปกับการกระจายโหลดแบบ ECMP

8. สรุปผล

จากบทความนี้ สามารถสรุปแนวคิดสำคัญที่ได้เรียนรู้เกี่ยวกับ ECMP และ Policy Routing บน FortiGate ได้ดังนี้

  • การทำ ECMP ด้วย Static Route บน FortiGate ต้องอาศัยค่าสองอย่างที่เท่ากันพร้อมกัน คือ Administrative Distance และ Priority หากค่าใดค่าหนึ่งยังต่างกันอยู่ FortiGate จะยังคงเลือกใช้เพียงเส้นทางเดียวเสมอ
  • อัลกอริทึมการกระจายโหลดของ ECMP มีให้เลือกหลายแบบ โดยค่าเริ่มต้นใช้ source IP ซึ่งเหมาะกับสภาพแวดล้อมที่มีไคลเอนต์หลายเครื่อง ส่วนแบบ source-destination IP จะเหมาะกับกรณีที่มีไคลเอนต์น้อยแต่ปลายทางหลากหลาย ควรเลือกอัลกอริทึมให้เหมาะกับลักษณะทราฟฟิกจริงในองค์กร
  • Policy Route เป็นเครื่องมือที่ช่วยให้สามารถกำหนดเส้นทางเฉพาะสำหรับทราฟฟิกบางประเภทได้อย่างละเอียด โดยไม่กระทบกับทราฟฟิกประเภทอื่นที่ยังคงใช้ ECMP หรือ Routing Table ปกติตามเดิม ทำให้เหมาะกับกรณีที่ต้องการควบคุมทราฟฟิกสำคัญ เช่น HTTPS ให้วิ่งผ่านเส้นทางที่กำหนดไว้แน่นอน
  • Link Health Monitor ยังคงทำงานร่วมกับ ECMP ได้ตามปกติ ช่วยเพิ่มความสามารถในการสำรองเส้นทาง (Failover) ให้กับระบบ หากเส้นทางใดเส้นทางหนึ่งมีปัญหา

โดยรวมแล้วบทความนี้ช่วยให้เข้าใจภาพรวมของการบริหารจัดการเส้นทางเครือข่ายบน FortiGate ทั้งในแง่ของการกระจายโหลดเพื่อใช้งานลิงก์อินเทอร์เน็ตทั้งสองเส้นทางอย่างคุ้มค่า และการควบคุมทราฟฟิกเฉพาะประเภทให้เป็นไปตามนโยบายที่องค์กรต้องการ ซึ่งเป็นทักษะที่สามารถนำไปประยุกต์ใช้กับการออกแบบเครือข่ายจริงที่มีลิงก์อินเทอร์เน็ตมากกว่าหนึ่งเส้นทางได้เป็นอย่างดี

อรรถกร

อรรถกร ทองคำชุม

บุคลากรผู้ร่วมสร้างสรรค์องค์กรแห่งการเรียนรู้ (KM) ผ่าน Blog Space NSTRU