Ich habe einige Zweifel an einer HTB-Struktur, die ich verwende.
Mein Ziel ist es, die Download- und Upload-Geschwindigkeit von Benutzern in einem lokalen Netzwerk zu begrenzen. Jeder Benutzer des Netzwerks verfügt über eine persönliche Liste von Domains, deren Down- und Up-Geschwindigkeit für die Domain nicht überschritten werden darf.
Dies bedeutet, dass Benutzer1 seinen Zugriff auf slashdot.org auf 8 KB beim Herunterladen und 3 KB beim Hochladen beschränken kann und Benutzer2 auf slashdot.org einen eingeschränkten Zugriff von 4 KB nach unten und 1 KB nach oben haben kann.
Im Moment richte ich ein iptables / tc-Paar ein, das großartig funktioniert, aber in sehr geringem Umfang, wobei zwei oder drei virtuelle Hosts gleichzeitig verwendet werden (ich kann leider keinen echten Größentest durchführen).
Hier ist meine aktuelle Struktur (ich zeige nur die auf dem LAN-Ausgang, die für den Upload ist einfach eine "Kopie" dieser)
Bei einer an die Schnittstelle angehängten HTB-qdisc (Handle 2 :) ist die Standardverkehrsklasse die Klasse FFFF.
Die Root-Klasse 2: 1 direkt unter der HTB-Qdisc hat für Rate und Decke die DOWNLINK-Kapazität.
Die Standardklasse 2: FFFF als Kind von 2: 1, mit einer Rate von 1 kbsp und einer Obergrenze von DOWNLINK-Kapazität.
Dann werden andere Klassen dynamisch hinzugefügt, wenn eine neue Einschränkung für einen Benutzer aus einer bestimmten Domäne vorliegt. Eine neue tc-Klasse wird hinzugefügt, um die Download-Geschwindigkeit aus seiner Domäne zu steuern.
Im Moment habe ich Folgendes getan:
Erstellen Sie eine neue tc-Klasse mit einer eindeutigen ID (aus einer Datenbank entnommen, hier nicht der Punkt). Als übergeordnete Klasse 2: 1. Der Ratenwert ist 1 Bit / s. Der Ceil-Wert ist auf die begrenzte Download-Geschwindigkeit festgelegt.
Hier sind die tc-Befehle:
-------------- 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 --------------
Der gesamte normale Verkehr (ohne Geschwindigkeitsbeschränkung) sollte in die Standardklasse übergehen, und der eingeschränkte Verkehr sollte an die entsprechende tc-Klasse gesendet werden.
Der Punkt, an dem ich ernsthaft zweifle, ist die Verwendung der minimalen Geschwindigkeitsrate von 1 Bit / s für die Standardklasse und die eingeschränkte Klasse. Ich kann die Anzahl der zu erstellenden eingeschränkten Klassen nicht steuern, und ich möchte nicht, dass die Gesamtrate der eingeschränkten Klasse über der der Stammklasse liegt.
Ein weiterer Punkt ist, dass ich den Standardwert prio 0 und die eingeschränkte Klasse prio 1 hinzugefügt habe. Sollte sich die Standardklasse also ausleihen (fast immer entsprechend ihrer sehr langsamen Rate), wird diese Klasse vor der anderen eingeschränkten Domäne bedient. Aber werden diese Domänen nicht hungern, wenn ich die Obergrenze der Standardklasse als die der Stammklasse behalte?
Wie kann es mir gelingen, den Benutzern eine angemessene Interaktivität und Bandbreite für eine uneingeschränkte Nutzung zu ermöglichen und gleichzeitig die Geschwindigkeit für mehrere Domains / Benutzer zu begrenzen?
Ich frage mich auch, ob die Standardklasse hier nützlich ist, da die Pakete, die nicht mit den Filtern übereinstimmen, mit der Hardwaregeschwindigkeit aus der Warteschlange entfernt werden, wenn ich keine Standardklasse für die htb qdisc angeben. (Aber hier nochmal mit dem Verhungern der eingeschränkten Klasse?)
Ich bin wirklich neu in der Technologie und im Networking von QoS, daher sind Ratschläge und Kritiker (konstruktive;)) willkommen.
Vincent.
quelle