Necesitaba una interfaz host-only para una máquina virtual VirtualBox en mi FreeBSD 10.2, entonces me dispuse a crear un adaptador ejecutando el comando vboxmanage hostonlyif create el cual falló con el error: "failed to open /dev/vboxnetctl".

El modo de red host-only es un híbrido entre el modo bridge y el modo interno. Permite que las máquinas virtuales se comuniquen entre sí y el host como si estuviesen conectadas a través de una red física, pero no requiere una interfaz física y las máquinas virtuales no tiene acceso al exterior (LAN o Internet). Para ello se crea una interfaz por software en el host.

Esta configuración es útil para hacer pruebas de servicios con máquinas virtuales, o para utilizar múltiples appliances preconfiguradas que deben interactuar entre sí en una red aislada.

Es posible configurar la interfaz por software con la herramienta vboxmanage:

root@hal9000:/usr/home/emi # vboxmanage --help hostonlyif
Oracle VM VirtualBox Command Line Management Interface Version 4.3.30_OSE
(C) 2005-2015 Oracle Corporation
All rights reserved.

Usage:

VBoxManage hostonlyif       ipconfig <name>
                            [--dhcp |
                            --ip<ipv4> [--netmask<ipv4> (def: 255.255.255.0)] |
                            --ipv6<ipv6> [--netmasklengthv6<length> (def: 64)]]
                            create |
                            remove <name>

Para crear la interfaz por software (en caso de que no esté creada) utilizar la orden "create":

root@hal9000:/usr/home/emi # vboxmanage hostonlyif create 
0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to create the host-only adapter
VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterface, interface IHostNetworkInterface
VBoxManage: error: Context: "int handleCreate(HandlerArg *, int, int *)" at line 66 of file VBoxManageHostonly.cpp

Es allí cuando se produce el error "failed to open /dev/vboxnetctl: No such file or directory". Esto se debe a que los módulos vboxnetadp y vboxnetflt de VirtualBox no están cargados en el kernel del host.

En sistemas FreeBSD, es posible verificar esto ejecutando kldstat (similar a lsmod en sistemas Linux):

root@hal9000:/usr/home/emi # kldstat | grep vbox
 3    3 0xffffffff819b9000 6d128    vboxdrv.ko

Para cargarlos, simplemente ejecutar:

root@hal9000:/usr/home/emi # kldload vboxnetadp

En Linux, utilizar modprobe.

El módulo vboxnetadp carga a su vez a vboxnetflt:

root@hal9000:/usr/home/emi # kldstat | grep vbox
 3    3 0xffffffff819b9000 6d128    vboxdrv.ko
16    1 0xffffffff81e53000 3f64     vboxnetadp.ko
17    1 0xffffffff81e57000 29b2     vboxnetflt.ko

Ahora es posible crear la interfaz:

root@hal9000:/usr/home/emi # vboxmanage hostonlyif create
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interface 'vboxnet0' was successfully created

Por defecto se llama "vboxnet0" y queda lista para ser utilizada en cualquier máquina virtual nueva o existente:

root@hal9000:/usr/home/emi # ifconfig vboxnet0
vboxnet0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 0a:00:27:00:00:00
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect
        status: active

Referencias

VBoxManage hostonlyif

VirtualBox, Load the VirtualBox kernel modules - ArchWiki

Es increíble que la ArchWiki me resulte útil hasta para FreeBSD. Es la biblia de GNU/Linux.


Tal vez pueda interesarte


Compartí este artículo