tc / netem i iptables: Opóźnij ruch tylko z określonego adresu IP i portu

1

Mam router Ubuntu z 2 interfejsami sieciowymi. eth0to prywatna sieć i eth1internet. Chcę, aby: Wszystkie pakiety (głównie udp) przychodzące z określonego prywatnego adresu IP (np. 192.168.0.4) do danego portu docelowego (np. 5200) powinny być opóźnione o 500 ms.

Próbowałem kilku rzeczy, w tym tego , tego i tego . Jedynym rezultatem jest brak dodawania opóźnienia.

Jeśli to możliwe, chcę zdecydować, iptablesktóre pakiety powinny zostać opóźnione.

Oto niektóre z moich błędów:

root@ubuntu:~# tc qdisc del dev eth1 root
root@ubuntu:~# tc qdisc ls dev eth1
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
root@ubuntu:~# tc qdisc add dev eth1 root handle 1: htb default 20
root@ubuntu:~# tc class add dev eth1 parent 1: classid 1:1 pfifo_fast
Error: Qdisc "pfifo_fast" is classless.
root@ubuntu:~# tc class add dev eth1 parent 1: classid 1:1 prio
Error: Qdisc "prio" is classless.
root@ubuntu:~# tc class add dev eth1 parent 1: classid 1:10 netem delay 500ms
Error: Qdisc "netem" is classless.
root@ubuntu:~# tc class add dev eth1 parent 1:10 netem delay 500ms
Error: Qdisc "netem" is classless.

Co ja robię źle?

rollstuhlfahrer
źródło

Odpowiedzi:

1

próbujesz zastosować „netem” do klasy, a nie do qdisc.

Podstawową ideą jest to, że musisz utworzyć root qdisc, (tak jak zrobiłeś) zastosować klasę do tej, która może mieć klasy potomne, te klasy potomne muszą mieć tę samą metodę ruchu co rodzic (w tym przypadku htb). do tych klas liści można następnie zastosować qdisc i tam należy podać netem (lub pfifo_fast, lub inne klasowe lub bezklasowe formy) i jego ustawienia.

(lub, jeśli chcesz być globalny, możesz zastosować netem do qdisc root bez użycia klasy (stąd „netem jest bezklasowy”))

root qdisc -> klasa wewnętrzna (nadrzędna) -> klasa liść (dziecko) -> qdisc

oto stary dokument tc, który uznałem za całkiem jasny, chociaż netem nie był najwyraźniej opcją, gdy został napisany lub zaktualizowany.

Piotr
źródło
Dziękuję bardzo za tę odpowiedź. Aby pomóc ci w kontynuowaniu dobrej pracy, zaakceptowałem twoją odpowiedź!
rollstuhlfahrer