Priorisieren Sie den Datenverkehr von LAN-Computern

7

Ich verwende einen Torrent-Client auf meinem kopflosen Ubuntu-Server. Außerdem ist eine Anzahl von Computern mit diesem Server verbunden, der als Internet-Gateway / Router verwendet wird. Die Frage ist, ob es möglich ist, iptables so zu konfigurieren, dass der Verkehr von eth1 (lan if) Vorrang vor dem vom Server generierten lokalen Verkehr hat. So etwas wie QOS ..

Pablo
quelle
Ist dir bewusst, dass 10.04 nicht zum Thema gehört?
Braiam
Dies gilt auch für höhere Releases.
Pablo
einen Blick auf tc qdisc ... zu lartc.org/manpages/tc.txt
Ismail Yushaw

Antworten:

4

Es gibt verschiedene Alternativen, um das zu erreichen, wonach Sie suchen. Aber zuallererst ist es ja möglich. Viele der Möglichkeiten sind jedoch recht komplex.

Eine der einfachsten Optionen könnte darin bestehen, den Torrent-Daemon unter einem eigenen Benutzer \ group auszuführen. Verwenden Sie dann iptables, um den gesamten Datenverkehr von diesem Benutzer \ Gruppe mit einem Flag zu markieren. Lassen Sie dann später das tc nach diesem Flag filtern und stellen Sie es in die Warteschlange mit niedriger Priorität. Am Ende dieses Wikis finden Sie eine Idee.

Für das, was Sie fragen, benötigen Sie nur zwei Warteschlangen ( Abb. 1 ), eine mit niedriger und eine mit hoher Priorität. Es ist jedoch möglicherweise besser, sich an etwas zu halten, das diesem Beispiel näher kommt . Sie können das Beispiel an Ihre Bedürfnisse anpassen, das Teil einfach mit nat löschen und die Standardmarke auf einen niedrigeren Wert setzen als die Marke, die Sie für den vom Dämon generierten Datenverkehr verwenden.

Für meinen Vorschlag können Sie also so etwas wie iptables -A OUTPUT -t mangle -m owner --uid-owner ZZZZ -j MARK --set-mark 6ZZZZ als Benutzerkennung verwenden.

Eine Alternative zum Setzen eines Flags könnte darin bestehen, iptables -A OUTPUT -t mangle -m owner --uid-owner ZZZZ -j CLASSIFY --set-class X:YX und Y als Klassenkennung und ZZZZ als Benutzerkennung zu verwenden.

Abb. 1:

+---------+
| root 1: |
+---------+
     |
+------------+
| class 1:1  |
+------------+
  |      |    
+----+ +----+ 
|1:10| |1:11| 
+----+ +----+

Am besten ist es, für jede fw-Marke ein Blatt zu haben. Aber mein bester Rat ist jetzt, das oben genannte Beispiel zu lesen und zu verstehen , um es an Ihre Bedürfnisse anzupassen. Wenn Sie Fragen haben, fügen Sie diese hinzu.

In dem oben genannten Beispiel ist es wichtig, dass Sie diesen Teil verstehen ( Abb. 2 ), wenn Sie iptables-Regeln zum Markieren oder Klassifizieren von Datenverkehr schreiben möchten. Eine kurze Erklärung dazu mit einem etwas anders aussehenden Diagramm finden Sie hier .

Abb. 2:

First you have to understand how packet traverse the filters with iptables:

        +------------+                +---------+               +-------------+
Packet -| PREROUTING |--- routing-----| FORWARD |-------+-------| POSTROUTING |- Packets
input   +------------+    decision    +---------+       |       +-------------+    out
                             |                          |
                        +-------+                    +--------+   
                        | INPUT |---- Local process -| OUTPUT |
                        +-------+                    +--------+

Dies zeigt Ihnen die richtige Richtung:

Regeln, Richtlinien und Ansätze

Linux Advanced Routing & Traffic Control HOWTO: Ratenbegrenzung für einen einzelnen Host oder eine Netzmaske

Eine Reise zur Verkehrskontrolle: reale Szenarien

Iptables Tutorial 1.2.2

Anders FU Kiær
quelle
Ich bin beim tcGoogeln darauf gestoßen und auch DD-WRT-basierte Router verwenden , um QOS nachzuahmen. Aber ich weiß nicht, wie ich in meinem speziellen Fall konfigurieren soll ... Jedes Beispiel wird geschätzt.
Pablo
1
Ich werde mit mehr Kopf zurückkommen, wenn ich die Zeit habe
:)
Was passiert, wenn ich Pakete vom LAN-Port markiere, um Änderungen an meiner App zu vermeiden?
Pablo
@pablo ja, dann markiere den gesamten Verkehr von zB. ethZ mit der Markierung 1 \ 0 für hohe Priorität und dann Verkehrsform in diesem Sinne. Legen Sie fest, dass die Standard-TC-Regel für nicht markierte Benutzer eine niedrige Priorität hat. Oder klassifizieren Sie den gesamten Verkehr aus diesem ethZ als Klasse X und den gesamten anderen Verkehr als Klasse Y. Priorität X vor Y. Sie können ihnen auch ein Verhältnis der verfügbaren Rate geben, z. wie 20/80 und erlauben ihnen, voneinander zu leihen, wenn der andere seine dedizierte Bandbreite nicht nutzt.
Anders FU Kiær
0

Servicequalität ist ein recht komplexes Thema - der von @ anders-fu-kiaer gepostete Link ist möglicherweise die beste Lösung, aber recht komplex. Ich bin überhaupt kein Experte in diesem Bereich, daher werde ich keinen Kommentar abgeben.

Trotzdem kann oft eine einfachere Lösung nützlich sein. Wenn Sie nur die Bandbreite für ein Programm (z. B. den Torrent-Client) begrenzen möchten, verwenden Sie eine sehr einfache Lösung trickle(1).

Sie können es installieren durch

sudo apt-get install trickle 

und dann führen Sie ein Programm mit aus

trickle -d 100 -u 50 program 

Die programBandbreite wird zum Herunterladen auf 100 kbit / s und zum Hochladen auf 50 kbit / s überschritten. Auf dieser Seite von tuxradar finden Sie viele weitere Optionen und Informationen für Trickle: Steuern Sie Ihre Bandbreite mit Trickle .

(1) Dies unterscheidet sich von der richtigen QoS: Die vom "verkrüppelten" Programm verwendete Bandbreite wird jedes Mal reduziert, nicht nur, wenn die Dienste mit höherer Priorität nachgefragt werden, wie dies bei der richtigen QoS der Fall ist.

Rmano
quelle
Ich möchte nicht wirklich die besten U / L-Bandbreiten einstellen. Was ich brauche, ist das Programm, um so viel wie möglich zu verwenden, bis die LAN-Schnittstelle inaktiv ist. Wenn es Datenverkehr über das LAN geben soll, möchte ich, dass das Programm Datenverkehr zum LAN liefert, ihn aber dennoch so oft wie möglich nutzen kann. Was Sie sagen, ist eine harte Begrenzung der Programm-U / L-Grenzen, die ich tun kann, ohne aus dem Torrent-Client (rtorrent) heraus zu rieseln. Hoffe es ist klar.
Pablo
-1

Sie tun dies nicht mit iptables. Sie müssen die Routing-Metriken ändern.

Festlegen von Routing-Metriken für eine Netzwerkschnittstelle - Ubuntu Apps Directory

Um allen anderen Schnittstellen eine höhere Priorität als wlan0 zu geben, führen Sie einfach Folgendes aus:

ifmetric wlan0 1

Um die Metriken der an wlan0 angehängten Routen zurückzusetzen, führen Sie einfach Folgendes aus:

 ifmetric wlan0 0

Weitere Infos hier: http://0pointer.de/lennart/projects/ifmetric/

Xavier J.
quelle
2
Können Sie uns ein Beispiel geben, was ich nach der Installation von ifmetric tun soll?
Pablo
2
Durch Ändern der Metriken wird nur eine Schnittstelle (Route) in Bezug auf eine andere priorisiert, keine QoS oder Shaping.
Rmano