QEMU — свободная программа с открытым исходным кодом для эмуляции аппаратного обеспечения различных платформ.
(wikipedia.org)
Хотя QEMU довольно сильно уступает по производительности коммерческим средствам виртуализации, сразу скидывать его со счетов нельзя. Это один из немногих продуктов, который доступен в портах FreeBSD, продолжает постоянно развиваться и абсолютно бесплатен.
Установку qemu я пропущу, так как это там нет каких то сложностей.
И так имеем FreeBSD с установленной на борту qemu. Приступим, например, к установке WinXP на qemu.
Прежде всего создадим будущее дисковое пространство для будущей WinXP :
$ qemu-img create winxp-c 5G
Этой командой мы создадим 5гиговый фаил, который будет служить в дальнейшем диском для WinXP.
Далее перед тем как запустить qemu подгрузим в ядро нужные ему модули :
# kldload aio
# kldload kqemu
И запускаем :
$ qemu -hda winxp-c -boot d -cdrom WinXP.iso
где WinXP.iso это заранее созданный образ с установочного диска WinXP.
Откроется окно с началом установки WinXP. Все делаете как обычно. Когда все установлено, запускаем qemu уже без cd диска :
$ qemu -hda winxp-c -boot c
Далее настраиваем в WinXP все как вам надо. В принципе если вы хотите побаловаться с WinXP только локально, то на этом все и заканчивается.
Однако бывают разные ситуации, когда требуется держать какие то сервисы или задачи в Win среде, но лишнего системного блока под рукой нет. В этой ситуации может спасти виртуальная система на qemu, работа с которой будет осуществляется через терминальный доступ.
Запускаем qemu c виртуальной сетевой картой :
$ qemu -hda winxp-c -boot c -net nic
Конфигурируем сетевую карту в WinXP таким образом, чтобы можно было потом соединится по терминальному доступу. Это сводится к 3м настройкам :
1) поставить галочку в Мой компьютер -> Свойства -> Удаленные сеансы -> разрешить удаленный доступ к этому компьютеру.
2) Добавить юзера в группу пользователей удаленного рабочего стола и обязательно сделать ему пароль
3) Сконфигурировать брандмауэр.
В свойствах сетевого подключения прописываем ip адреса. У меня такие :
ip: 192.168.2.2
mask: 255.255.255.0
gw: 192.168.2.1
DNS сервера прописывать по желанию. Если вы планируете выпускать WinXP в интернет, то конечно надо. Как вариант можно настроить на FreeBSD DNS редиректор, а в WinXP в качестве DNS сервера прописать 192.168.2.1 . В качестве DNS редиректора советую использовать dnsmasq (/usr/ports/dns/dnsmasq), который практически не требует настройки, он автоматически берет адреса dns серверов из /etc/resolv.conf .
Настроив все в WinXP можно выключить ее и приступить к настройке FreeBSD.
Первое, настроим фаервол. Я использую на своих машинах в качестве фаервола PF (Packet Filter) и приведу пример его конфигурации.
В файле правил /etc/pf.conf настраиваем редирект портов :
rdr on $ext_if proto {tcp udp} from any to any port 6550 -> 192.168.2.2 port 3389
где $ext_if, это интерфейс к которому мы будем соединятся, у меня это виртуальный интерфейс tun0, создаваемый pppoe. Далее, если у вас прописаны запрещающие правила, надо открыть порт во внешку :
pass in on $ext_if proto tcp to any port 6550
и открыть доступ на виртуальный интерфейс tap0, через который мы будем работать с WinXP
pass on tap0 proto {tcp udp} all
На этом настройка pf закончена, далее мы создадим виртуальный интерфейс tap0
# ifconfig tap0 create
и применим правила pf
# pfctl -f /etc/pf.conf
Затем присваиваем ip адрес сетевому интерфейсу
# ifconfig tap0 inet 192.168.2.1
И наконец настает момент истины, собственно сам запуск qemu в НЕ графическом режиме, по сути бует работать в бэкграунде
# qemu -hda winxp-c -boot c -nographic -net tap -net nic &
ждем пока прогрузится Windows и пробуем к ней подцепится с помощью стандартного
подключения к удаленному столу в Windows или с помощью rdesktop в nix системах. В качестве адреса указываем ip адрес $ext_if, а в качестве порта 6550 например так :
$ rdesktop -k en-us 123.123.123.123:6550
где 123.123.123.123 это ip моего tun0 🙂
P.S. : В общем то это не совсем автоматизированный процесс, так как после перезагрузки надо будем снова подключать модули в ядро для qemu и снова создавать и настраивать tap0 интерфейс. Возможно попозже я все это реализую на shell скриптах.
P.P.S. : Как показала практика команда qemu -hda winxp-c -boot c -nographic -net tap -net nic & не всегда корректно работает, на разных шелах. По какой то причине qemu типо ожидает какие то вводимые данные с консоли. Что бы обойти это надо написать qemu -hda winxp-c -boot c -nographic -net tap -net nic < /dev/null &
По крайней мере это прокатывает на sh шеле, на котором зачастую и пишут shell скрипты 😉
© Человек_Разумный
3 комментария
RSS / trackback