Symulowanie wolnego połączenia z tc

9

Mam system Linux (Centos 5.5), na którym chcę ograniczyć ruch sieciowy. Mam aplikację, którą dystrybuujemy do klientów i chcę ją przetestować na minimalnej zalecanej przepustowości 256 Mb / s. Jak dotąd tutoriale tc, które widziałem, wydają się pozwalać na ograniczenie przepustowości zgodnie z określonymi kryteriami, ale chcę ograniczyć przepustowość we wszystkich sytuacjach (do / z całego adresu IP, bez względu na to, jak wygląda nagłówek IP itp.).

Sugerowany jeden samouczek:

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

ale pojawia się następujący błąd:

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

Jakieś pomysły na ograniczenie przepustowości wchodzącej / wychodzącej z eth0 w każdych okolicznościach?

rancidfishbreath
źródło

Odpowiedzi:

11

Jeśli chcesz zastosować ograniczenie do całego ruchu wychodzącego, wcale nie potrzebujesz filtrów. Po prostu dodaj swoją qdisc do uchwytu głównego interfejsu w następujący sposób:

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

Jeśli chcesz kształtować / nadzorować ruch przychodzący, jest to trochę bardziej skomplikowane. Musisz użyć np. Interfejsu 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

Oto inne podejście przy użyciu dwóch prostych filtrów:

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
glin.
źródło
Hakowałem twoje rozwiązanie, ale nie mogę go uruchomić. Uruchamiam twoje polecenia, otwieram Firefox, zaczynam pobieranie i pobieranie zbyt szybko. Kiedy wykonuję ifconfig, czy mam zobaczyć pakiety RX i TX w ifb0 (bo tego nie robię)? Dzięki.
rancidfishbreath
Dodałem inne podejście, które działa bez interfejsu ifb.
al.
Drugie podejście z wykorzystaniem dwóch prostych filtrów działa świetnie! Dzięki wielkie. Naprawdę podoba mi się to rozwiązanie, ponieważ jest proste i łatwe do zrozumienia.
rancidfishbreath
Niesamowite Dziękuję newb pytanie, w jaki sposób można usunąć limit po uruchomieniu: tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540? Dzięki!
SSH,
Jak wyłączyć dławienie i przywrócić go do poprzedniego stanu? Pls reagują na wersję „innego podejścia przy użyciu dwóch prostych filtrów”, jeśli bylibyście tak mili. „Man tc” jest ... przytłaczający jak zwykle.
Geoffrey Anderson
1

Może to być trochę poza twoim zasięgiem, ale WAN-emu bardzo dobrze emuluje środowiska o dziwnych wymaganiach dotyczących przepustowości i opóźnień [1]

[1]: http://speed.cis.nctu.edu.tw/wanemu/ WAN-emu

Marcin
źródło
Za pomocą modułu netem tc można również symulować łącza o dużych opóźnieniach lub stratności
al.
0

Dodałeś 1 linijkę jak ta tc qdisc dodaj dev eth0 uchwyt root 10: htb default 20

afer to jak twój

filtr tc dodaj protokół dev eth0 ip rodzic 10: prio 2 flowid 10: 2

ntrance
źródło