Система Orphus
[]

вторник, 11 ноября 2008 г.

Выводим VirtualBox в локальную сеть

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


Я использовал VirtualBox OSE 1.5.6 из репозитория на Ubuntu 8.04.1 Desktop.

Для начала запусти сам VirtualBox, выбери из списка нужную тебе виртуальную машину и открой ее свойства. В левой части окна свойств выбери пункт "Сеть". В правой части выбирает "Хост-интерфейс" в поле "Присоединен к". А ниже в поле "Имя интерфейса" пишем "vbox0" (естественно, без кавычек ;) ). В общем как на скриншоте ниже.




Далее ставим пакет bridge-utils:
sudo apt-get install bridge-utils


И добавляем в /etc/network/interfaces:
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports eth0 vbox0


Теперь редактируем /etc/vbox/interfaces:
vbox0 ИмяЮзера br0
тут ИмяЮзера - пользователь, под которым ты работаешь в системе.

Т.ж. нужно настроить права для /dev/net/tun, чтобы VirtualBox не ругался при запуске гостевой ОС:
sudo chown root:vboxusers /dev/net/tun
sudo chmod g+rw /dev/net/tun


Чтобы не выполнять это каждый раз при запуске Ubuntu открываем файл /etc/udev/rules.d/20-names.rules и ищем строчку (у меня она была в самом низу файла)
KERNEL=="tun", NAME="net/%k"
и дописываем в ее конец
, GROUP="vboxusers", MODE="0660"
т.е. должна получиться такая строчка
KERNEL=="tun", NAME="net/%k", GROUP="vboxusers", MODE="0660"


Теперь настало время перезапустить сеть и демон виртуалбокса:
sudo /etc/init.d/networking restart
sudo /etc/init.d/virtualbox-ose restart

Все готово. Осталось только запустить гостевую систему в VirtualBox'е и убедиться, что все работает. :)

Т.к. IP мы получаем динамически, то надо в гостевой системе сделать соответствующие сетевые настройки, чтобы она получала IP от DHCP сервера из нашей локальной сети.
Если же ты не хочешь или не можешь по какой-то причине использовать DHCP сервер, то измени файл /etc/network/interfaces след. образом:
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1
bridge_ports eth0 vbox0

Теперь твоя гостевая система будет иметь IP 192.168.0.100. Т.ж. не забудь соответствующим образом изменить сетевые настройки гостевой системы.


И... никогда не забывай делать резервные копии, перед внесением изменений в какие-либо конфигурационные файлы!!! ;)


ЗЫ: Можешь на свой страх и риск заюзать нижеприведенный скрипт. Но тебе все равно придется вручную изменить настройки в свойствах виртуальной машины (как это описывалось выше).
Скрипт нужно запускать от root'a. Если ты изменишь значение переменной $ISDHCP на 1, то тебе нужно будет изменить значение следующих трех переменных на свой вкус, хотя можешь и ничего не менять, а оставить как есть.
Еще раз предупрежу: используй этот скрипт исключительно на свой страх и риск, я не несу никакой ответственности если ты запустишь этот скрипт на своей системе.


#!/bin/sh

# Запускать от root'а

ISDHCP=0 # 1 = Использовать DHCP | 0 = Не оспользовать DHCP

ADDRESS=192.168.0.100
NETMASK=255.255.255.0
GATEWAY=192.168.0.1

USER=`whoami`


# Устанавливаем пакет bridge-utils
apt-get install bridge-utils

NODHCP="auto eth0"
NODHCP+="iface eth0 inet manual"
NODHCP+=""
NODHCP+="auto br0"
NODHCP+="iface br0 inet dhcp"
NODHCP+=" bridge_ports eth0 vbox0"

YESDHCP="auto eth0"
YESDHCP+="iface eth0 inet manual"
YESDHCP+=""
YESDHCP+="auto br0"
YESDHCP+="iface br0 inet static"
YESDHCP+=" address $ADDRESS"
YESDHCP+=" netmask $NETMASK"
YESDHCP+=" gateway $GATEWAY"
YESDHCP+=" bridge_ports eth0 vbox0"

# Делаем бэкап /etc/network/interfaces
cp /etc/network/interfaces /etc/network/interfaces_`date +%Y%m%d`

# Настраиваем /etc/network/interfaces
if [ $ISDHCP=0 ] ; then
echo "$NODHCP" > /etc/network/interfaces
else
echo "$YESDHCP" > /etc/network/interfaces
fi

# Настраиваем /etc/vbox/interfaces
echo "vbox0 $USER br0" >> /etc/vbox/interfaces

# Настраиваем права для /dev/net/tun
chown root:vboxusers /dev/net/tun
chmod g+rw /dev/net/tun

# Делаем бэкап /etc/udev/rules.d/20-names.rules
cp /etc/udev/rules.d/20-names.rules /etc/udev/rules.d/20-names.rules_`date +%Y%m%d`

# Заменяем нужную строчку
grep -v 'KERNEL=="tun"' /etc/udev/rules.d/20-names.rules > /etc/udev/rules.d/20-names.rules
echo 'KERNEL=="tun", NAME="net/%k", GROUP="vboxusers", MODE="0660"' >> /etc/udev/rules.d/20-names.rules

# Перезапускаем демон виртуалбокса
sudo /etc/init.d/virtualbox-ose restart

# Перезапускаем сеть
sudo /etc/init.d/networking restart


Похожие статьи

2 коммент.:

Анонимный комментирует... вторник, 18 ноября 2008 г. в 16:23:00 GMT+2

Хе-хе, мысль написать про сеть в virtualbox витала в воздухе: я как раз написал virtualbox networking howto, правда, более заточены советы под gentoo, т.к. в официальном мануале про gentoo ничего написано не было.

Angel 2S2 комментирует... вторник, 18 ноября 2008 г. в 16:28:00 GMT+2

Спасибо, за ссылку, прочитаю с удовольствием :)

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