Я настраиваю виртуальную сеть с помощью macvlans и подключил traffic-control tc к каждому из них. Я установил задержку для каждого в 90 мс. Но на ping получаю время 0,02 секунды. Почему tc не работает на macvlan?
Я использую следующие команды:
tc qdisc add dev m1 root netem delay 90ms
tc qdisc add dev m2 root netem delay 90ms
и затем выполните ping с IP-адреса m1 на IP-адрес m2. m1 и m2 — это macVLAN.
решение1
Ваша проблема связана с тем, как выполняется маршрутизация, а не стк,нетемилимаквлан.
При достижении с IP-адреса, принадлежащего хосту, другого IP-адреса, принадлежащего хосту, маршрут использует интерфейс lo
(loopback), сверяясь с локальной таблицей маршрутизации (скрытой, try ip route show table local
) и никогда не использует фактические интерфейсы, которым были назначены IP-адреса.
Вы можете проверить это, спросив ядро, какой маршрут оно выберет. Например, если адреса нам1им2были 192.0.2.2/24 и 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>
Если вам нужно провести тесты с этими интерфейсами, то вам нужна другая система с собственным стеком маршрутизации для их тестирования. Эта система может быть реальным хостом, виртуальной машиной, контейнером или просто использовать одно (или несколько) дополнительных сетевых пространств имен, как вы, вероятно, начали делать.
В моем гипотетическом случае выше, если 192.0.2.1 был вм1локальная сеть (им2интерфейс был отключен, чтобы избежать возможных не связанных с этим проблем ARP), ping 192.0.2.1
покажет задержку, потому чтом1будет использоваться:
# 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
Самый первый пинг обычно влечет за собой задержку в два раза большую, поскольку до этого выполняется ARP-запрос для разрешения IP-соединения, который также задерживается.