Řešení 1:
Zvolená odpověď je nesprávná/neúplná. Čelil jsem podobnému problému, zvolená odpověď poskytla určitou pomoc, ale ne dost.
Za prvé, následující příkaz není ve skutečnosti potřeba.
tc qdisc del dev eth0 root
'Odstraní' kořenový disk qdisc, ale okamžitě bude nahrazen diskem pfifo_fast (takže neztratíte připojení).
Druhý příkaz:
tc qdisc add dev eth0 root handle 1:prio
Nahradí pfifo_fast qdisc prio. Ve výchozím nastavení má fronta prio 3 pásma (0, 1, 2), z nichž každé je spravováno jednou třídou (1:1, 1:2 a 1:3).
Pakety budou odeslány do jednoho z těchto pásem pomocí pole TOS balíčku IP. Tato konfigurace se zobrazí, když spustíte:
tc qdisc ls
při pohledu na hodnoty 'priomap'.
Poté přidáte netem qdisc:
tc qdisc add dev eth0 parent 1:1 handle 2:netem delay 500 ms
Tímto příkazem zdržíte veškerý provoz směřující do pásma 1:1 (dokud nebude filtr na svém místě).
Existují však dvě upozornění:
- Váš provoz může mít jinou hodnotu TOS a poté může být odeslán do jiného pásma.
- Prio qdisc lze nakonfigurovat tak, aby provoz šel do jiného pásma.
Následující vyřešilo můj problém tak, aby nebyl ovlivněn netem, když není použit filtr. Místo výše uvedených kroků jsem provedl:
tc qdisc add dev eth0 root handle 1:prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
To odešle veškerý provoz ve výchozím nastavení do pásma 1:3.
Poté jsem přidal pravidlo pro zpoždění provozu:
tc qdisc add dev eth0 parent 1:1 handle 10:netem delay 100ms 10ms
Tím se vytvoří qdisc v pásmu 0, ale protože veškerý provoz jde do pásma 3, neovlivnilo mě to.
Poté jsem přidal filtr:
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.0.0.1/32 match ip dport 80 0xffff flowid 1:1
Nyní s filtrem bude ovlivněna pouze zvolená IP/port, protože přesměrujeme zvolený provoz do pásma 0.
Veškerý ostatní provoz zůstává nedotčen, protože nadále proudí do pásma 3.
Řešení 2:
Dobře, vyřešil jsem svůj vlastní problém. Ukazuje se, že pokud provedete první 3 řádky výše (ty "tc qdisc"), zdrží se všechny pakety, protože ještě nejsou žádné filtry. 4. řádek jej změní tak, aby zpožďoval pouze pakety z této jediné IP adresy. Lze přidat další řádky filtru a přidat další adresy IP do seznamu „zpožděných“. Takže:nevytvářejte řádek "netem delay", aniž by na něj ukazoval filtr.