Как включить 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 установлены правильно.)

2
задан 26 October 2016 в 02:49
1 ответ

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 остановить сеть && systemctl начать сеть ). Это нарушит вашу ссылку, поэтому вам понадобится метод OOB для доступа к вашей машине, если ваша конфигурация не удалась. Если это правильно, вы сможете повторно подключиться через SSH после запуска служб. Для такого рода задач очень важно иметь доступ к машине через OOB, так как это очень легко заблокировать.

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

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

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

3
ответ дан 3 December 2019 в 10:36

Теги

Похожие вопросы