Soluzione 1:
La risposta scelta è errata/incompleta. Ho affrontato un problema simile, la risposta scelta ha dato un po' di aiuto, ma non abbastanza.
Innanzitutto, il seguente comando non è realmente necessario.
tc qdisc del dev eth0 root
"Eliminerà" il root qdisc, ma verrà immediatamente sostituito da uno pfifo_fast (in modo da non perdere la connettività).
Il secondo comando:
tc qdisc add dev eth0 root handle 1:prio
Sostituirà il qdisc pfifo_fast con quello prio. Per impostazione predefinita, la coda prio ha 3 bande (0, 1, 2) ciascuna gestita da una classe (1:1, 1:2 e 1:3).
I pacchetti verranno inviati a una di queste bande utilizzando il campo TOS del pacchetto IP. Questa configurazione viene mostrata quando esegui:
tc qdisc ls
guardando i valori di 'priomap'.
Quindi, aggiungi un netem qdisc:
tc qdisc add dev eth0 parent 1:1 handle 2:netem delay 500ms
Con questo comando ritarderai tutto il traffico diretto alla banda 1:1 (fino a quando il filtro non sarà a posto).
Ma ci sono due avvertimenti:
- Il tuo traffico può avere un valore TOS diverso e quindi essere inviato a un'altra banda.
- Il prio qdisc può essere configurato in modo che il traffico vada su un'altra banda.
Quanto segue ha risolto il mio problema per non essere influenzato dal netem mentre il filtro non è applicato. Invece dei passaggi precedenti, ho fatto:
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
Questo invierà tutto il traffico per impostazione predefinita alla banda 1:3.
Quindi, ho aggiunto la regola per ritardare il traffico:
tc qdisc add dev eth0 parent 1:1 handle 10:netem delay 100ms 10ms
Questo crea il qdisc nella banda 0, ma poiché tutto il traffico va alla banda 3, non mi ha influenzato.
Successivamente, ho aggiunto il filtro:
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
Ora con il filtro, sarà interessato solo l'IP/porta scelto, poiché reindirizziamo il traffico scelto alla banda 0.
Tutto il resto del traffico continua inalterato poiché continua a fluire verso la banda 3.
Soluzione 2:
Ok, ho risolto il mio problema. Si scopre che se esegui le prime 3 righe sopra (quelle "tc qdisc"), ritarderà tutti i pacchetti perché non ci sono ancora filtri. La quarta riga lo cambia per ritardare solo i pacchetti da quel singolo indirizzo IP. È possibile aggiungere ulteriori righe di filtro per aggiungere ulteriori indirizzi IP all'elenco "ritardato". Quindi:non creare una riga "netem delay" senza un filtro che punti ad essa.