Создан: 21.12.2008
Модиф: 21.12.2009
Иванов Аркадий
Фирма Sun дала в свободное использование VirtualBox - нехилую виртуальную машину. Я не заметил проигрыша коммерческим продуктам. Во многом с этой программой работать быстрее и приятнее. Начиная с версии 2.1.0 программа позволяет удобно создавать сетевые интерфейсы и вполне доступна даже для неопытного пользователя.
Немного терминологии: хост-машина это реальная машина с реальной ОС. Гостевая ОС - это ОС, работающая в виртуальной машине.
Следует относиться к виртуальной машине как к самому настоящему отдельно стоящему компьютеру. У него свой BIOS с настройками, у него своё собственное оборудование - материнская плата, память, диски, сетевые контроллеры, аудио-контроллер, ... Вы должны установить туда операционную систему, напихать туда программ. То, что этот компьютер работает внутри вашего компьютера, не слишком важно. С помощью виртуальных машин вы сможете смоделировать реальные ситуации совместной работы нескольких компьютеров и вам не придётся для этого покупать кучу железа, подключать к электричеству, захламлять столы корпусами и мониторами.
Для этой виртуальной машины есть специальные ядерные модули, без которых она работать не хочет, в отличие от QEMU.
Последовательность установки и запуска:
- Установить пакеты: apt-get install virtual-box virtualbox-common
- Если ядро не стандартное (как у меня), то надо скомпилировать модуль vboxdrv для ядра:
- установить пакеты kernel-source-virtualbox kernel-source-virtualbox-*
- В каталоге /usr/src/kernel/... раскрыть исходники: tar xjf ... для каждого bz2-файла
- Перейти в очередной каталог с исходниками
- скомпилить модуль для вашего ядра (make)
- установить модуль в каталог с модулями (драйверами) (make install)
- повторить это для каждого необходимого модуля (vboxdrv, vboxnetflt, vboxadd, vboxvfs)
- добавить модули в рабочую систему (modprobe vboxdrv && modprobe vboxnetflt && ...)
- записать нужные модули в /etc/modules , чтобы загружались в ядро при перезапуске системы. - Если ядро стандартное, то установить пакет kernel-modules-virtualbox для вашего ядра, сделать 2 последних шага предыдущего пункта.
- Сделать общий доступ к устройству vboxdrv и vboxnetctl (chmod 777 /dev/vbox*).
- Добавить в систему устройство tun. (modprobe tun)
- Сделать общий доступ к устройству tun (chmod 777 /dev/net/tun).
- Запустить виртуальную машину в командной строке:
VirtualBox - Создать новую гостевую ОС (создать диск, установить виртуальный Linux или Windows).
Шаги по созданию виртуальных ОС фирма SUN блестяще подготовила и они не вызовут труда даже у неопытных пользователей. Интерфейс программы русский и понятный.
Вот картинка первого шага, которые вы делаете при создании новой виртуальной машины (жмите кнопку [Создать]):
Далее вы должны указать размер памяти, создать файл, который будет соответствовать диску виртуальной машины. При создании файла указывайте "Динамически расширяющийся образ".
В этом случае файл образа диска виртуальной машины будет расти только по мере того, как вы будете что-то записывать на диск виртуальной машины.
В результате вы будете иметь окно управления со списком ваших виртуальных машин. Например такое:
Теперь скажу о том, как устанавливать новую систему в эту виртуальную машину. Вы можете это сделать с DVD, а можете также c файла ISO-образа системы. Файл ISO-образа следует подключить в виртуальную машину. Для этого вы жмёте в вышеприведённом окне на "CD/DVD-ROM" и указываете файл образа:
Я обычно использую при настройке сети режим, когда интерфейс сетевой машины работает как полноценный сетевой контроллер со своим IP-адресом и виртуальная машина видна в сети так же как была бы видна реальная машина. В окне сетевых настроек это выглядит так:
Именно режим Хост-интерфейс даёт вам полноценную сеть.
Что касается версии 2.1.0 и выше, на этом моё описание закончено. Надеюсь вы сможете легко воспользоваться им.
Руководство от SUN просто великолепно и программа обладает ещё множеством замечательных свойств. Прочитайте фирменное описание.
Хозяйке на заметку:
- Запуск виртуальной машины из командной строки делается так:
VBoxManage startvm название_виртуальной_машины
- Клонирование виртуального диска (клонированный диск будет иметь другой UUID):
VBoxManage clonehd disk1 disk2
Замечания: До версии 3.0.4 включительно я имел довольно регулярный геморрой с сетевыми настройками в VirtualBox, если использовал host-интерфейс для режима моста. Возможно, это фишки гостевой системы Alt Linux (service network restart в госте иногда лечит проблему), поскольку в гостевой винде такого не наблюдалось. Также отсутствие доступа к USB-устройствам в OSE версии ограничивает,мягко говоря, варианты использования VirtualBox.
Тут я оставил описание настройки сети в VirtualBox для версий ниже 2.1.0.
Если у вас более свежая версия, то можете не заморачиваться.
Настройка сети в этих версиях несколько посложнее.
Следует немного понимать идею того, как общаются сетевые интерфейсы гостевой ОС виртуальной машины с реальной сетью, в которой работает ваша хост-система. Настройки интерфейсов виртуальной машины в режиме NAT для меня интереса не представляют. У меня есть задачи для виртуальных машин, которые требуют доступа по сети к ним самим. NAT-режим это не позволяет.
Предварительно в системе надо сделать следующее:
- Добавить в работающую систему драйвер tun (modprobe tun) и вписать его в /etc/modules. В ядрах 2.6 это уже штатный драйвер и его не приходится компилировать с нуля.
- Установить пакет, содержащий программу tunctl (у меня пакет так и назывался).
- chmod 777 /dev/net/tun (чтобы устройствами tun/tap мог управлять и непривилегированный пользователь).
В режимах настройки сетевых интерфейсов VirtualBox есть режим "хост-интерфейс". Вы должны указать реальный интерфейс основной машины. Этот режим позволяет сетевому интерфейсу виртуальной машины быть соединённой с этим интерфейсом основной машины так, как-будто они соединены через обычный кабель. Т.е. интерфейс основной машины и интерфейс виртуальной машины должны принадлежать одной сети, чтобы уметь общаться друг с другом. Чтобы не задействовать реальные физические интерфейсы основной машины стоит использовать программный эмулятор Ethernet-интерфейса - устройство TAP. Программа tunctl позволяет создавать и удалять устройства tun/tap в хост систему.
Итак:
- создаём в хост-системе устройство tap0. (tunctl -t tap0 -u arc)
- назначаем ему IP, например, 192.168.2.1. (ifconfig tun0 192.168.2.1)
- связываем его в настройках VirtualBox с eth0 виртуальной машины. (Режим хост-интерфейс)
- запускаем виртуальную машину и назначаем её eth0 IP 192.168.2.2
- теперь мы можем пинговать из виртуальной машины 192.168.2.1 и из хост-системы 192.168.2.2. Т.е. виртуальная машина доступна в нашей сети как 192.168.2.2. Что и требовалось.
Я только что описал простейший вариант настройки сети, позволяющий доступ к виртуальной машине извне.
Более комфортный вариант, когда вам не требуется создавать дополнительных сетей для того, чтобы дать доступ к виртуальной машине, использует механизм моста (bridge).
Вы объединяете с помощью моста несколько интерфейсов и пакеты сетей, обслуживаемых этими интерфейсами прозрачно видны друг для друга. Именно так для вас работают сетевые HUB-ы, switch-и.
Нужно объединить в мост реальный интерфейс eth0 и программный интерфейс tap0 реальной машины (хост-машины). При этом назначать IP-адреса этим интерфейсам уже не надо! Поскольку виртуальная машина будет слать пакеты, попадающие на tap0 и их видит eth0, находящаяся в мосте, интерфейс tap0 прозрачен.
Чтобы создать мост из интерфейсов следует:
Установить пакет bridge-utils (содержит программы для создания устройств-мостов).
Выполнить следующие команды:
# Создадим Ethernet псевдо-интерфейс tap10 и права на устройство отдадим юзеру "arc"
tunctl -t tap10 -u arc
# Подготовим интерфейсы для введения в мост (у них не должно быть IP-адресов)
ifconfig eth0 0.0.0.0 promisc
ifconfig tap10 0.0.0.0 promisc
# Создадим мостик "br0"
brctl addbr br0
brctl stp br0 on
#Добавим в мостик интерфейсы
brctl addif br0 tap10
brctl addif br0 ethint
# Теперь сам мост будет интерфейсом хост-машины, работающим с сетью
ifconfig br0 192.168.100.2 up
ip route add default via 192.168.100.1
# Надо дать возможность юзерам работать с TUN/TAP
chmod 777 /dev/net/tun