System administration
3 November 2010

Виртуальная Windows под виртуальным Debian

Понадобилось тут на скорую руку поднять винду на VPS. Хостинг выбрал «облачный» от Оверсана, потому как дают на тестирование при регистрации небольшую денюжку. Если сервер держать выключенным и включать по необходимости, то хватит надолго. Впрочем, и последующая оплата при такой схеме по карману не сильно ударит. Но проблема в том, что в качестве предустановленных систем Windows там, само собой, нет. Эта статья является небольшим, но полным и рабочим пошаговым руководством по установке Windows на VPS под Debian. У других хостеров возможно все будет несколько иначе, но суть та же.

Регистрируемся, покупаем IP (далее в качестве примера указан 188.127.231.111), создаем сервер с усановленной ОС Debian.
Устанавливаем необходимое:
apt-get update
apt-get install mc nano screen qemu bridge-utils vde2


создаем тестовый диск на 100M
dd if=/dev/zero of=/root/hda.img count=1 bs=100M

Пробуем запустить:
qemu -M pc -m 1024 -win2k-hack -localtime -hda /root/hda.img -boot d -net nic,vlan=0,macaddr=00:ce:53:e9:71:cf -net user,vlan=0 -name "test" -vnc :1

Если запустилось, то пробуем получить доступ к консоли нашей виртуальной машины с помощью vncviewer. IP 188.127.231.111, порт 1

Получилось? Отлично, идем дальше.

ДНС в /etc/resolv.conf уже прописан, но если изенить настройки сети, то ДНС у нас больше не будет, поэтому сносим пакет:
apt-get remove --purge resolvconf

Нам нужно получить нормальное управление над Windows, для чего прокинем порт 3389 наружу и сделаем NAT, чтобы из Windows был доступ в интернет.
Включаем форвардинг:
echo 1 > /proc/sys/net/ipv4/ip_forward
Запускаем редактор:
nano /etc/sysctl.conf
далее ищем строчку #net.ipv4.ip_forward=1 и убираем «решётку»

Добавляем правила для НАТа и форвардинга:
iptables -A FORWARD -i eth0 -o eth1 -s 10.1.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d 10.1.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth1 -j SNAT --to-source 188.127.231.111
iptables -A INPUT -s 188.127.231.111 -i eth1 -p tcp -m tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -s 188.127.231.111 -i eth1 -p tcp -m tcp --dport 3389 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 3389 -j DNAT --to-destination 10.1.1.2:3389


Чтобы при каждом запуске сетевых интерфейсов подгружались правила, сохраним текущие правила
iptables-save > /etc/iptables.conf
А в файл /etc/network/interfaces, добавим строку загрузки «post-up /sbin/iptables-restore < /etc/iptables.conf»

Теперь редактируем файл настроек сети /etc/network/interfaces:

auto eth0 lo eth1 br0

iface lo inet loopback

iface eth0 inet static
address 0.0.0.0

iface eth1 inet static
address 188.127.231.111
netmask 255.255.255.0
gateway 188.127.231.254

iface br0 inet static
address 10.1.1.1
netmask 255.255.255.0
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

post-up /sbin/iptables-restore < /etc/iptables.conf


В файле
/etc/qemu-ifup
комментим все

Создаем /root/qemu-auto и присваиваем нужные права:
echo "" > /root/qemu-auto
chmod 755 /root/qemu-auto
chmod +s /root/qemu-auto


В /root/qemu-auto пишем:
#!/bin/bash

sleep 30
vde_tunctl -b
sleep 1
/sbin/ifconfig tap0 0.0.0.0 promisc up
sleep 1
brctl addif br0 tap0
screen -Sdm qemu qemu -M pc -m 1024 -win2k-hack -localtime -cdrom /root/server2003.iso -hda /root/hda.img -boot d -net nic,macaddr=00:ce:53:e9:71:cf -net tap,ifname=tap0 -name "win2k3" -vnc :1


И в автозагрузку по крону:
crontab -e
@reboot /root/qemu-auto


Качаем откуда-нибудь образ установочного диска с Windows, например так:

wget http ://myserver/server2003.iso

Создаем диск нужного нам размера, мне хватило 5G:
dd if=/dev/zero of=/root/hda.img count=50 bs=100M

И запускаем виртуальную машину:
./qemu-auto

Дальше должно быть все понятно — с помощью VNC заходим на виртуальную машину (как в тестовом примере выше) и видим привычный экран установки Windows. Я устанавливал систему на пяти слотах (очень шустро, но дорого), потом уменьшил количество до двух — вполне комфортно работается. В этом, кстати, и есть преимущество облачного масштабируемого хостинга. В Windows не забываем настроить сеть — IP 10.1.1.2, маска 255.255.255.0, шлюз 10.1.1.1, днс гуглевский — 8.8.8.8 и 8.8.4.4.

Все, мы получили полностью рабочий Windows Server.
А, да, не забудьте после установки убрать из строчки запуска "-vnc :1" или заменить на " -vnc 127.0.0.1:1"
После перезагрузки все оживет само.

Возможно что-то делал не так — дебиан вижу практически в первый раз. Но оно работает и работает так, как мне нужно. Надеюсь, что кому-нибудь пригодится.

PS Не сочтите за рекламу хостера — я к ним никакого отношения не имею.

+25
6.5k 73
Comments 37