ฉันมีข้อสงสัยเกี่ยวกับโครงสร้าง HTB ที่ฉันใช้
เป้าหมายของฉันคือ จำกัด การดาวน์โหลดและอัพโหลดความเร็วของผู้ใช้ในเครือข่ายท้องถิ่น ผู้ใช้เครือข่ายแต่ละรายมีรายชื่อโดเมนส่วนบุคคลที่มีความเร็วในการขึ้นและลงสำหรับโดเมนที่เขาต้องไม่เกิน
หมายความว่า user1 สามารถใช้งาน slashdot.org ได้เพียง 8KB ในการดาวน์โหลดและ 3KB สำหรับการอัพโหลดและ user2 สามารถใช้ slashdot.org เพื่อ จำกัด การเข้าถึง 4KB ลงและ 1KB ขึ้นไป
ตอนนี้ฉันติดตั้ง iptables / tc couple ที่ใช้งานได้ดี แต่มีขนาดเล็กมากโดยใช้โฮสต์เสมือน 2 หรือ 3 ตัวพร้อมกัน (น่าเสียดายที่ฉันไม่สามารถทำการทดสอบขนาดจริงได้)
นี่คือโครงสร้างปัจจุบันของฉัน (ฉันจะแสดงเฉพาะบน egress ของ LAN เท่านั้นโครงสร้างสำหรับการอัปโหลดเป็นเพียง "คัดลอก" ของอันนี้)
HTB qdisc (หมายเลข 2 :) ติดอยู่บนอินเตอร์เฟสคลาสการรับส่งข้อมูลเริ่มต้นคือคลาส FFFF
คลาสรูท 2: 1 โดยตรงภายใต้ HTB qdisc มีอัตราและเพดานความจุ DOWNLINK
คลาสเริ่มต้น 2: FFFF ในฐานะลูกของ 2: 1 โดยมีอัตรา 1kbsp และเพดานความจุ DOWNLINK
จากนั้นจะมีคลาสอื่นเพิ่มแบบไดนามิกเมื่อมีข้อ จำกัด ใหม่สำหรับผู้ใช้จากโดเมนที่แน่นอนคลาส tc ใหม่จะถูกเพิ่มเพื่อควบคุมความเร็วในการดาวน์โหลดจากโดเมน
สำหรับตอนนี้นี่คือสิ่งที่ฉันทำ:
สร้างคลาส tc ใหม่ด้วย id เฉพาะ (นำมาจากฐานข้อมูลไม่ใช่จุดที่นี่) ในฐานะผู้ปกครองระดับ 2: 1 ค่าอัตราคือ 1bps ค่า ceil ถูกตั้งค่าเป็นความเร็วในการดาวน์โหลดที่ จำกัด
นี่คือคำสั่ง tc:
-------------- BEGIN SCRIPT --------------
DOWNLINK=800
## Setting up the static tc qdisc and class
$tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF
# Main class so the default class can borrow bandwith from the others
$tc class replace dev $LAN_IFACE parent 0x2: classid 0x2:0x1 htb rate $DOWNLINK ceil $DOWNLINKkbps
# add the default class of class id 2:a under the main class of classid 2:1
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0xFFFF htb rate 1kbps ceil $DOWNLINKkbps prio 0
# add to the leaf class 2:10 for default traffic a sfq qdisc
$tc qdisc add dev $LAN_IFACE parent 0x2:0xFFFF handle 0xFFFF: sfq perturb 10
## The dynamic part called each time a new restriction for a couple domain/user is added
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0x$idHex htb rate 1bps ceil $speedDownkbps prio 1
# Add the sfq at the leaf class 2:1$id
$tc qdisc add dev $LAN_IFACE parent 0x2:0x$idHex handle 0x$idHex: sfq perturb 10
# $id is the mark added by iptables for this couple domain/user
$tc filter replace dev $LAN_IFACE parent 0x2:0 protocol ip prio 3 handle 0x$id fw flowid 0x2:0x$idHex
-------------- END SCRIPT --------------
การรับส่งข้อมูลปกติทั้งหมด (โดยไม่มีการ จำกัด ความเร็ว) ควรไปที่คลาสเริ่มต้นและควรส่งการ จำกัด การเข้าถึงไปยังคลาส tc ที่เกี่ยวข้อง
จุดที่ฉันสงสัยอย่างจริงจังเกี่ยวกับการใช้อัตราความเร็วขั้นต่ำ 1bps สำหรับคลาสเริ่มต้นและคลาสที่ จำกัด ฉันไม่สามารถควบคุมจำนวนคลาสที่ถูก จำกัด ที่จะถูกสร้างขึ้นและฉันไม่ต้องการให้อัตรารวมของคลาสที่ถูก จำกัด มีค่ามากกว่าหนึ่งในคลาสรูท
อีกจุดหนึ่งฉันได้เพิ่มค่าเริ่มต้นของ prio 0 และคลาสที่ จำกัด เป็น prio 1 ดังนั้นในกรณีที่คลาสเริ่มต้นควรยืม (เกือบทุกครั้งตามอัตราที่ช้ามาก) คลาสนี้จะให้บริการก่อนโดเมนที่ จำกัด อื่น ๆ แต่โดเมนเหล่านั้นจะไม่หิวถ้าฉันรักษาเพดานของคลาสเริ่มต้นเป็นหนึ่งในคลาสรูท
ฉันจะประสบความสำเร็จในการอนุญาตให้ผู้ใช้เก็บการติดต่อสื่อสารและแบนด์วิดท์ที่เหมาะสมสำหรับการใช้งานที่ไม่ จำกัด ในขณะที่ จำกัด ความเร็วสำหรับโดเมน / ผู้ใช้หลายคู่?
ฉันยังสงสัยว่าคลาสเริ่มต้นมีประโยชน์ที่นี่หรือไม่ถ้าฉันไม่ระบุคลาสเริ่มต้นสำหรับ htb qdisc แพ็กเก็ตที่ไม่ตรงกับตัวกรองจะถูกตัดออกด้วยความเร็วของฮาร์ดแวร์ (แต่ที่นี่อีกครั้งด้วยการทำให้ระดับที่ จำกัด อด?)
ฉันยังใหม่กับ tc และเครือข่าย QoS ดังนั้นคำแนะนำนักวิจารณ์ (คนที่สร้างสรรค์;) จะได้รับการต้อนรับ
วินเซนต์