Если вы не хотите выполнять какие-либо настройки в гостевой системе, тогда единственным вариантом является 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-клиент виртуальной машины.
Если это все еще не работает, вам, возможно, придется
- остановите службу libvirtd
- убить все процессы dnsmasq, которые еще живы
- запустить службу libvirtd
Примечание. Хост KVM не может заставить виртуальную машину с неизвестной ОС и неизвестной конфигурацией использовать определенную конфигурацию сети. Но если вы знаете, что виртуальная машина использует определенный сетевой протокол конфигурации - скажем, DHCP - вы можете использовать это. Это то, что предполагает этот пост.
Некоторые ОС (например, некоторые дистрибутивы Linux) также позволяют передавать параметры конфигурации сети в гостевую систему, например, через командную строку ядра. Но это очень специфично для ОС, и я не вижу никаких преимуществ по сравнению с методом DHCP.