QEMU VM не имеет IP

Вопрос или проблема

Я попытался запустить виртуальную машину (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.

Оцените материал
Добавить комментарий

Капча загружается...