Вопрос или проблема
Я попытался запустить виртуальную машину (VM) на QEMU, но виртуальная машина запущена без IP-адреса, связанного с eth0
. Я настроил мост и интерфейс tap на хосте, и я вижу, что:
brctl show bro
имя моста id моста STP включен интерфейсы
bro 8000.bedc8d16e7d8 нет eno1
tap0
Интерфейсы выглядят нормально:
ip addr show bro
3: bro: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether be:dc:8d:16:e7:d8 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.112/24 brd 192.168.100.255 scope global dynamic bro
valid_lft 540129sec preferred_lft 540129sec
inet6 fe80::bcdc:8dff:fe16:e7d8/64 scope link
valid_lft forever preferred_lft forever
ip addr show eno1
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bro state UP group default qlen 1000
link/ether 98:90:96:9d:d9:83 brd ff:ff:ff:ff:ff:ff
ip addr show tap0
8: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel master bro state DOWN group default qlen 1000
link/ether d2:74:5b:04:81:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.222/24 brd 192.168.100.255 scope global tap0
valid_lft forever preferred_lft forever
Вот команда, которую я использую для запуска виртуальной машины:
sudo qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt -nographic -pflash flash0.img -pflash flash1.img -drive if=none,file=CentOS-7-aarch64-Minimal-1810.iso,id=hd0 -device virtio-blk-device,drive=hd0 -netdev type=tap,id=net0 -device virtio-net-device,netdev=net0,mac=bc:dc:8d:16:e7:d8, -hda centos7-arm.img
В госте нет IP, даже несмотря на то, что DHCP выключен:
[root@localhost ~]# ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether bc:dc:8d:16:e7:d8 brd ff:ff:ff:ff:ff:ff
После того как я попытался настроить через CentOS nmtui
, service network restart
завершился с ошибкой. Найдено в логе:
localhost.localdomain network[4058]: Поднимаем интерфейс eth0: Ошибка: Активация соединения не удалась: IP-конфигурация не могла быть зарезервирована (нет доступного адреса, таймаут и т.д.)
Есть ли у вас идеи, что может быть не так?
Прошло некоторое время с тех пор, как я запускал kvm
гости напрямую из командной строки (я предпочитаю libvirt
, или, более недавно, Proxmox).
Тем не менее, взглянув на определения интерфейсов на хосте и сравнив их с моей рабочей конфигурацией, самое очевидное отличие заключается в том, что ваш интерфейс tap0
имеет IP-адрес 192.168.100.222/24, в то время как у моего нет IP-адреса. (Гость определяет IP-адрес, полученный от DHCP. У интерфейса хоста его не должно быть.)
# brctl show br0
имя моста id моста STP включен интерфейсы
br0 8000.009c029758d6 нет eth0
vnet5
# ip addr show vnet5
12: vnet5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:3c:75:33 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe3c:7533/64 scope link
valid_lft forever preferred_lft forever
# ssh vmguest ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:3c:75:33 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.15/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe3c:7533/64 scope link
valid_lft forever preferred_lft forever
Вы сами задали этот IP-адрес на tap0
или это было побочным эффектом вашей команды kvm
?
Ответ или решение
Проблема: Виртуальная машина QEMU не получает IP-адрес
Если вы столкнулись с ситуацией, когда ваша виртуальная машина (VM), запущенная на QEMU, не получает IP-адрес для интерфейса eth0
, это может быть вызвано несколькими проблемами в конфигурации сети. Давайте разберем ваш случай более детально и рассмотрим, что может быть не так.
1. Проверка настроек сети
Вы указали, что настроили интерфейсы моста и tap на хосте. Из вашего вывода brctl show bro
видно, что интерфейс tap0
прикреплен к мосту bro
. Однако, важно, что tap-интерфейс может не иметь IP-адреса, так как его задача — связывать VM с мостом, который уже имеет IP-адрес.
1.1 Мостовой интерфейс
Ваш мост bro
имеет IP-адрес 192.168.100.112/24
, что является правильной настройкой. Однако tap0
имеет IP-адрес 192.168.100.222/24
. Это может приводить к конфликтам IP-адресов, если он не предназначен для вашей VM. Рекомендуется не назначать IP-адрес для tap0
, чтобы DHCP-сервер мог назначать адреса вашим виртуальным машинам.
1.2 DHCP-сервер
Убедитесь, что в вашей сети работает DHCP-сервер, и он настроен на диапазон IP-адресов, который может быть выдан вашим виртуальным машинам. Если DHCP-сервер не работает или диапазон адресов исчерпан, виртуальная машина не сможет получить IP-адрес.
2. Команда запуска QEMU
Ваше использование следующей команды для запуска VM:
sudo qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt -nographic -pflash flash0.img -pflash flash1.img -drive if=none,file=CentOS-7-aarch64-Minimal-1810.iso,id=hd0 -device virtio-blk-device,drive=hd0 -netdev type=tap,id=net0 -device virtio-net-device,netdev=net0,mac=bc:dc:8d:16:e7:d8, -hda centos7-arm.img
На первый взгляд, ваша команда выглядит корректно. Однако рекомендуется проверить следующие моменты:
-
Используемая MAC-адресация: Убедитесь, что указанный MAC-адрес не конфликтует с другими устройствами в вашей сети. MAC-адрес
bc:dc:8d:16:e7:d8
должен быть уникальным. -
Настройка DHCP на гостевой машине: Убедитесь, что на CentOS настроен DHCP-клиент. В CentOS 7 это можно сделать с помощью
nmtui
или редактированием конфигурационных файлов в/etc/sysconfig/network-scripts/ifcfg-eth0
.
3. Логи и отладка
Вы упомянули, что конфигурация через nmtui
и запуск service network restart
выдавали ошибки, такие как "Connection activation failed: IP configuration could not be reserved". Это может указывать на то, что гостевая машина не может получить IP-адрес по DHCP, возможно, из-за того, что DHCP-сервер не отвечает.
Для отладки:
- Проверьте логи DHCP-сервера на хосте и в гостевой машине.
- Используйте утилиту
tcpdump
на хосте для проверки DHCP-трафика:sudo tcpdump -i bro port 67 or port 68
4. Рекомендации
- Убедитесь, что tap-интерфейс не имеет статического IP-адреса, чтобы он мог эффективно передавать DHCP-запросы.
- Проверьте доступность DHCP-сервера в вашей сети и его настройки.
- Рассмотрите возможность переключения на управление VM через
libvirt
или Proxmox, что может упростить управление сетевыми настройками и конфигурациями.
Обратите внимание на все эти аспекты при настройке QEMU. Надеюсь, это поможет вам устранить возникшую проблему с отсутствием IP-адреса у вашей VM.