Eu sou novo em usar tc e netem . Quero atrasar o envio de pacotes para um endereço IP específico. No entanto, os comandos abaixo fazem com que todos os pacotes no sistema sejam atrasados, em vez de apenas para o endereço IP 1.2.3.4:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms
tc filter add dev eth0 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 1.2.3.4 flowid 2:1
Meu palpite é que preciso de algum tipo de filtro abrangente no final para especificar que todo o tráfego restante não deve passar pelo netem. Mas não consigo fazer nada funcionar. Como eu faria isso funcionar?
fonte
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.
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:
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:
olhando para os valores do 'priomap'.
Em seguida, você adiciona um netem qdisc:
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:
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:
Por padrão, isso enviará todo o tráfego para a banda 1: 3.
Em seguida, adicionei a regra para atrasar o tráfego:
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:
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.
fonte
Exemplo simples de https://wiki.linuxfoundation.org/networking/netem que permite adiar pacotes para um determinado IP sem afetar nenhum outro tráfego, mesmo durante a configuração:
fonte
Não consegui atrasar o tráfego para um IP, mantendo o tráfego normal para outros IP normal com o método descrito neste segmento.
No entanto, eu consigo fazer isso usando os seguintes comandos.
Atrasar o
15001ms
tráfego para o IP1.2.3.4
do host em que o comando é executado. O comandohostname -I
é usado para obter o IP principal do host, mas o valor pode ser substituído diretamente dentro do comando.Eu tive que adicionar outro filtro com
0ms
atraso para corresponder ao tráfego vindo do host. Com certeza não é elegante, mas não consegui que algo melhor funcionasse.O último comando pode ser substituído para corresponder a uma única porta.
Atrasar o tráfego para a porta em
18583
vez do IP1.2.3.4
.Também encontrei um segundo método nesta resposta para atrasar o tráfego
1.2.3.4:18583
sem causar impacto em outro tráfego.fonte