Frage Minimalrate und Standardklassenproblem für HTB


Ich habe 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 hat eine persönliche Liste von Domains mit einer Down- und Up-Geschwindigkeit für die Domain, die er nicht überschreiten darf.

Es bedeutet, dass user1 seinen Zugriff auf slashdot.org auf 8KB beim Download und 3KB beim Hochladen beschränken kann, und user2 kann auf slashdot.org einen eingeschränkten Zugriff von 4KB down und 1KB up haben.

Im Moment habe ich ein iptables / tc-Paar eingerichtet, das großartig funktioniert, aber in einem sehr kleinen Maßstab, mit zwei oder drei virtuellen Hosts gleichzeitig (Leider kann ich keinen echten Größentest durchführen).

Hier ist meine aktuelle Struktur (ich werde nur die auf dem LAN-Ausgang zeigen, die für den Upload ist einfach eine "Kopie" von diesem)

Eine HTB qdisc (handle 2 :), die an der Schnittstelle angehängt ist, ist die Standardverkehrsklasse die Klasse FFFF.

Die Root-Klasse 2: 1 direkt unter der HTB-qdisc mit für Rate und Obergrenze die DOWNLINK-Kapazität.

Die Standardklasse 2: FFFF als Kind von 2: 1, mit einer Rate von 1 kbsp und einer Ceil DOWNLINK-Kapazität.

Dann gibt es andere Klassen, die dynamisch hinzugefügt werden, wenn für einen Benutzer aus einer bestimmten Domäne eine neue Einschränkung besteht. Eine neue TC-Klasse wird hinzugefügt, um die Download-Geschwindigkeit von ihrer Domäne zu steuern.

Für jetzt, hier ist was ich getan habe:

Erstellen Sie eine neue TC-Klasse mit einer eindeutigen ID (aus einer Datenbank, nicht den Punkt hier), als Eltern der Klasse 2: 1, Rate Wert ist 1 bps, ceil Wert wird auf die begrenzte Download-Geschwindigkeit gesetzt.

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 und der eingeschränkte in die entsprechende TC-Klasse gesendet werden.

Der Punkt, an dem ich ernsthaft Zweifel habe, ist die Verwendung der minimalen 1-Bit-Geschwindigkeit für die Standardklasse und die eingeschränkte Klasse. Ich kann die Anzahl der beschränkten Klassen, die erstellt werden, nicht kontrollieren, und ich möchte nicht die Gesamtrate der eingeschränkten Klasse, die über der Wurzelklasse liegt.

Ein weiterer Punkt ist, dass ich den Standardwert prio 0 und die eingeschränkte Klasse prio 1 hinzugefügt habe. Wenn die Standardklasse also ausleihen sollte (fast immer nach ihrer sehr langsamen Rate), wird diese Klasse vor der anderen eingeschränkten Domäne geschaltet. Aber werden diese Domains nicht verhungern, wenn ich die Ceil der Standardklasse als eine der Root-Klassen behalte?

Wie kann es mir gelingen, den Nutzern eine angemessene Interaktivität und Bandbreite für eine nicht eingeschrä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, wenn ich nicht eine Standardklasse für die HTB-QDISC vorschlage, die Pakete, die nicht den Filtern entsprechen, mit der Hardwaregeschwindigkeit aus der Warteschlange genommen werden. (Aber hier wieder mit der eingeschränkten Klasse verhungern?)

Ich bin wirklich neu in TCP und Netzwerk QoS, so dass jeder Rat, Kritik (konstruktive;)) wird willkommen sein.

Vincent.


28
2018-01-04 13:54


Ursprung




Antworten:


Da Sie die Klassifikatoren nicht einbezogen haben, ist es schwer abzu- ziehen, welchen Traffic Sie in jeder Klasse genau meinen. Zum Beispiel ist ausgehende http oder SSH-Verkehr sehr wichtig für die Interaktivität, eingehende http nicht so sehr.

Ich würde für jeden eine bestimmte Bandbreite garantieren Bedienung indem ich sage: Ich habe x kbps für eingehenden httpd Verkehr, und es wird gleichmäßig unter den Benutzern geteilt. Wenn Sie 10 oder 100 Benutzer haben, ist das fair. "Wenn Sie Benutzer mit hoher Priorität oder Benutzer mit niedriger Priorität in jedem dieser Dienste haben, benötigen Sie zusätzliche Klassen und Klassifizierer für diese Benutzer.

(Ich hoffe auch, dass Sie wissen, dass Sie nur ausgehenden Datenverkehr von einer Schnittstelle aus gestalten können, NICHT die eingehenden. Das heißt, wenn Sie den Uplink begrenzen wollen, müssen Sie entweder mit der ausgehenden Schnittstelle zum Internet arbeiten oder die Zwischenwarteschlangengerät. Der lartc.org Guide ist eine sehr gute Quelle.)


2
2017-07-15 14:47