อัตราขั้นต่ำและปัญหาคลาสเริ่มต้นสำหรับ HTB


29

ฉันมีข้อสงสัยเกี่ยวกับโครงสร้าง 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 ดังนั้นคำแนะนำนักวิจารณ์ (คนที่สร้างสรรค์;) จะได้รับการต้อนรับ

วินเซนต์

คำตอบ:


2

เนื่องจากคุณไม่ได้รวมตัวแยกประเภทไว้มันจึงยากที่จะหักทอนการรับส่งข้อมูลของคุณในแต่ละชั้นเรียน ตัวอย่างเช่นการรับส่งข้อมูล http หรือ ssh เป็นสิ่งสำคัญมากสำหรับการติดต่อสื่อสาร http ที่เข้ามาไม่มาก

ฉันจะรับประกันแบนด์วิดท์ที่แน่นอนสำหรับแต่ละบริการด้วยการพูดว่า: ฉันมี x kbps สำหรับปริมาณการใช้ httpd ที่เข้ามาและจะถูกแบ่งเท่า ๆ กันระหว่างผู้ใช้ หากคุณมีผู้ใช้ 10 หรือ 100 คนมันยุติธรรม "ถ้าคุณมีผู้ใช้ที่มีลำดับความสำคัญสูงหรือผู้ใช้ที่มีลำดับความสำคัญต่ำในแต่ละบริการเหล่านี้คุณจะต้องมีคลาสและตัวแยกประเภทเพิ่มเติมสำหรับพวกเขา

(นอกจากนี้ผมหวังว่าคุณจะรู้ว่าคุณสามารถสร้างรูปร่างของการจราจรขาออกจากอินเตอร์เฟซที่ไม่ได้เข้ามา. หมายความว่าหากคุณต้องการ จำกัด การถ่ายทอดสัญญาณที่คุณมีให้กับการทำงานอย่างใดอย่างหนึ่งกับอินเตอร์เฟซที่ส่งออกไปยังอินเทอร์เน็ตหรือใช้อุปกรณ์การจัดคิวระดับกลาง . lartc.org Guide เป็นทรัพยากรที่ดีมาก)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.