A resposta escolhida está incorreta / incompleta. Eu enfrentei um problema 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 'apagará' a raiz do qdisc, mas será imediatamente substituído por um pfifo_fast (para que você não perca a conectividade).
O segundo comando:
tc qdisc add dev identificador de raiz eth0 1: prio
Substituirá o qdisc pfifo_fast pelo primeiro. Por padrão, a fila do prio possui 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 netem qdisc:
tc qdisc add dev eth0 pai 1: 1 handle 2: netem delay 500ms
Com este comando, você atrasa todo o tráfego para a banda 1: 1 (até que o filtro esteja no lugar).
Mas existem duas advertências:
- Seu tráfego pode ter um valor TOS diferente e depois ser enviado para outra banda.
- O prio qdisc pode ser configurado para que o tráfego vá para outra banda.
A seguir, resolvi meu problema para não ser afetado pelo netem enquanto o filtro não é aplicado. Em vez das etapas 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 2
Por padrão, isso enviará todo o tráfego para a banda 1: 3.
Em seguida, adicionei a regra para atrasar o tráfego:
tc qdisc add dev eth0 pai 1: 1 identificador 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 / porta escolhido será afetado, pois redirecionamos o tráfego escolhido para a banda 0.
Todo o outro tráfego continua inalterado, pois continua a fluir para a banda 3.