27 September 2013

คุม Bandwidth ด้วย cbq ตอน 2 การ Upload

จากตอนที่แล้วที่กล่าวถึงการควบคุม Bandwidth ด้วย cbq ตอนแรก การทำงานที่เราออกแบบเป็นการควบคุม Flow ของข้อมูลจาก WAN เพื่อไปยัง client หรือก็คือการ Download ถ้ามองจาก client นั่นเอง

ทีนี้ถ้าทิศทางตรงกันข้าม ในกรณีที่เป็น Upload ก็น่าจะทำเหมือนๆกันรึเปล่านะ?

สำหรับคนที่เดาว่าทำเหมือนกันก็คงถูกแค่บางส่วน เพราะใน config ส่วนของ RULE ดูเผินๆแล้วเหมือนจะสามารถเอา IP สลับข้างและคุม upload ได้ แต่จริงๆแล้วไม่ง่ายแบบนั้นครับ เพราะการ upload จะต้องควบคุมการออกของข้อมูลที่ขา WAN จึงจะคุมความเร็วขาออกได้

แต่อย่างไรก็ดี ถ้าใครรู้วิธี config ที่สามารถ implement ได้สะดวกขึ้นในแนวทางของการใช้ cbq กรณีการ Upload นั้นสามารถฝากมาได้เลย จะ Link ไปหาทันทีเพื่อเป็นทางเลือกกับผู้อ่านต่อไปครับ

เพื่อไม่ให้เสียเวลาอ่าน ตาม Step ต่อไปนี้เลย

1. ต้องมี Linux ที่เป็น firewall เรียบร้อย เหมือนเดิม

2. เราต้องเป็น root

3. ตรวจสอบว่าเครื่องมือ cbq เรียบร้อย

4. ต้องใช้ ipatables ซึ่งเป็นการควบคุมให้ Linux ทำงานเป็น firewall

5. สร้าง bandwidth profile โดยเป็นรูปแบบตาม format ของ cbq เริ่มที่ชื่อไฟล์ก่อน
ชื่อต้องสร้างในรูปแบบ cbq-hhhh.name ข้อสรุปการตั้งชื่อคือ
- นำด้วยคำว่า "cbq-" พร้อมกับขีด dash 1 ตัว
- เลข class ความยาว 4 หลัก เป็นเลขฐานสิบหก hexagonal
- และสุดท้าย เป็นชื่ออะไรก็ได้ โดยใช้ . เป็นตัวคั่น
ตัวอย่างเช่น cbq-0010.myprofile หรือ cbq-01ff.mycbq หรือ cbq-0001.jingjunpc

6. Template เพื่อการคุม bandwidth กรณี Upload ผมเสนอ Template นี้
DEVICE=eth0,100Mbit,10Mbit
RATE=768Kbit
WEIGHT=76Kbit
PRIO=5
LEAF=none
ISOLATED=yes
MARK=100
ซึ่ง eth0 เป็นขา WAN ของระบบ สังเกตุเทียบจากบทความตอนแรก เราไม่ใช้ RULE แล้ว แต่เปลี่ยนเป็น MARK แทน ซึ่งแทนด้วยตัวเลขจำนวนเต็ม สามารถรองรับได้ 65535 marks

7. กำหนด iptables เพื่อระบุ mark

#> iptables -t mangle -A PREROUTING -s 192.168.1.10 -i eth1 -j MARK --set-xmark 100

CBQ upload direction
Traffic Direction โดย cbq ชุดนี้อธิบายการ
Shape bandwidth กับ client ในขา Upload
ซึ่ง eth1 เป็นขา LAN ของระบบ ความหมายของ iptables นี้คือ การกำหนดให้ IP หมายเลข 192.168.1.10 ทำการระบุหมายเลข data-gram จาก IP นี้ ด้วยเลข 100 ซึ่งตัวเลขของการ mark ต้องสัมพันธ์กับกฎใน Bandwidth profile ที่เราสร้างขึ้นไว้ จะส่งผลให้ข้อมูลจาก IP 192.168.1.10 สามารถจะส่งข้อมูลออกไปยัง Internet ได้แค่ 768kbps

8. ทำการ start cbq ด้วยคำสั่ง
cbq start
ถ้าไม่มี error ใดแสดงขึ้นมา แสดงว่าน่าจะไม่มีปัญหา

ทำนองเดียวกัน ถ้าเราต้องการทำหลาย IP ก็เพียงแค่เขียน shell script ขึ้นมาเพื่อสร้าง bandwidth profile และทำการ run คำสั่ง iptables แบบเยอะๆได้

ปัญหาที่พบจะเกิดกับการใช้ Transparent Proxy, หรือโปรแกรมที่เกี่ยวข้องกับการทำ Socket ต่างๆ ซึ่งมีทั้ง squid, socks5, FTP Proxy จนไปถึงพวก caching ทั้ง TCP หรือ UDP ต่างๆ เพราะการที่ข้อมูลผ่านเข้า Proxy ไปแล้ว จะเหมือนกับเครื่อง Server ทำการส่งข้อมูลออกไป Internet เสียเอง ดังนั้นการควบคุม bandwidth ด้วย Mark จะไม่มีผลเฉพาะกับบาง Protocol ที่วิ่งผ่าน Proxy พวกนี้ครับ

สำหรับการคุม Bandwidth ด้วย cbq ทั้งสองตอน น่าจะช่วยเป็นทางลัดให้ System Admin บางท่านจบปัญหาได้เร็วขึ้นครับ

Written by Tiwakorn Laophulsuk

No comments:

Post a Comment

Give a comment ...