Modelagem de tráfego usando tc-netem no macvlan

Modelagem de tráfego usando tc-netem no macvlan

Estou configurando uma rede virtual usando macvlans e conectei o controle de tráfego tc a cada um deles. Defino o atraso para cada um como 90ms. Mas no ping recebo o tempo de 0,02 segundos. Por que o tc não está funcionando no macvlan?

Estou usando os seguintes comandos:

tc qdisc add dev m1 root netem delay 90ms
tc qdisc add dev m2 root netem delay 90ms

e então faça ping do ip de m1 para ip de m2. m1 e m2 são macvlans.

Responder1

Seu problema está relacionado a como o roteamento é feito, não atc,netemoumacvlan.

Ao chegar de um endereço IP pertencente ao host a outro endereço IP pertencente ao host, a rota utiliza a lointerface (loopback), consultando a tabela de roteamento local (hidden, try ip route show table local) e nunca utiliza as interfaces reais onde os endereços IP estavam atribuído a.

Você pode verificar isso perguntando ao kernel a rota que ele escolherá. Por exemplo, se os endereços emm1em2eram 192.0.2.2/24 e 192.0.2.3/24:

# ip route get from 192.0.2.2 to 192.0.2.3
local 192.0.2.3 from 192.0.2.2 dev lo table local uid 0 
    cache <local> 

Se precisar fazer testes com essas interfaces, você precisará de outro sistema com sua própria pilha de roteamento para testá-las. Este sistema pode ser um host real, uma VM, um contêiner ou simplesmente usar um (ou vários) namespaces de rede adicionais, como você provavelmente começou a fazer.

No meu caso hipotético acima, se 192.0.2.1 estivesse emm1da LAN (e om2interface foi mantida desligada para evitar possíveis problemas de ARP não relacionados), ping 192.0.2.1mostraria o atraso, porquem1seria usado:

# ip route get from 192.0.2.2 192.0.2.1
192.0.2.1 from 192.0.2.2 dev m1 uid 0 
    cache 

O primeiro ping normalmente levaria o dobro da penalidade de atraso porque também há uma solicitação ARP feita antes para resolver o link IP, que também fica atrasado.

informação relacionada