Вопрос или проблема
Я использую libvirt-manager
для управления своими виртуальными машинами. Я создаю новую виртуальную машину и виртуальную сеть default
, которая использует NAT.
virsh net-edit default возвращает мне:
<network>
<name>default</name>
<uuid>ec2b5979-dd0c-43db-ab16-99f2e48ef0dd</uuid>
<forward mode="nat"/>
<bridge name="virbr0" stp='on' delay='0'/>
<mac address="52:54:00:0e:b1:4f"/>
<domain name="default"/>
<ip address="192.168.110.1" netmask='255.255.255.0'>
<dhcp>
<range start="192.168.110.128" end='192.168.110.254'/>
</dhcp>
</ip>
</network>
Я настроил своего гостя на Linux для использования этой сети, и устройство настроено на rtl8139. После того, как я запустил виртуальную машину, она видит устройство, но не может получить сетевой адрес.
brctl show показывает мне:
имя моста id моста STP включен интерфейсы
virbr0 8000.5254000eb14f да virbr0-nic
ip link show показывает мне:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue состояние UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние UP mode DORMANT group default qlen 1000
link/ether c8:ff:28:78:44:01 brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue состояние DOWN mode DEFAULT group default qlen 1000
link/ether 52:54:00:0e:b1:4f brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 состояние DOWN mode DEFAULT group default qlen 1000
link/ether 52:54:00:0e:b1:4f brd ff:ff:ff:ff:ff:ff
Одна странная вещь, которую я обнаружил, заключается в том, что на странице «Подробности подключения» в разделе “Сетевые интерфейсы” virbr0
отображается как неактивный, и я не могу его активировать. Попытка активировать его дает мне:
libvirtError: эта функция не поддерживается драйвером подключения: virInterfaceCreate
Если вы ожидаете увидеть virbr0-nic с IP-адресом, вы ошибаетесь – у него не будет адреса на хосте.
Вам нужно войти в гостевую систему и установить там IP или DHCP, сетевой интерфейс гостя получит IP-адрес из диапазона сети по умолчанию, если вы выберете DHCP, и адрес будет виден внутри гостя, а не с хоста.
Для меня я обнаружил, что перезагрузка интерфейса внутри гостевой ОС помогла:
ifdown ens3
ifup ens3
Ответ или решение
Когда виртуальная машина (VM) на базе KVM не может получить сетевой адрес, это может вызывать затруднения и требовать внимательного разбора конфигурации сети. Давайте рассмотрим основные шаги для диагностики и устранения этой проблемы.
1. Проверка конфигурации виртуальной сети
Вы создали виртуальную сеть с именем default
, использующую NAT. Ваша конфигурация выглядит следующим образом:
<network>
<name>default</name>
<uuid>ec2b5979-dd0c-43db-ab16-99f2e48ef0dd</uuid>
<forward mode="nat"/>
<bridge name="virbr0" stp='on' delay='0'/>
<mac address="52:54:00:0e:b1:4f"/>
<domain name="default"/>
<ip address="192.168.110.1" netmask='255.255.255.0'>
<dhcp>
<range start="192.168.110.128" end='192.168.110.254'/>
</dhcp>
</ip>
</network>
Эта конфигурация предполагает, что DHCP-сервер будет выдавать IP-адреса в диапазоне от 192.168.110.128
до 192.168.110.254
. Убедитесь, что DHCP-сервер действительно запущен и настроен правильно. Если все настроено верно, следующий шаг — это проверка конфигурации сетевой карты гостевой ОС.
2. Проверка конфигурации сетевой карты в гостевой ОС
Ваш гость настроен на использование сетевой карты rtl8139
. Убедитесь, что в настройках сети внутри гостя выбрана конфигурация DHCP. Для этого нужно проверить файл конфигурации сети, который может находиться в /etc/network/interfaces
(для Debian/Ubuntu) или /etc/sysconfig/network-scripts/ifcfg-<interface>
(для CentOS/RHEL).
Если в системе активирован DHCP-клиент, то выполняйте следующие команды для перезапуска сетевого интерфейса:
ifdown ens3
ifup ens3
Убедитесь, что у вас установлен соответствующий сетевой пакет, например, dhclient
, для получения IP-адреса по DHCP.
3. Проверка состояния виртуального интерфейса
Команда ip link show
показала, что интерфейс virbr0
находится в состоянии DOWN
. Это может означать, что интерфейс виртуальной сети не активирован, и это может быть причиной проблемы с получением IP-адреса. Вы можете попробовать перезапустить виртуальный интерфейс с помощью команды:
sudo virsh net-start default
Однако, согласно вашему описанию, вы столкнулись с ошибками при попытке активировать интерфейс через графический интерфейс libvirt
. Это может быть связано с ограничениями разрешений или настройками SELinux. Убедитесь, что у вас есть достаточные права для работы с сетью.
4. Устранение неполадок
Если после всех вышеописанных шагов проблема с получением IP-адреса не решена, попробуйте следующие подходы:
-
Перезапуск сетевых служб: Иногда поможет перезапуск служб, отвечающих за DHCP и сети.
-
Проверка логов: Просмотрите логи системных сервисов (например,
syslog
илиmessages
) на наличие ошибок, связанных с сетевым интерфейсом. -
Проверка на наличие конфликтующих настроек: Иногда могут конфликтовать настройки iptables или firewalld, предотвратив получение адресов DHCP.
Заключение
Следуя этим шагам, вы сможете провести диагностику и устранение неполадок, связанных с получением сетевого адреса для вашей виртуальной машины KVM. Убедитесь, что все настройки выполнены корректно и что гостевая ОС способна правильно взаимодействовать с DHCP-сервером. Если у вас возникли дополнительные вопрос или необходима дальнейшая помощь, не стесняйтесь обращаться за поддержкой.