Назад | Перейти на главную страницу

Временная блокировка сети виртуальной машины с хост-машины в KVM

Я пытаюсь внести несколько изменений в MAC-адрес работающей виртуальной машины и получить новый IP-адрес. В настоящее время виртуальные машины подключены к внешней сети через интерфейс моста хоста. Я хотел бы временно (10-20 секунд) заблокировать сетевое соединение виртуальной машины с хост-машиной, за исключением пакетов, относящихся к dhcp.

Является ли это возможным?

Если вы используете мостовую сеть для виртуальной машины, просто удалите интерфейс виртуальной машины с адаптера моста, внесите изменения, а затем добавьте его обратно. Если хост - это операционная система Linux, вам понадобится установленный пакет bridge-utils (возможно, он уже установлен). Запустите это:

brctl show

чтобы увидеть, какие устройства моста включены и работают, определите имя вашего моста и сетевой адаптер виртуальной машины, затем удалите его из моста:

brctl delif brdev0 vmdev0 

Сделайте то, что вам нужно сделать на виртуальной машине, и когда вы закончите, добавьте ее обратно в мост:

brctl addif brdev0 vmdev0

PS: приведенные выше команды следует запускать от имени пользователя root.

Конечно, вы можете либо отключить виртуальную машину от хост-сети, либо просто применить соответствующие iptables или ebtables правила, чтобы запретить пакетам идти куда угодно.

Без дополнительной информации о том, как настроена ваша сеть, невозможно дать вам более подробные команды, но это все основные административные задачи.

Я предполагаю, что ваша цель - найти способ применить фильтры для конкретного экземпляра виртуальной машины со стороны хоста? Применение фильтров к исходящему интерфейсу хоста не отличается от любого обычного iptables setup, но тогда виртуальные машины смогут обмениваться данными между собой без фильтрации.

Вы пробовали применять нормальный iptables и ebtables правила к соответствующему vnetNNN интерфейсы в хосте? Я сам не пробовал, но думаю, что это сработает.

Если вы используете libvirt для управления экземплярами QEMU / KVM вы можете virsh dumpxml VMNAME и найдите строку, например <target dev='vnet0'/> чтобы увидеть соответствующий интерфейс vnet.