KVM / libvirt: Як налаштувати статичні IP-адреси гостя на хості віртуалізації


31

Що я хотів би зробити, це встановити мережеву конфігурацію гостей (IP-адреса, підмережа, шлюз, широкомовна адреса) з хост-системи. Використовувана настройка мережі знаходиться в bridgeрежимі. Як я можу налаштувати мережу від хоста, а не налаштувати самого клієнта на статичну мережу?

Якщо я виконую:

virsh edit vm1

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


2
Чи передавати IP-адреси через зарезервовану оренду DHCP не є можливим?
MadHatter підтримує Моніку

Гм, мабуть, так, але я хотів би призначити VM №1 до IP №1, VM №2 до IP №2 тощо (а не давати їм випадковий IP з моєї оренди). Як ви думаєте, можна було б конфігурувати це так за допомогою DHCP? Якщо це так, я би радий спробувати цей підхід.
бета-версія

2
Я пропоную перейменувати питання на щось на кшталт " KVM / libvirt: Як налаштувати статичні IP-адреси гостя на хості віртуалізації "
Nils Toedtmann

1
Погодьтеся з @NilsToedtmann, будь-які додаткові відомості про використання гіпервізора, як базова ОС тощо, були б корисними. Можуть бути додаткові інструменти управління на основі ОС, які допоможуть налаштувати мережу для віртуалізованих систем. Є великі посібники щодо KVM та LXC для використання з операційними системами на базі SUSE, які можуть використовувати YaST.
Метт

Відповіді:


52

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

Але принаймні в режимах прямого перегляду natабо routeви можете використовувати вбудований libvirt dnsmasqd(Більш новітні версії libvirtd підтримують опцію dnsmasq "dhcp-hostsfile"). Ось як:

Спочатку з’ясуйте MAC-адреси VM, яким ви хочете призначити статичні 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>

Потім перезавантажте свій VM (або перезавантажте його клієнт DHCP, наприклад ifdown eth0; ifup eth0)


Оновлення: я бачу повідомлення про те, що зміни можуть не набути чинності після "virsh net-edit". У цьому випадку спробуйте це після редагування:

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

... та перезапустіть DHCP-клієнт VM.

Якщо це все ще не працює, можливо, доведеться

  • припиніть послугу libvirtd
  • вбивати будь-які процеси dnsmasq, які ще живі
  • запустити сервіс libvirtd

Примітка: Ні в якому разі хост KVM не може змусити VM з невідомою ОС та невідомим конфігурацією використовувати певну мережеву конфігурацію. Але якщо ви знаєте, що VM використовує певний протокол конфігурації мережі - скажімо, DHCP - ви можете використовувати це. Ось що передбачає ця публікація.

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


Дякую, я спробую це і звіту, якщо мені це вдасться.
бета-версія

Класно. Але вам доведеться змінити режим мережі.
Нільс Тодтманн

1
Я приїхав сюди, оскільки маю подібну потребу, і я думаю, що можу пояснити перевагу перед використанням DHCP, принаймні для мого використання. Ситуація, правда, незвична. У мене є сервер, який кожні пару тижнів пересувається між двома мережами. У ньому близько 10 гостей. В одній із мереж є сервер DHCP (який для мене важко контролювати), в іншій - ні. Це майже виключає використання DHCP. Я шукаю спосіб змінити IP-адресу хоста та автоматично оновлювати IP-адреси гостьових тощо. На основі цього (я використовую шеф-кухаря для автоматизації, тож як тільки IP-адреси налаштовані, я добре йти).
Кевін Кін

2
Я можу підтвердити, що зміни не набувають чинності без руйнування та перезавантаження мережі. Я також дивно виявив, що мені довелося відключити, а потім запустити VM. Просто перезавантаження залишило інтерфейс у розбитому стані.
інструбхен

Перезапуск мережі не поновлює оренду DHCP. Для цього вам потрібно видалити файл статусу мережі в / var / lib / libvirtd / dnsmasq
orodbhen


3

Мені вдалося dnsmasq«побачити» щойно додане IP-MAC-mapping, просто відправивши -HUPсигнал в dnsmasqпроцес. Після цього перезавантаження нового гостя було достатньо, щоб йому було призначено правильний IP-адресу, без необхідності перезапускати libvirtdні саму мережу.

В офіційній документації на libvirt ( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network ) згадується цей неофіційний сценарій Perl, який автоматизує весь процес: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

Я сам не пробував цей сценарій, тому що я зрозумів, що файл хостів уже оновлено, і достатньо було просто надіслати сигнал -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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.