KVM /libvirt: как настроить статические гостевые IP-адреса на хосте виртуализации

Что я хотел бы сделать, так это настроить конфигурацию гостевой сети (IP-адрес, подсеть, шлюз, широковещательный адрес) из хост-системы. Используемая настройка сети находится в режиме bridge. Как настроить сеть с хоста, а не настраивать сам клиент на статическую конфигурацию сети?

Если я выполняю:

virsh edit vm1

есть блок <network>, и я попытался настроить сетевой интерфейс оттуда, но, к сожалению, гостевая VM не похоже, использует его и как таковой не подключен к сети (поскольку он использует только автоматическую настройку сети) ... Гостевые виртуальные машины - это как Linux, так и Windows. Любая помощь будет высоко оценена.

22 голоса | спросил beta 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 09 Sep 2014 15:24:02 +0400 2014, 15:24:02

3 ответа


39

Если вы не хотите выполнять какую-либо конфигурацию внутри гостевой системы, единственным вариантом является DHCP-сервер, который передает статические IP-адреса. Если вы используете режим bridge, вероятно, будет какой-то внешний DHCP-сервер. Проконсультируйтесь с его руководством, чтобы узнать, как обслуживать статическую аренду.

Но, по крайней мере, в режимах прямого доступа nat или route, вы можете использовать встроенный «dnsmasq» libvirt (более поздние версии libvirtd поддерживают параметр dhcp-hostsfile dnsmasq). Вот как:

Сначала найдите 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-клиент, например ipdown eth0; ifup eth0)


Обновление: я вижу, что есть сообщения о том, что изменение может не вступить в силу после «virsh net-edit». В этом случае попробуйте это после редактирования:

virsh  net-destroy  $NETWORK_NAME  
virsh  net-start    $NETWORK_NAME  

... и перезагрузите DHCP-клиент VM.

Если это все еще не работает, возможно, вам придется

  • остановить службу libvirtd
  • убить любые процессы dnsmasq, которые все еще живы
  • запустите службу libvirtd

Примечание. Хост KVM не может заставить виртуальную машину с неизвестной ОС и неизвестной конфигурацией использовать определенную сетевую конфигурацию. Но если знаете, что VM использует определенный сетевой протокол конфигурации - скажем, DHCP - вы можете это использовать. Это то, что предполагает этот пост.

Некоторая ОС (например, некоторые дистрибутивы Linux) также позволяет передавать сетевые параметры конфигурации в гостевой, например. через командную строку ядра. Но это очень специфично для ОС, и я не вижу преимуществ по сравнению с методом DHCP.

ответил Nils Toedtmann 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 09 Sep 2014 15:55:32 +0400 2014, 15:55:32
11

virsh net-update - хорошая команда для вас (вам не нужно перезапускать /уничтожать сеть и т. д.)
видеть: https://www.redhat.com/archives/libvir-list /2012-September/msg01380.html

ответил philm 6 52015vEurope/Moscow11bEurope/MoscowFri, 06 Nov 2015 19:46:19 +0300 2015, 19:46:19
3

Я смог сделать 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 и версии пакетов:

  • kvm 1: 1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1
ответил Stefano Rago 14 J000000Tuesday15 2015, 18:06:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132