A resposta escolhida está incorreta / incompleta. Eu enfrentei uma questão semelhante, a resposta escolhida deu alguma ajuda, mas não o suficiente.
Primeiro, o seguinte comando não é realmente necessário.
tc qdisc del dev eth0 root
Ele irá 'deletar' o qdisc da raiz, mas será substituído imediatamente por um pfifo_fast (para que você não perca a conectividade).
O segundo comando:
tc qdisc add dev eth0 root handle 1: prio
Substituirá o qdisc pfifo_fast pelo prio. Por padrão, a fila do prio tem 3 bandas (0, 1, 2), cada uma gerenciada por uma classe (1: 1, 1: 2 e 1: 3).
Os pacotes serão enviados para uma dessas bandas usando o campo TOS do pacote IP. Esta configuração é mostrada quando você executa:
tc qdisc ls
olhando para os valores do 'priomap'.
Em seguida, você adiciona um qdisc netem:
tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms
Com este comando você atrasa todo o tráfego indo para a banda 1: 1 (até que o filtro esteja no lugar).
Mas há duas ressalvas:
- Seu tráfego pode ter um valor de TOS diferente e ser enviado para outra banda.
- O qdisc do prio pode ser configurado para que o tráfego vá para outra banda.
O seguinte resolveu meu problema para não ser afetado pelo netem enquanto o filtro não é aplicado. Em vez dos passos acima, eu fiz:
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
Isso enviará todo o tráfego por padrão para a banda 1: 3.
Em seguida, adicionei a regra para atrasar o tráfego:
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 100ms 10ms
Isso cria o qdisc na banda 0, mas como todo o tráfego vai para a banda 3, isso não me afetou.
Depois, adicionei o 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
Agora com o filtro, apenas o IP / port escolhido será afetado, já que redirecionamos o tráfego escolhido para a banda 0.
Todo o tráfego restante não é afetado, pois continua a fluir para a banda 3.