Wenn ich etwas bauen würde, um dieses Problem zu lösen, würde ich Folgendes einrichten:
Wir nehmen hier ein Beispiel von 4 Computern, die eine Verbindung haben. Das Netzwerk würde folgendermaßen aussehen:
{ ISP }=========[ SOHO router] ===LAN1=== [eth0 |Linux Box| eth1] ===LAN2=== Home Desktops/Laptops
Angenommen, Sie verwenden statische IP-Adressierung in LAN2:
Linux Box 192.168.1.1 Home 1 192.168.1.11 Home 2 192.168.1.12 Home 3 192.168.1.13 Home 4 192.168.1.14
Ich würde zuerst ein kleines Skript schreiben, um herauszufinden, welche Clients gerade aktiv sind, indem ich sie anpinge und irgendwo ein Ergebnis schreibe. "Dies ist eine Übung für den Leser" Berechnen Sie die Gesamtanzahl der verbundenen Hosts (1-4).
Vergewissern Sie sich, dass keine Hosts online sind.
Teilen Sie die gesamte Bandbreite, aber die Anzahl der verbundenen Hosts. (12 MB für 1, 6 MB für 2, 4 MB für 3, 3 MB für 4)
Als nächstes verwenden Sie tc mit dem HTB-Algorithmus, um die Bandbreite jeder Adresse auf WAN-seitigen Geräten zu begrenzen. Erstellen Sie zuerst die Stammklasse:
DEV="eth0" TC="/sbin/tc" TOT_BW=12 $TC qdisc add dev $DEV root handle 1: htb default 99
Fügen Sie dann für jeden "Client" eine Klasse hinzu (hier zum Beispiel 3 Clients).
NB_CLT=3 CLT_BW=$(($TOT_BW/$NB_CLT))mbit for i in seq $NB_CLT do $TC class add def $DEV parent 1: classid 1:$i htb rate $CLT_BW ceil $CLT_BW burst 15k cburst 1500 $TC filter add dev $DEV protocol ip parent 1:0 prio 1 flowid 1:$i u32 \ match ip dst 192.168.1.1$i/32 \ match ip src [Router IP in LAN1]/32 done
(Das obige Skript ist völlig ungetestet und NICHT schreibfehlerfrei.)
Jetzt müssen Sie immer noch das richtige Skript erstellen, um jede Minute ausgeführt zu werden und die Buckets / Filter jedes Mal zu erneuern, wenn ein neuer Host hoch- oder heruntergefahren wird.
Ich hoffe, das bringt Sie in die richtige Richtung, viel Glück.
Alternative Lösung
Installieren Sie auf allen Hosts eine lokale QoS-Software, um deren Bandbreite einzuschränken. Ich persönlich nutze NetLimiter (nicht frei)