Что я хотел бы сделать, так это установить конфигурацию сети для гостей (IP-адрес, подсеть, шлюз, широковещательный адрес) из хост-системы. Используемая сетевая настройка находится в bridge
Режим. Как я могу настроить сеть с хоста, а не настраивать самого клиента на статическую конфигурацию сети?
Если я выполню:
virsh edit vm1
Eсть <network>
block также, и я попытался настроить сетевой интерфейс оттуда, но, к сожалению, гостевая виртуальная машина, похоже, не использует его и, как таковая, отключена от сети (поскольку она использует только автоматическую конфигурацию сети) ... Гостевые виртуальные машины являются обеими , Linux и Windows. Любая помощь будет высоко ценится.
Если вы не хотите выполнять какие-либо настройки внутри гостя, то единственный вариант - это DHCP-сервер, который выдает статические IP-адреса. Если вы используете bridge
режим, вероятно, это будет какой-то внешний DHCP-сервер. Обратитесь к его руководству, чтобы узнать, как обслуживать статическую аренду.
Но по крайней мере в форвардных режимах nat
или route
, вы можете использовать встроенный в libvirt dnsmasqd
(Более свежие версии libvirtd поддерживают параметр dnsmasq "dhcp-hostsfile"). Вот как:
Сначала выясните MAC-адреса виртуальных машин, которым вы хотите назначить статические IP-адреса:
virsh dumpxml $VM_NAME | grep 'mac address'
Затем отредактируйте сеть
virsh net-list
virsh net-edit $NETWORK_NAME # Probably "default"
Найти <dhcp>
раздел, ограничьте динамический диапазон и добавьте записи хоста для ваших виртуальных машин
<dhcp>
<range start='192.168.122.100' end='192.168.122.254'/>
<host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
<host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
<host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/>
</dhcp>
Затем перезагрузите виртуальную машину (или перезапустите ее DHCP-клиент, например ifdown eth0; ifup eth0
)
Обновление: я вижу, что есть сообщения о том, что изменение может не вступить в силу после "virsh net-edit". В этом случае попробуйте это после редактирования:
virsh net-destroy $NETWORK_NAME
virsh net-start $NETWORK_NAME
... и перезапустите DHCP-клиент виртуальной машины.
Если это все еще не работает, возможно, вам придется
Примечание. Хост KVM не может заставить виртуальную машину с неизвестной ОС и неизвестной конфигурацией использовать определенную сетевую конфигурацию. Но если вы знаете, что виртуальная машина использует определенный протокол конфигурации сети, например DHCP, вы можете это использовать. Это то, что предполагает этот пост.
Некоторые ОС (например, некоторые дистрибутивы Linux) также позволяют передавать параметры конфигурации сети гостю, например. через командную строку ядра. Но это очень специфично для ОС, и я не вижу преимуществ перед методом DHCP.
virsh net-update
это хорошая команда (вам не нужно перезапускать / уничтожать сеть и т. д.)
видеть: https://www.redhat.com/archives/libvir-list/2012-September/msg01380.html
Я смог сделать dnsmasq
"увидеть" недавно добавленное сопоставление IP-MAC, просто отправив -HUP
сигнал к dnsmasq
обработать. После этого перезагрузки нового гостя было достаточно, чтобы ему был назначен правильный IP-адрес без необходимости перезапуска libvirtd
ни сама сеть.
Официальная документация libvirt (http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network) упоминает этот неофициальный скрипт Perl, который автоматизирует весь процесс: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4
Я сам не пробовал этот скрипт, потому что понял, что файл hosts уже обновлен, и достаточно просто послать сигнал -HUP.
Хост работает под управлением Debian 7.8, а версии пакетов: