Под капотом · Виртуализация · Сеть
Прямое подключение macvtap
Пользователь подключает ВМ к физической карте напрямую, без моста. Для этого он вводит несколько команд:
virsh net-define macvtap-net.xml
virsh net-start macvtap-net
virsh attach-interface vm1 --type network --source macvtap-net \
--model virtio --config
После выполнения команд ВМ получает адрес в ЛВС, но хост и гость перестают видеть друг друга.
- Команда net-define описывает сеть типа bridge с указанием физического интерфейса;
- Команда net-start разрешает подключение, но мост не создаётся;
- Команда attach-interface добавляет ВМ интерфейс этой сети;
- Libvirt создаёт macvtap-устройство поверх eno1 - по одному на интерфейс ВМ.
-
пользователь 1. Пользователь описывает сеть без моста
<network> <name>direct-macvtap</name> <forward mode='bridge'> <interface dev='eno1'/> </forward> </network>Режим bridge в forward означает «macvtap в режиме bridge»: элемента <bridge> здесь нет, потому что моста не будет. Режим должен совпадать с возможностями физического коммутатора: vepa требует VEPA-совместимого коммутатора, passthrough отдаёт карту целиком.
-
libvirt 2. Демон запоминает список физических портов
forward mode='bridge' candidates: eno1
В списке может быть несколько карт - тогда демон выбирает наименее занятую в момент подключения.
-
libvirt 3. Демон создаёт macvtap и отдаёт его QEMU
ip link add link eno1 name macvtap0 type macvtap mode bridge /dev/tapN -> QEMU
macvtap - не мост, а отдельный интерфейс поверх карты: у него свой MAC и своё место в таблице коммутатора.
-
QEMU 4. QEMU подключает карту гостя к этому интерфейсу
-netdev tap,id=hostnet0,ifname=macvtap0 -device virtio-net-pci,netdev=hostnet0,mac=52:54:00:…
Для QEMU это обычный tap: разница только в том, куда устройство смотрит на хосте.
-
сеть 5. Кадры уходят прямо в коммутатор
гость -> macvtap0 -> eno1 -> коммутатор ЛВС
Мост в этом пути не участвует, поэтому нет ни программной коммутации, ни общей точки отказа.
-
гость 6. Гость получает адрес в ЛВС
DHCPDISCOVER -> 192.168.10.88
Адрес выдаёт DHCP-сервер сети: гость выглядит как ещё одна машина на порту коммутатора.