Wybrana odpowiedź jest niepoprawna / niepełna. Napotkałem podobny problem, wybrana odpowiedź pomogła, ale niewystarczająco.
Po pierwsze, następujące polecenie nie jest tak naprawdę potrzebne.
tc qdisc del dev eth0 root
„Usunie” root qdisc, ale natychmiast zostanie zastąpiony przez pfifo_fast (abyś nie stracił łączności).
Drugie polecenie:
tc qdisc dodaj uchwyt eth0 root 1: prio
Zamieni qdisc pfifo_fast na prio. Domyślnie kolejka prio ma 3 pasma (0, 1, 2), każdy zarządzany przez jedną klasę (1: 1, 1: 2 i 1: 3).
Pakiety zostaną wysłane do jednego z tych pasm przy użyciu pola TOS pakietu IP. Ta konfiguracja jest wyświetlana po wykonaniu:
tc qdisc ls
patrząc na wartości „priomap”.
Następnie dodajesz qdisc netem:
tc qdisc dodaj dev eth0 nadrzędny uchwyt 1: 1 2: opóźnienie netem 500ms
Za pomocą tego polecenia opóźniasz cały ruch do pasma 1: 1 (aż filtr zostanie zainstalowany).
Ale są dwa zastrzeżenia:
- Twój ruch może mieć inną wartość TOS, a następnie zostać wysłany do innego pasma.
- Kolejkę prio można skonfigurować tak, aby ruch trafiał do innego pasma.
Poniższe rozwiązało problem, który nie ma wpływu na netem, gdy filtr nie jest zastosowany. Zamiast powyższych kroków zrobiłem:
tc qdisc dodaj dev eth0 uchwyt root 1: prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Spowoduje to domyślnie wysłanie całego ruchu do pasma 1: 3.
Następnie dodałem regułę opóźniającą ruch:
tc qdisc dodaj dev eth0 nadrzędny uchwyt 1: 1 10: opóźnienie netem 100ms 10ms
To tworzy qdisc w paśmie 0, ale ponieważ cały ruch trafia do pasma 3, nie miało to na mnie wpływu.
Następnie dodałem filtr:
filtr tc dodaj protokół dev eth0 ip rodzic 1: 0 prio 1 u32 mecz ip dst 10.0.0.1/32 mecz ip dport 80 0xffff flowid 1: 1
Teraz z filtrem wpłynie to tylko na wybrany adres IP / port, ponieważ przekierowujemy wybrany ruch do pasma 0.
Cały pozostały ruch pozostaje niezmieniony, ponieważ nadal przepływa do pasma 3.