Я пытаюсь добавить фиксированный адрес к конкретному виртуальному хосту, поэтому я закрыл виртуальную машину и использовал sudo virsh net-edit somenet
. После добавления строки
<host mac='52:54:00:26:61:22' name='virt.example.com' ip='192.168.111.111' />
Я сэкономил и ушел. Затем я снова проверил с той же командой, и предыдущее состояние было восстановлено, мои изменения исчезли.
В то же время, когда я смотрю в /etc/libvirt/qemu/networks/somenet.xml
, мои изменения применяются.
Если я снова запустил свою виртуальную машину, она получит IP из пула DHCP (192.168.111.170
), но не по адресу, который я определил выше.
Когда я перезапускаю libvirt-service после изменений, ситуация кажется такой же: в файле конфигурации мои изменения, с virsh
Я вижу ванильное состояние, и виртуальная машина получает неправильный IP-адрес.
Что здесь не так?
Редактировать. Добавляем сюда полный XML. Вот конф, я вижу ниже /etc
:
<network>
<name>somenet</name>
<uuid>80d85710-23bb-1ab6-79e6-cd65c6739714</uuid>
<bridge name='virbr1' stp='on' delay='0' />
<mac address='52:54:00:90:75:1A'/>
<domain name='example.com'/>
<ip address='192.168.111.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.111.100' end='192.168.111.254' />
<host mac='52:54:00:26:61:22' name='virt.example.com' ip='192.168.111.111' />
</dhcp>
</ip>
</network>
Вот конф, я вижу с virsh
:
<network>
<name>somenet</name>
<uuid>80d85710-23bb-1ab6-79e6-cd65c6739714</uuid>
<bridge name='virbr1' stp='on' delay='0' />
<mac address='52:54:00:90:75:1A'/>
<ip address='192.168.111.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.111.128' end='192.168.111.254' />
</dhcp>
</ip>
</network>
Изменения, внесенные в сеть, произойдут при следующем запуске сети. Вам необходимо выполнить эту серию операций.
virsh net-edit somenet
virsh net-destroy somenet
virsh net-start somenet
Для подтверждения этого см. функциональность virsh net-edit
Обратите внимание, что перезапуск такой сети приведет к прекращению сетевого подключения для любых виртуальных машин, использующих эту сеть. Они не восстановят соединение, когда вы снова запустите сеть; вам необходимо перезапустить домены или вручную переместить интерфейс виртуальных машин на новый мост с помощью brctl.
Изменить: libvirt вики описывает эту ситуацию, а также указывает на сценарий, используемый для восстановления сетевых подключений.
Я не узнал «почему», но нашел способ заставить это работать. Итак, если у кого-то такая же проблема, решение было таким:
virsh net-dumpxml /tmp/somenet.xml
virsh net-destroy somenet
virsh net-undefine somenet
/tmp/somenet.xml
virsh net-create /tmp/somenet.xml
virsh net-autostart somenet
, но не удалось error: Requested operation is not valid: cannot set autostart for transient network
virsh net-edit somenet
, Я просто добавил еще одну пустую строку. virsh net-autostart somenet
работал такжеИ, наконец, мой виртуальный хост получил правильный IP!
В любое время, когда вы используете virsh net-edit {{network}}
вам потребуется перезапустить сеть. Поэтому вам нужно будет выполнить команды:
virsh net-edit {{network}}
virsh net-destroy {{network}}
virsh net-start {{network}}
тем не мение
Важно отметить, что каждый раз, когда вы это делаете, любой, кто в настоящее время использует эту виртуальную сеть на своей VMS, теряет соединение, пока вы перезагружаете сеть.
Это займет не более секунд, но в зависимости от частоты добавления статического IP-адреса через DHCP-хост это может вызвать неудобства для ваших пользователей.
Следовательно:
Я бы рекомендовал использовать virsh net-update
. (Источник) Это можно использовать для обновления конфигурации сети без перезапуска сети. В частности, похоже, что вы ищете ip-dhcp-host
характерная черта.
Пример:
virsh net-update default add ip-dhcp-host \
"<host mac='52:54:00:00:00:01' \
name='bob' ip='192.168.122.45' />" \
--live --config
Надеюсь, это было полезно :)
Проблема в том, что для создания постоянной сети вам необходимо:
sudo virsh net-define <XML file>
sudo virsh net-start <net name>
sudo virsh net-autostart <net name>
Ошибка заключается в использовании net-create вместо net-define.
У меня была аналогичная проблема с экземпляром виртуальной машины, сетевые параметры которой изменились несколько месяцев назад. Сегодня я перезапустил всю среду с 12 виртуальными машинами, и этот экземпляр не хотел запускаться. Базовое оборудование было переопределено, поэтому о восстановлении старых значений не могло быть и речи. Использование virsh edit не помогло: старый параметр продолжал сообщаться и использоваться для загрузки.
Я обнаружил, что во время перезагрузки приостановленное изображение в /var/lib/libvirt/qemu/save/.save все еще имело неверные параметры. Удаление файла позволило виртуальной машине ожить.
Единственный побочный эффект заключается в том, что виртуальная машина не возобновляла работу (как это сделали остальные ее братья и сестры), а должна была выполнить полную загрузку, и, возможно, эта процедура была не очень чистой; к счастью, это был второстепенный сервер, который мог себе это позволить. После этого он снова работает и работает нормально.