воскресенье, 23 октября 2016 г.

QEMU на Windows 7 с двумя и более гостевыми ОС

Для запуска нам понадобится:
  1. Дистрибутив QEMU
  2. Дистрибутив OpenVPN (от него нужен только TAP драйвер)

Установка QEMU не представляет каких-либо сложностей. Всё уву обычно, запускаем инсталлер, потом "next -> next -> ......" и т.д.

После установки эмулятора, необходимо установить драйвера для создания TAP устройств, иначе будет трудно настроить взаимодействие по сети между двумя вируальными машинами.
Для этого запускаем инсталлер OpenVPN и выбираем там "TAP Virtual Ethernet Adapter"



После установки, в списке сетевых адаптеров  появится новое устройство "TAP Windows Adapter V9". Для удобства рекомендую сразу переименовать его например в tap0, так будет удобнее ссылаться на него в скрипте запуска гостевой ОС.

!!! Для каждой гостевой ОС нужен свой TAP адаптер! Для добавления дополнительных адаптеров, необходимо перейти в "C:\Program Files\TAP-Windows\bin". Здесь лежит утилита для управления TAP адаптерами и пара пакетных файла, облегчающих жизнь:
  • addtap.bat - для добавления адаптеров;
  • deltapall.bat - для удаления всех TAP адаптеров.
Для того что-бы добавить адаптер, достаточно запустить пакетный файл addtap.bat. По завершении его работы в списке подключения появится новый TAP-адаптер.
Соответственно для удаления адаптеров, запускаем deltapall.bat.

Создание VM

Первым делом необходимо создать образ диска для гостевой системы.
Например нам нужен диск, размером 20G. Для его создания выполним следующую команду:
 qemu-img.exe create debdb.img 20G

где:
qemu-img.exe - собственно утилита для создания образа

create - команда на создание образа диска

debdb.img - имя создаваемого образа (необходимо указать абсолютный путь к файлу, иначе 
образ будет создан в директории, в текущей директории)

20G - требуемый размер диска

Для получения информации о допустимых ключах и параметрах запуска qemu-img.exe достаточно запустить эту утилиту с ключом --help.

Теперь можно запускать нашу гостевую систему и устанавливать ОС.
Ниже приведён пример команды для запуска. в указанном примере гостевая система имеет следующую конфигурацию:
  • эмулируется процессор QEMU Virtual CPU version 2.5+ с 2 ядрами;
  • используются balloon virtio устройства;
  • выделяется ~1,5Gb оперативной памяти;
  • эмулируется 2 сетевых интерфейса, один будет работать в пользовательском сетевом стеке (через него будем ходить в сеть используя наш физический адамтер), второй будет подключён к TAP адаптеру, для взаимодействия с другими гостевыми системами, в рамках нашего хоста, на котором запущены эти гости.
  • в качестве жёсткого диска используется наш новый образ диска debdb.img;
  • для установки монтируется ISO  образ диска debian-8.6.0-amd64-netinst.iso;
  • загрузка будет производиться со смотированного DVD.

qemu-system-x86_64.exe -L "C:\VM\qemu" -cpu qemu64 -smp 2 -balloon virtio -m 1500M -no-fd-bootchk -boot d -drive format=raw,file=C:\VM\debdb\debdb.img,if=virtio -name "Debian DB" -net nic,vlan=1,macaddr=52:54:00:12:34:56,vlan=1,model=virtio -net user,vlan=1 -net nic,macaddr=52:54:00:12:34:57,model=virtio,vlan=2 -net tap,vlan=2,ifname=tap0 -cdrom C:\Downloads\Debian\debian-8.6.0-amd64-netinst.iso

где:
qemu-system-x86_64.exe - собственно эмулятор;

-L "C:\VM\qemu" - директория куда был установлен эмулятор;

-cpu qemu64 - эмулируем процессор QEMU Virtual CPU version 2.5+;

-smp 2 - эмулируем 2 ядра процессоа;

-balloon virtio - активируем использование устройств virtio;

-m 1500M - выделяем1500M оперативной памяти;

-no-fd-bootchk - Отключаем проверку загрузочной записи для floppy-дисков;

-boot d - указываем, что загружаться нужно с DVD (cdrom);

-drive format=raw,file=C:\VM\debdb\debdb.img,if=virtio - указываем используемый файл образа жёсткого диска, формат файла и используемый драйвер внутри гостевой системы, для работы с жёстким диском;

-cdrom C:\Downloads\Debian\debian-8.6.0-amd64-netinst.iso - указываем ISO образ DVD;

-name "Debian DB" - назначаем имя гостевой системе;

-net nic,vlan=1,macaddr=52:54:00:12:34:56,vlan=1,model=virtio - создаём первый сетевой интерфейс, привязываем его к vlan1 (не путать с 802.1q), назначаем mac-адрес, назначаем модель эмулируемого адаптера

-net user,vlan=1 - указываем интерфейсу  что ему нужно работать в рамках пользовательского сетевого стека;

-net nic,macaddr=52:54:00:12:34:57,model=virtio,vlan=2 - создаём второй сетевой интерфейс, аналогично первому, но назначаем другой mac-адрес  и привязываем к vlan2

-net tap,vlan=2,ifname=tap0 - подключаем сетевой интерфейс к TAP адаптеру с именем tap0;

Подробнее о доступных параметрах и ключах, можно узнать запустив qemu-system-x86_64.exe с ключом --help

 Так как устанавливаемые мною ОС уже имеют встроенную поддержку устройств virtio, я использовал именно их. Использование в гостевой системе этих драйверов, позволяет достичь большей производительности в операциях с сетью и дисковыми операциями.

После запуска гостевой системы, установка ОС происходит в штатном режиме.

Далее необходимо настроить сетевые интерфейсы. Для интерфейса, который работает в рамках пользовательского сетевого стека, оставляем получение параметров по DHCP. Для интерфейса, работающего через TAP адаптер, настраиваем статические параметры (сами указываем нужный ip, маску сети и т.д.). Указанные здесь параметры сети, будут использоваться для взаимодействия между гостевыми системами.

Связь гостевых систем

Для того, чтобы гостевые системы видели друг друга по сети, необходимо настроить соответствующим образом сетевые интерфейсы, через которые будет происходить связь.

В моём случае для связи буду использовать сеть 192.168.56.0/24



Далее нужно связать используемые этими системами TAP адаптеры хоста с помощью моста. 
 
Для этого выделяем объединяемые адаптеры и объединяем их через мост, выбрав соответствующий пункт в контекстном меню этих подключений. В результате появится новое сетевое устройство "Сетевой мост".





Для взаимодействия с гостевыми системами по сети, например для ssh соединений с хоста, есть два варианта.
Первый, это проброс портов на сетевом интерфейсе работающем в рамках пользовательского сетевого стека. 
Второй способ сводится к тому, чтобы указать нужные параметры сети для моста и проконтролировать, чтобы firewall хоста не блокировал подобные подключения.

Второй способ показался мне более привлекательным. В результате, для моста был выделен адрес в сети 192.168.56.0/24.



После этих нехитрых манипуляций, гости увидели друг-друга, и я смог с хоста подключиться к гостям :о)

Использованные ссылки:


- http://wiki.qemu.org/Documentation
- http://xgu.ru/wiki/man:qemu
https://virtuallyfun.superglobalmegacorp.com/2015/01/22/getting-qemus-netware-3-12-onto-the-lan-with-tuntap/

Комментариев нет:

Отправить комментарий