Simuler une connexion lente avec tc

9

J'ai une box Linux (Centos 5.5) sur laquelle je souhaite limiter le trafic réseau. J'ai une application que nous distribuons aux clients et je veux la tester sur la bande passante minimale recommandée de 256Mbit / sec. Jusqu'à présent, les didacticiels tc que j'ai vus semblent vous permettre de limiter la bande passante selon certains critères, mais je veux limiter la bande passante dans toutes les situations (vers / depuis toutes les adresses IP, quel que soit l'en-tête IP, etc.).

Un tutoriel m'a suggéré d'utiliser:

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

mais j'obtiens l'erreur suivante:

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

Des idées sur la façon de limiter la bande passante entrant / sortant de eth0 en toutes circonstances?

souffle de poisson rance
la source

Réponses:

11

Si vous souhaitez appliquer une limitation à tout le trafic sortant, vous n'avez absolument pas besoin de filtres. Ajoutez simplement votre qdisc à la poignée racine de l'interface comme ceci:

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

Si vous voulez façonner / contrôler le trafic entrant, c'est un peu plus compliqué. Vous devrez par exemple utiliser une interface IFB:

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

Voici une approche différente, en utilisant deux filtres simples:

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.
la source
J'ai piraté votre solution mais je n'arrive pas à la faire fonctionner. J'exécute vos commandes, j'ouvre Firefox, je lance un téléchargement et le téléchargement trop rapidement. Quand je fais un ifconfig, suis-je censé voir des paquets RX et TX sous ifb0 (parce que je ne le fais pas)? Merci.
rancidfishbreath
J'ai ajouté une approche différente qui fonctionne sans interface ifb.
al.
La deuxième approche utilisant les deux filtres simples fonctionne très bien! Merci beaucoup. J'aime vraiment cette solution car elle est simple et facile à comprendre.
rancidfishbreath
Super merci, nouvelle question, comment puis-je supprimer la limite après avoir exécuté tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540:? Merci!
SSH ce
Comment désactiver la limitation et la rétablir comme elle était? Les pls répondent à la version "approche différente en utilisant deux filtres simples" si vous voulez bien. Le "man tc" est ... écrasant comme d'habitude.
Geoffrey Anderson
0

Vous avez ajouter 1 règle comme celle-ci tc qdisc add dev eth0 root handle 10: htb default 20

affter que comme votre

filtre tc ajouter dev eth0 protocole ip parent 10: prio 2 flowid 10: 2

ntrance
la source