Назад | Перейти на главную страницу

Как включить DHCP для устройства «br0» для qemu?

Я создал образ Windows XP и загружаю его с помощью qemu. я использую qemu-bridge-helper для настройки сети. Следуя тоториалам qemu, я настроил /etc/qemu/bridge.conf, чтобы разрешить br0 мостовое устройство.

Вот как я загружаю Windows XP с помощью qemu:

qemu-system-x86_64 --enable-kvm -m 2048 \
  -drive file=winxp.img,if=virtio \
  -net nic,model=virtio \
  -net bridge,br=br0

Образ загружается нормально, но я не получаю IP-адрес. Причина в том, что Windows настроена на использование DHCP, но «br0» не предоставляет DHCP-адрес, поскольку это просто интерфейс моста.

У меня вопрос - как мне настроить "br0", чтобы он давал адреса winxp через DHCP?

(При использовании "сети в пользовательском режиме" через -net user, Windows получает IP-адрес, поэтому драйверы Windows установлены правильно.)

br0 - это всего лишь сетевая абстракция уровня 2, по сути, виртуальный коммутатор. Если на вашем гипервизоре запущен DHCP-сервер, назначьте IP-адрес интерфейсу br0, на который указывает DHCP-сервер (на самом гипервизоре), и пусть DHCP-сервер определяет подсеть, соответствующую сети вашего уровня 3. адрес с соответствующим диапазоном, тогда это будет работать без каких-либо других устройств.

Однако в большинстве случаев при использовании мостового интерфейса в широковещательном домене, к которому вы подключаетесь, уже есть DHCP-сервер. br0 действует как коммутатор, так что трафик передается вашим гостям. Из вашего описания ваших проблем я могу предложить вам пример конфигурации, который решит большинство ваших проблем.

Помните, что при наложении интерфейсов вы должны соблюдать модель OSI. Это означает, что при создании абстракции уровня 2, такой как мост, вы не можете иметь адресацию какого-либо уровня 3 под ним. Это просто не сработает. Поскольку мост действует как коммутатор, вы дадите самому мосту IP-адрес и подключите другие интерфейсы только на канальном уровне. Сюда входят виртуальные интерфейсы для виртуальных машин и физические интерфейсы для подключения внешней сети к указанным виртуальным машинам и гипервизору.

В этой конфигурации eth0 присоединен к br0, а br0 получает вашу адресацию. Виртуальные машины подключаются к br0, а службы DHCP (независимо от того, находятся ли они на вашем гипервизоре или являются внешними по отношению к нему в том же домене уровня 2) будут давать адреса вашим виртуальным машинам.

# cat /etc/network/interfaces

auto eth0
    iface eth0 inet manual

auto br0
    iface br0 inet dhcp
    bridge_ports eth0

Предполагается, что вы используете DHCP для получения адреса для br0. Если нет, вам нужно будет применить статическую адресацию к интерфейсу br0.

Когда это будет сделано, вам нужно будет перезапустить сеть (# systemctl stop networking && systemctl start networking). Это нарушит вашу ссылку, поэтому вам понадобится метод OOB для доступа к вашей машине, если ваша конфигурация не удалась. Если это правильно, вы сможете повторно подключиться через SSH после запуска служб. Для такого рода задач очень важно иметь доступ к машине через OOB, так как ее очень легко заблокировать.

В качестве альтернативы и рекомендуется

Это действительно работа для libvirt. Используя libvirt, вы можете легко использовать встроенную сеть NAT для виртуальных машин, к которым не требуется доступ извне, но которым нужен доступ в Интернет. Также проще определять виртуальные машины, создавать согласованные конфигурации и в целом управлять ресурсами.

Вы можете использовать комбинацию virsh, virt-install, и qemu-img чтобы управлять этим через cli. Существует множество других графических интерфейсов, которые вы можете использовать в качестве альтернативы для управления libvirt, например oVirt или Virtual Machine Manager (virt-manager)