เชื่อว่าหลายคนเคยเจอสถานการณ์แบบนี้ครับ คือเน็ตทั้งออฟฟิศอืดขึ้นมาเฉย ๆ พอไล่ดูจริง ๆ ก็เพราะมีบางเครื่องดูด Banwidth ไปเกือบหมด ไม่ว่าจะเป็นเครื่องที่กำลังโหลดไฟล์ก้อนใหญ่ อัปคลิปขึ้นคลาวด์ หรือบางทีก็ผู้ใช้ที่ต่อ VPN เข้ามาแล้วเปิด Streaming ทิ้งไว้ ส่งผลคือคนอื่นทั้งวงพลอยช้าไปด้วย
ทางแก้ที่ตรงจุดที่สุดคือ “จำกัดความเร็วเป็นรายเครื่อง” ให้ทุกคนได้เพดานเท่า ๆ กัน ใครจะโหลดหนักแค่ไหนก็ไม่ล้ำเส้นไปเบียดคนอื่น บน FortiGate เครื่องมือที่ตอบโจทย์นี้ตรง ๆ คือ Per-IP Shaper ซึ่งเป็นหนึ่งในชุดความสามารถของ Traffic Shaping
บทความนี้ผมจะพาทำตั้งแต่ต้นจนจบ ทำผ่านหน้าเว็บ (GUI) เป้าหมายของงานนี้คือ จำกัดให้ผู้ใช้แต่ละ IP ใช้อินเทอร์เน็ตได้ไม่เกิน 5 Mbps ต่อคน ใครพอมีพื้น Network อยู่บ้าง ทำตามได้เลยครับ
*สิ่งที่ต้องมี*
- FortiGate ที่รัน FortiOS v7.x ขึ้นไป (ผมใช้ v7.6.5 build3651 (Mature) ตอนเขียนบทความนี้)
- มี Firewall Policy ที่ปล่อย Traffic เส้นที่จะคุมอยู่แล้ว (พูดง่ายๆ คือเครื่องที่จะคุมต้องเล่นเน็ตได้อยู่ก่อน) เพราะ Traffic Shaping จะทำงานทับบน Traffic ที่ถูกอนุญาตไว้แล้วเท่านั้น
## รู้จัก Shaper สามแบบก่อนสั้นๆ
ก่อนลงมือ ขอเล่าให้เห็นภาพรวมก่อนครับ FortiGate มีเครื่องมือคุม Bandwidth อยู่ 3 แบบ เลือกใช้ให้ถูกงานจะประหยัดเวลาไปได้เยอะ:
Shared Shaper — เพดานก้อนเดียวที่ทุกคนในเงื่อนไขมาแชร์กัน เหมาะกับงาน “จำกัดรวม” เช่น ทั้งแผนกห้ามเกิน 50 Mbps
Per-IP Shaper — เพดานแยกรายเครื่อง ทุก IP ได้คนละเท่ากัน ไม่หารแบ่ง เหมาะกับงาน “‘ดูรายคนแบบเท่ากัน” ซึ่งคือตัวที่เราจะทำในบทความนี้
Traffic Shaping Profile — แบ่ง Traffic เป็น Class ตามลำดับความสำคัญ เหมาะกับงาน QoS เต็มรูปแบบที่มีหลายระดับ
หลายคนสับสนระหว่าง Shared กับ Per-IP แล้วเผลอเลือกผิด ผลคือคนทั้งวงมาหารเพดานก้อนเดียวกันจนช้ายกแผง วิธีจำง่ายๆ คือ ถ้าอยากให้ “แต่ละคน” ได้เท่ากัน ให้ใช้ Per-IP เสมอครับ ถ้าพร้อมแล้วเราทำตามไปด้วยกันแบบ Step by Step เลยนะครับ
Step1: ไปที่เมนู Traffic Shaping
ไปที่เมนู Policy & Objects > Traffic Shaping ด้านบนจะมี 3 แท็บ คือ Traffic Shaping Policy, Traffic Shaper และ Traffic Shaping Profile ให้เราเลือกไปที่แท็บ Traffic Shaper และมุมขวาบนสลับมุมมองเป็น Per-IP ไว้เลยได้เลยครับ

Step 2: สร้าง Per-IP Shaper
กด Create new เพื่อสร้าง Traffic Shaper

ในช่อง Name ก็สามารถกำหนดชื่อที่เราเข้าใจได้ ส่วนที่เราเปิดใช้จริงๆคือ Maximum bandwidth ในตัวอย่างจะทำเป็น 5 Mbps นะครับ ซึ่งกรอกลงไปเป็น 5000 ได้เลยเพราะหน่วยเป็น kpbs ในส่วนอื่นๆ เราจะไม่ได้เปิดใช้งานนะครับ จากนั้นกด OK เพื่อยืนยันการตั้งค่าได้เลยครับ

พอบันทึกเสร็จจะเห็นบรรทัด PerIP-5Mbps โผล่ในตาราง คอลัมน์ Max Bandwidth ขึ้น 5 Mbps สังเกตว่าหน้าชื่อจะมีจุดสีส้มอยู่ อันนี้ไม่ใช่ Error นะครับ มันแค่บอกว่า “Shaper ตัวนี้ยังไม่มีใครเรียกใช้” ซึ่งก็จริง เพราะเรายังไม่ได้ผูกมันเข้ากับ Policy เดี๋ยวพอทำขั้นต่อไปเสร็จ จุดนี้จะหายไปเอง

Step 3: สร้าง Traffic Shaping Policy แล้วผูก Shaper เข้าไป
ไปที่แท็บ Traffic Shaping Policy แล้วกด + Create new ก

รอกส่วน “If Traffic Matches” (เงื่อนไขจับคู่) และส่วน “Then” (จะทำอะไร) ตามนี้ ในที่นี้ตัวอย่างจะเป็นการทดสอบการใช้ VPN ออก Internet นะครับ และในส่วน Then ให้เรากดเปิด Apply Shaper ขึ้นมาและกด เปิด Per-IP shaper จากนั้นเลือก Shaper ที่เราสร้างไว้จาก Step ที่ 2 ได้เลยครับ จากนั้นกด OK เพื่อยืนยันการตั้งค่า

เราก็จะได้ Traffic Shaping Policy มาครับ

Step 4: ตรวจสอบการทำงาน
เอาเครื่องที่อยู่ในเงื่อนไข (วง LAN หรือเครื่องที่ต่อ VPN เข้ามา) เปิด fast.com หรือ speedtest.net แล้ววัดเทียบกัน 2 รอบ ก่อน–หลังเปิด Policy ผลที่ได้ในงานนี้ชัดเจนมาก
ก่อนเปิด Traffic Shaping Policy ผมได้ความเร็ว Download อยู่ที่ 15 Mbps (จาก fast.com)

หลังเปิด Traffic Shaping Policy ผมได้ความเร็ว Download อยู่ที่ 4.7 Mbps
ได้ 4.7 ไม่ใช่ 5 เป๊ะๆ ไม่ต้องตกใจครับ เป็นเรื่องปกติ เพราะมี Overhead ของ TCP บวกกับการ Encapsulate ของ VPN และวิธีนับของตัวเครื่องมือวัดเอง ตัวเลขที่แกว่งอยู่ราวๆ 4.5–4.8 ถือว่าตรงตามที่ตั้งแล้วครับ

กลับไปที่แท็บ Traffic Shaper ขณะกำลังวัดความเร็ว จะเห็น Bandwidth Utilization ขยับ, Dropped Bytes ค่อยๆ เพิ่ม และคอลัมน์ Ref. ขึ้นเลข 1 (แปลว่ามี Policy เรียกใช้แล้ว จุดสีส้มเมื่อกี้หายไปเรียบร้อย)

บน CLI ของ FortiGate ก็สามารถตรวจสอบได้นะครับใช้ Command: diagnose firewall shaper per-ip-shaper list ได้เลยครับ
- maximum-bandwidth 625 KB/sec — คูณ 8 ได้ 5000 kbps = 5 Mbps ตรงตามที่ตั้ง (FortiGate รายงานเป็น KB/sec ก็เลยดูแปลกตานิดนึง)
- addr=172.16.10.2 — IP ของ Client ที่กำลังโดนคุม พร้อม bps ปัจจุบันและจำนวน Session
- packets dropped / bytes dropped — มีค่าเพิ่มขึ้น แปลว่า FortiGate กำลัง Drop Packet ส่วนเกินจริงๆ นี่แหละหลักฐานว่า Shaper ทำงาน

Per-IP Shaper ยังประยุกต์ต่อได้อีกเยอะครับ ถ้าอยากคุมเพดานรวมของทั้งแผนกก็ขยับไปเล่น Shared Shaper หรือถ้าอยากจัดลำดับความสำคัญให้ VoIP/Video Conference ได้ Bandwidth ก่อนเพื่อน ก็ไปต่อที่ Traffic Shaping Profile ได้เลย หลักคิดเดียวกันหมด ต่างกันแค่เครื่องมือ
หวังว่าบทความนี้จะเป็นประโยชน์และเป็นแนวทางสำหรับผู้ใช้งาน FortiGate ไม่มากก็น้อยนะครับ หากมีปัญหาหรือข้อสงสัยสามารถติดต่อสอบถามข้อมูลเพิ่มเติมได้เลยครับ