Simulation einer langsamen Verbindung mit tc

9

Ich habe eine Linux-Box (Centos 5.5), auf der ich den Netzwerkverkehr begrenzen möchte. Ich habe eine Anwendung, die wir an Clients verteilen, und ich möchte sie mit der empfohlenen Mindestbandbreite von 256 Mbit / s testen. Bisher scheinen die TC-Tutorials, die ich gesehen habe, es Ihnen zu ermöglichen, die Bandbreite nach bestimmten Kriterien zu begrenzen, aber ich möchte die Bandbreite in allen Situationen begrenzen (zu / von allen IP-Adressen, unabhängig davon, wie der IP-Header aussieht usw.).

In einem Tutorial wurde vorgeschlagen, Folgendes zu verwenden:

tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2

aber ich bekomme folgenden Fehler:

Unknown filter "flowid", hence option 10:2 is unparsable

Irgendwelche Ideen, wie die Bandbreite, die unter allen Umständen in eth0 ein- oder ausgeht, begrenzt werden kann?

ranziger Fischatem
quelle

Antworten:

11

Wenn Sie den gesamten ausgehenden Datenverkehr einschränken möchten, benötigen Sie überhaupt keine Filter. Fügen Sie einfach Ihre qdisc wie folgt zum Root-Handle der Benutzeroberfläche hinzu:

tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

Wenn Sie den eingehenden Verkehr gestalten / überwachen möchten, ist dies etwas komplizierter. Sie müssen zB eine IFB-Schnittstelle verwenden:

modprobe ifb
ip link set dev ifb0 up
tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#  ^- this is a dummy filter, match u32 0 0 matches all traffic
tc qdisc add dev ifb0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

Hier ist ein anderer Ansatz, bei dem zwei einfache Filter verwendet werden:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 root         protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1
al.
quelle
Ich habe Ihre Lösung gehackt, aber ich kann sie nicht zum Laufen bringen. Ich führe Ihre Befehle aus, öffne Firefox, starte einen Download und lade viel zu schnell herunter. Wenn ich eine ifconfig mache, soll ich unter ifb0 einige RX- und TX-Pakete sehen (weil ich es nicht tue)? Vielen Dank.
Rancidfishbreath
Ich habe einen anderen Ansatz hinzugefügt, der ohne ifb-Schnittstelle funktioniert.
al.
Der zweite Ansatz mit den beiden einfachen Filtern funktioniert hervorragend! Vielen Dank. Ich mag diese Lösung wirklich, weil sie einfach und leicht zu verstehen ist.
Rancidfishbreath
Super danke, neue Frage, wie kann ich das Limit nach dem Laufen aufheben : tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540? Vielen Dank!
SSH Diesen
Wie schalte ich die Drosselung aus und stelle sie wieder so ein, wie sie war? Bitte antworten Sie auf die Version "Unterschiedlicher Ansatz mit zwei einfachen Filtern", wenn Sie so freundlich wären. Der "Mann tc" ist ... wie immer überwältigend.
Geoffrey Anderson
0

Sie haben 1 Lineal wie dieses hinzugefügt. Tc qdisc add dev eth0 root handle 10: htb default 20

affter das wie dein

tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10: 2

ntrance
quelle