Я создал образ 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 остановить сеть && systemctl начать сеть
). Это нарушит вашу ссылку, поэтому вам понадобится метод OOB для доступа к вашей машине, если ваша конфигурация не удалась. Если это правильно, вы сможете повторно подключиться через SSH после запуска служб. Для такого рода задач очень важно иметь доступ к машине через OOB, так как это очень легко заблокировать.
В качестве альтернативы и рекомендуется
Это действительно работа, которую должна выполнять libvirt. Используя libvirt, вы можете легко использовать встроенную сеть NAT для виртуальных машин, к которым не требуется доступ извне, но для которых нужен доступ в Интернет. Также проще определять виртуальные машины, создавать согласованные конфигурации и в целом управлять ресурсами.
Вы можете использовать комбинацию virsh
, virt-install
и qemu- img
, чтобы управлять этим через cli. Существует множество других графических интерфейсов, которые можно использовать в качестве альтернативы для управления libvirt, например oVirt или Virtual Machine Manager ( virt-manager
)