Bandbreiten Limitierung

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
Lolek
Beiträge: 121
Registriert: 22.12.2009 21:02:29

Bandbreiten Limitierung

Beitrag von Lolek » 19.09.2015 18:19:49

Hallo Leute,

ich suche nach einer Möglichkeit die Bandbreite einer Internetverbindung aufzuteilen.

Ich möchte kein QOS machen sondern nur die Bnadbreite aufteilen. Also z.B. Rechner 1 bekommt 1 mb/s Rechner 2 bekommt 500 kb/s.

Ich habe für diesen Zweck tc gefunden. Kennt jemand ein möglichst deutsches HowTo für tc mit dem man sich in das Thema einarbeiten kann.

Für Beispiele wäre ich auch dankbar.

Danke für alle Antworten.
Gruß Lolek

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Re: Bandbreiten Limitierung

Beitrag von Hendri » 20.09.2015 15:00:33

Hallo,

ein guter Start könnte Wondershaper sein, der auch in einem Admin Magazin Artikel gewürdigt wurde.
Ich benutzte vor allem die HTB Variante davon, bevor ich auf ein selbst geschriebenes Script umgestiegen bin, wo ich die HFSC queuing discipline einsetze.
HFSC hat bei der Latenz von Paketen einfach die Nase vorn gegenüber HTB...
Ciao, Hendri

dufty2
Beiträge: 1714
Registriert: 22.12.2013 16:41:16

Re: Bandbreiten Limitierung

Beitrag von dufty2 » 20.09.2015 15:04:25


Benutzeravatar
Lolek
Beiträge: 121
Registriert: 22.12.2009 21:02:29

Re: Bandbreiten Limitierung

Beitrag von Lolek » 20.09.2015 18:51:04

Hallo ihr beiden,

danke für die Antworten. :THX:

@Hendri: Wondershaper ist für meine Zweck vermutlich nicht das richtige. Er hat ja schon ein voreingestelltes Muster wie der Datenverkehr behandelt wird. Diese Lösung kann ich so nicht verwenden, weil ich lediglich die Bandbreite meiner Leitung unter den angeschlossenen Rechnern aufteilen will.

Der Artikel im Admin Magazin ist aber sehr lesenswert. Danke für den Link

@dufty2: Der Link den Du gepostet hast, trifft das was ich brauche.

Ich habe noch nicht so richtig verstanden wie tc eigentlich funktioniert. Wenn ich für ein Interface eine qdisc anlege, z.B.

Code: Alles auswählen

tc qdisc add dev eth0 root handle 1: htb default 40 
,
was bedeutet dann "handle 1:" ? Ist das der Name für die qdisc?
Und was hat es mit den Klassen und Filtern aufsich? Ich kann es nicht richtig zusammensetzen und verstehe den Ablauf nicht.
Gruß Lolek

dufty2
Beiträge: 1714
Registriert: 22.12.2013 16:41:16

Re: Bandbreiten Limitierung

Beitrag von dufty2 » 20.09.2015 19:48:57

Lolek hat geschrieben:Wenn ich für ein Interface eine qdisc anlege, z.B.

Code: Alles auswählen

tc qdisc add dev eth0 root handle 1: htb default 40 
,
was bedeutet dann "handle 1:" ? Ist das der Name für die qdisc?
Yo, sowas wie ein Bezeichner/Abkürzung.
Ansonsten müsstest Du ja in weiteren Zeilen immer ein
... parent root ...
angeben.
Lolek hat geschrieben: Und was hat es mit den Klassen und Filtern aufsich? Ich kann es nicht richtig zusammensetzen und verstehe den Ablauf nicht.
Na, um den Traffic aufzuteilen, braucht man halt Klassen. Und jede Klasse wird entsprechend behandelt.
Im Beispielfall bekommt die Klasse "1:10" maximal 250kbit (falls anderer Traffic aus anderen Klassen vorhanden ist).

Mit der "Klassifizierung" hat man eine Unterteilung des Traffics vorgenommen aber noch nicht genau bestimmt, welcher traffic nun GENAU in welcher Klasse liegt resp. kommen soll.
Das macht man mit der Filterung:
Traffic der Art xy kommt in die Klasse 1:z.
In dem Beispielfall macht man die Filterung per iptables.
Dazu muss man noch wissen, dass die iptables zeitlich vor den shaping kommen, wenn ein Paket Deinen Rechner verlässt. also bildlich etwa so:
<iptables> => <qdics/shaping> => Netwerkkarte => Kabel

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Re: Bandbreiten Limitierung

Beitrag von Hendri » 21.09.2015 20:30:18

Was man noch erwähnen könnte, das man nur den Upload auf einem Interface shapen sollte, da man da die Queue selbst in der Hand hat!
Es gibt zwar auch einen ingress shaper, das man das am externen Interface machen kann, aber der hat einige Nachteile...
Ich shape auf meinen Gateways aber auf beiden Interfaces (den Upload):
externes Interface = Upload shaping
internes Interface = Download shaping
Entweder mit HTP oder HFSC, was IMHO viel besser klappt als der ingres shaper!
Und ich kann beim upload shaping immer mit iptables markieren!

Im Iptables Traffic Flow Graphen kannst du die Stelle sehen, wo traffic shaping passiert - ingres und egress qdisc...
Ciao, Hendri

Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: Bandbreiten Limitierung

Beitrag von Colttt » 21.09.2015 21:52:02

Ich misch mal ein, geht sowas auch dynamisch? Also wenn einer da ist bekommt er die volle Bandbreite und wenn 4da sind die ziehen dann jeweils nur 25% etc??
Debian-Nutzer :D

ZABBIX Certified Specialist

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Re: Bandbreiten Limitierung

Beitrag von Hendri » 21.09.2015 23:16:27

Colttt hat geschrieben:Ich misch mal ein, geht sowas auch dynamisch? Also wenn einer da ist bekommt er die volle Bandbreite und wenn 4da sind die ziehen dann jeweils nur 25% etc??
Ja, man teilt jeder Queue dann eben 25% statische Bandbreite zu und lässt sie, wenn kein anderer die Bandbreite braucht, auf 100% Überbuchen/Ausborgen (ceil):

HTB Beispiel:

Code: Alles auswählen

tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 25kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 25kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 25kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:40 htb rate 25kbps ceil 100kbps
Beim HFSC funkt das etwas anders...


Alternativ könnte man mit Stochastic Fairness Queueing, einer classless queueing discipline, recht ähnliches Verhalten erzeugen.


Dabei wird die verfügbare Bandbreite, ohne shaping, auf alle Datenströme versucht aufzuteilen.

Code: Alles auswählen

tc qdisc add dev eth0 root sfq perturb 10
Ich hänge das stets noch zusätzlich, an jeder meiner HFSC oder HTB Queues an, um beides zu kombinieren...

Code: Alles auswählen

tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 25kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 25kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 25kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:40 htb rate 25kbps ceil 100kbps

tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10 
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10 
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10 
tc qdisc add dev eth0 parent 1:40 handle 40: sfq perturb 10 
Ciao, Hendri

Antworten