Linux - Priorität des Netzwerkverkehrs nach IP

3617
goocreations

Ich verwende Ubuntu 12.10 und suche nach einer Möglichkeit, den Netzwerkverkehr basierend auf der IP-Adresse zu gestalten. Ich habe ein LAN, sagen wir aus 192.168.1.2 - 192.168.1.254. Der Server befindet sich bei 192.168.1.1. Alle IPs sollten die maximal möglichen Netzwerkgeschwindigkeiten haben (alle Ports, aber Samba ist der eigentliche Schuldige). Sobald eine bestimmte IP- oder IP-Zone (z. B. 192.168.1.100) eine Verbindung hergestellt hat, sollte die volle Geschwindigkeit dieser IP zugewiesen werden. Alle anderen IPs sollten auf ein Minimum reduziert werden. Sobald der IP-Verkehr abgeschlossen ist, sollte die Geschwindigkeit der restlichen IPs wiederhergestellt werden.

Ich habe so ziemlich einen Server und wenn mein eigener PC eine Verbindung dazu herstellt, möchte ich volle Geschwindigkeit. Nur wenn ich den Server nicht verwende, sollte der Rest vollen Zugriff haben.

Ich habe einige Lösungen online mit tc gefunden, aber alle beschränken bestimmte IPs mit einer bestimmten Geschwindigkeit. Ich möchte jedoch, dass alle Personen die Höchstgeschwindigkeit haben, es sei denn, eine bestimmte IP-Adresse ist angeschlossen. Im Grunde sollte meine IP die höchste Priorität und der Rest die niedrigste Priorität haben.

Kann mir jemand mit einem Skript oder vielleicht einem bereits vorhandenen Programm helfen?

2

1 Antwort auf die Frage

2
JvO

tcist der Weg zu gehen. Der Trick besteht darin, den Verkehr zu priorisieren, ohne ihn einzuschränken.

http://www.lartc.org/howto/lartc.qdisc.classful.html, Abschnitt 9.5.3 "The PRIO qdisc"; Standardmäßig werden 3 Warteschlangen erstellt, die dritte kann jedoch ignoriert werden. Der einfachste Ansatz wäre:

Erstellen Sie die Warteschlangendisziplinen (qdisc)

tc qdisc add dev eth0 root handle 1: prio  tc qdisc add dev eth0 parent 1:1 handle 10: sfq tc qdisc add dev eth0 parent 1:2 handle 20: sfq tc qdisc add dev eth0 parent 1:3 handle 30: sfq 

Sie haben alle den gleichen Warteschlangenalgorithmus. Weisen Sie dann Ihren Servern (in diesem Fall IP 192.168.1.0-127) 10: zu und der Rest 20::

tc filter add dev eth0 protocol ip parent 1:1 prio 1 u32 match ip dst 192.168.1.0/25 flowid 10: tc filter add dev eth0 protocol ip parent 1:2 prio 2 flowid 20: 

(Haftungsausschluss: Es ist schon eine Weile her, seit ich dieses Zeug berührt habe, Sie müssen möglicherweise mit den Werten nach parentund experimentieren. flowid)

Die Verwendung von Bereichen, die Potenzen von 2 sind, ist viel einfacher als Dezimalgrenzen. Das / 25 nach der IP-Adresse ignoriert die letzten 7 Bits der IP-Adresse, daher einen Bereich von 0 bis 127. Verwenden Sie a / 26, um den Bereich auf 0..63 zu begrenzen, falls erforderlich.

Auf der gleichen Seite wird der Hierarchical Token Bucket diskutiert, eine differenziertere Methode zur Verteilung der Bandbreite. Der Trick besteht darin, zwei Klassen mit einem schiefen Bandbreitenverhältnis zu erstellen, beispielsweise 1:10 (100 MBit gegenüber 1000 MBit). Dies lässt Ihren anderen Clients etwas Bandbreite.

Hat jemand das versucht? Ich erhalte die folgende Fehlermeldung, wenn ich `add dev eth0 protocol ip parent 1: 1 prio 1 u32 match ip dst 10.0.0.1/32 flowid 10:`: `RTNETLINK antwortet: Ungültiges Argument. Wir haben einen Fehler, wenn wir mit dem Kernel sprechen PicoutputCls vor 5 Jahren 0
Überprüfen Sie den Namen der Schnittstelle, für die Sie die Regeln hinzufügen möchten. Früher war es 'eth0' für die erste Netzwerkkarte, aber die Namen haben sich in letzter Zeit unterschieden. JvO vor 5 Jahren 1
Vielen Dank @JvO. In meinem Fall ist die Schnittstelle immer noch "eth0". PicoutputCls vor 5 Jahren 0