четверг, 21 апреля 2011 г.

FreeBSD и VirtualBox bridged networking

Не нашел в сети внятного объяснения (не там искал?), как настроить bridged сеть в гостевой системе под FreeBSD и решил восполнить этот пробел.

Устанавливаем VirtualBox из портов:

# make install -C /usr/ports/emulators/virtualbox-ose

На сервере я обычно отключаю все опции, кроме VNC и WEBSERVICE

     QT4=off "Build with QT4 Frontend"
     DEBUG=off "Build with debugging symbols"
     GUESTADDITIONS=off "Build with Guest Additions"
     DBUS=off "Build with D-Bus and HAL support"
     PULSEAUDIO=off "Build with PulseAudio"
     X11=off "Build with X11 support"
     VDE=off "Build with VDE support"
     VNC=on "Build with VNC support"
     WEBSERVICE=on "Build Webservice"
     NLS=off "Native language support"


Для начала нужно убедиться, что загружены необходимые модули ядра. Для этого добавляем в /boot/loader.conf следующие строки:

if_tap_load="YES"
if_bridge_load="YES"

В /etc/sysctl.conf нужно добавить парочку параметров для if_tap:

net.link.tap.user_open=1
net.link.tap.up_on_open=1
Теперь самое главное - создание псевдо-интерфейсов для гостевой машины:


cloned_interfaces="tap0 tap1 bridge0"
ifconfig_bridge0="addm bge0 addm tap0 addm tap1 up"
Здесь создано два интерфейса tap0, tap1 для двух гостевых машин, и оба объеденены с физическим интерфейсом хостовой машины (у меня bge0) посредством bridge0.
Теперь нужно прописать правильные права на /dev/tap*, чтобы VirtualBox мог с ними работать. Делается это через /etc/devfs.conf:

perm tap0 0666
perm tap1 0666
После этого потребуется перезагрузка. Увы, без этого никак. Дело в том, что модули ядра должны быть загружены именно при загрузке, а не с помощью kldload.
Теперь переходим к настройке собственно гостевых окружений:

VBoxManage modifyvm guest1 --nic1 bridged --bridgeadapter1 tap0
Здесь мы указываем гостевой машине использовать ранее созданный интерфейс tap0. Для каждой машины он должен быть свой. Теперь при загрузке гостевой машины можно использовать в качестве ай-пи адреса любой доступный из той же сети, в которой находится хостовая машина. Для автоматизации можно раздавать адреса из dhcp, но об этом в другой раз.

5 комментариев:

  1. Зачем?
    "VBoxManage modifyvm guest1 --nic1 bridged --bridgeadapter1 tap0"
    В этой стоке можно указать сразу реальный интерфейс. даже для нескольких машин. Айпишнег в боксе выставляете сами.
    Так работает и с несколькими виртуалками.

    У меня на одном физическом интерфейсе несколько виртуалок с несколькими интерфейсами в каждой.

    мой вариант - "VBoxManage modifyvm pfsense --memory 512 --floppy disabled --audio none --nic1 bridged --bridgeadapter1 em0 --nictype1 82540EM --nic2 bridged --bridgeadapter2 em0 --nictype2 82540EM --nic3 bridged --bridgeadapter3 em0 --nictype3 82540EM --nic4 bridged --bridgeadapter4 em0 --nictype4 82540EM --nic5 bridged --bridgeadapter5 em0 --nictype5 82540EM --nic6 bridged --bridgeadapter6 em0 --nictype6 82540EM --nic7 bridged --bridgeadapter7 em0 --nictype7 82540EM --vram 4 --accelerate3d off --acpi on"

    ОтветитьУдалить
  2. Вариант возможный, но важно не забыть в том случае сделать vboxnet_enable="YES" в rc.conf

    ОтветитьУдалить
  3. да, так-то вариант Olax'a проще конечно, но автору спасибо за статью - реально помогла решить проблему

    ОтветитьУдалить
  4. Ребята, спасибо! Очень помогли.

    ОтветитьУдалить
  5. А у меня вариант Olax не прокатывает по причине того, что сеть есть только с внешними хостами, со своим же связи нет.
    Потому что разные IP, в один вылетает а приходит в другой…

    ОтветитьУдалить