VirtualBox

Создан: 21.12.2008
Модиф: 21.12.2009
Иванов Аркадий

 

    Фирма Sun дала в свободное использование VirtualBox - нехилую виртуальную машину. Я не заметил проигрыша коммерческим продуктам. Во многом с этой программой работать быстрее и приятнее. Начиная с версии 2.1.0 программа позволяет удобно создавать сетевые интерфейсы и вполне доступна даже для неопытного пользователя.

 

Немного терминологии: хост-машина это реальная машина с реальной ОС. Гостевая ОС - это ОС, работающая в виртуальной машине.

 

Следует относиться к виртуальной машине как к самому настоящему отдельно стоящему компьютеру. У него свой BIOS с настройками, у него своё собственное оборудование - материнская плата, память, диски, сетевые контроллеры, аудио-контроллер, ... Вы должны установить туда  операционную систему, напихать туда программ. То, что этот компьютер работает внутри вашего компьютера, не слишком важно. С помощью виртуальных машин вы сможете смоделировать реальные ситуации совместной работы нескольких компьютеров и вам не придётся для этого покупать кучу железа, подключать к электричеству, захламлять столы корпусами и мониторами.

 

Для этой виртуальной машины есть специальные ядерные модули, без которых она работать не хочет,  в отличие от QEMU.

 

 Последовательность установки и запуска:

  1. Установить пакеты: apt-get install virtual-box virtualbox-common
  2. Если ядро не стандартное (как у меня), то надо скомпилировать модуль 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 , чтобы загружались в ядро при перезапуске системы.
  3. Если ядро стандартное, то установить пакет kernel-modules-virtualbox для вашего ядра, сделать 2 последних шага предыдущего пункта.
  4. Сделать общий доступ к устройству vboxdrv и vboxnetctl (chmod 777 /dev/vbox*).
  5. Добавить в систему устройство tun. (modprobe tun)
  6. Сделать общий доступ к устройству tun (chmod 777 /dev/net/tun).
  7. Запустить виртуальную машину в командной строке:
    VirtualBox
  8. Создать новую гостевую ОС (создать диск, установить виртуальный 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-режим это не позволяет.

Предварительно в системе надо сделать следующее:
 

  1. Добавить в работающую систему драйвер tun (modprobe tun) и вписать его в /etc/modules. В ядрах 2.6 это уже штатный драйвер и его не приходится компилировать с нуля.
  2. Установить пакет, содержащий программу tunctl (у меня пакет так и назывался).
  3. 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