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 lo
interface (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.1
mostraria 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.