Ich bin neu zur Verwendung von tc und netem . Ich möchte Pakete verzögern, die an eine bestimmte IP-Adresse gesendet werden. Die folgenden Befehle bewirken jedoch, dass alle Pakete auf dem System verzögert werden und nicht nur an die IP-Adresse 1.2.3.4 gesendet werden:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms
tc filter add dev eth0 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 1.2.3.4 flowid 2:1
Ich vermute, dass ich am Ende eine Art Catch-All-Filter benötige, um anzugeben, dass der gesamte verbleibende Datenverkehr nicht über netem geleitet werden soll. Aber ich kann nichts zum Arbeiten bringen. Wie würde ich das zum Laufen bringen?
quelle
Die gewählte Antwort ist falsch / unvollständig. Ich hatte ein ähnliches Problem, die gewählte Antwort hat mir geholfen, aber nicht genug.
Erstens wird der folgende Befehl nicht wirklich benötigt.
Die Root-Qdisc wird "gelöscht", aber sofort durch eine pfifo_fast ersetzt (damit die Konnektivität nicht verloren geht).
Der zweite Befehl:
Ersetzt die pfifo_fast qdisc durch die prio one. Standardmäßig verfügt die Prio-Warteschlange über 3 Bänder (0, 1, 2), die jeweils von einer Klasse verwaltet werden (1: 1, 1: 2 und 1: 3).
Die Pakete werden über das TOS-Feld des IP-Pakets an eines dieser Bänder gesendet. Diese Konfiguration wird angezeigt, wenn Sie Folgendes ausführen:
Blick auf die "priomap" -Werte.
Dann fügen Sie eine netem qdisc hinzu:
Mit diesem Befehl verschieben Sie den gesamten Datenverkehr in das 1: 1-Band (bis der Filter aktiviert ist).
Es gibt jedoch zwei Einschränkungen:
Das Folgende löste mein Problem, um nicht von dem netem betroffen zu sein, während der Filter nicht angewendet wird. Anstelle der oben genannten Schritte habe ich Folgendes getan:
Dadurch wird der gesamte Datenverkehr standardmäßig 1: 3 an das Band gesendet.
Dann habe ich die Regel hinzugefügt, um den Datenverkehr zu verzögern:
Dadurch wird die qdisc in Band 0 erstellt, aber da der gesamte Datenverkehr in Band 3 übertragen wird, hat mich dies nicht betroffen.
Danach habe ich den Filter hinzugefügt:
Jetzt wird mit dem Filter nur die ausgewählte IP / der ausgewählte Port beeinflusst, da wir den ausgewählten Datenverkehr auf das Band 0 umleiten.
Der gesamte andere Datenverkehr bleibt unberührt, da er weiterhin zu Band 3 fließt.
quelle
Einfaches Beispiel von https://wiki.linuxfoundation.org/networking/netem , mit dem Sie Pakete auf eine bestimmte IP-Adresse verschieben können, ohne anderen Datenverkehr zu beeinträchtigen, auch während der Konfiguration:
quelle
Ich habe es nicht geschafft, den Datenverkehr auf eine IP zu verschieben, während der Datenverkehr auf einer anderen IP normal bleibt. Dies ist die in diesem Thread beschriebene Methode.
Ich schaffe es jedoch mit den folgenden Befehlen.
So verzögern Sie den
15001ms
Datenverkehr an IP1.2.3.4
vom Host, auf dem der Befehl ausgeführt wird. Der Befehlhostname -I
wird verwendet, um die Haupt-IP des Hosts abzurufen. Der Wert kann jedoch direkt im Befehl ersetzt werden.Ich musste einen weiteren Filter mit
0ms
Verzögerung hinzufügen , um dem vom Host kommenden Datenverkehr zu entsprechen. Sicher ist es nicht elegant, aber ich habe es nicht geschafft, dass etwas Schöneres funktioniert.Der letzte Befehl kann ersetzt werden, um mit einem einzelnen Port übereinzustimmen.
So verzögern Sie den Datenverkehr zum Port
18583
anstelle von IP1.2.3.4
.Ich habe auch eine zweite Methode für diese Antwort gefunden , um den Datenverkehr zu verzögern,
1.2.3.4:18583
ohne den anderen Datenverkehr zu beeinträchtigen.quelle