Luego de compilar VirtualBox en FreeBSD es necesario cargar los módulos del kernel vboxnetflt
y vboxnetadp
a fin de poder utilizar redes host-only. Para ello simplemente se deben agregar las siguientes líneas en el archivo /boot/loader.conf
, que se encarga de indicarle al kernel qué módulos deben ser cargados de forma automática al iniciar el sistema:
# VirtualBox vboxdrv_load="YES" vboxnetflt_load="YES" vboxnetadp_load="YES"
El problema es que esta configuración no funciona. Al intentar iniciar una máquina virtual con un adaptador en modo host-only, falla con el siguiente error en el log (/home/emi/VirtualBox\ VMs/Devuan/Logs/VBox.log
):
00:00:00.596664 ERROR [COM]: aRC=NS_ERROR_FAILURE (0x80004005) aIID={8ab7c520-2442-4b66-8d74-4ff1e195d2b6} aComponent={Console} aText={Failed to open/create the internal network 'HostInterfaceNetworking-vboxnet0' (VERR_SUPDRV_COMPONENT_NOT_FOUND)}, preserve=false 00:00:00.612613 Power up failed (vrc=VERR_SUPDRV_COMPONENT_NOT_FOUND, rc=NS_ERROR_FAILURE (0X80004005))
Esto se debe a una condición de carrera entre los módulos del kernel de VirtualBox. Es necesario cargar los módulos en orden. Primero debe cargarse vboxdvr
y luego los restantes.
Para solucionar este inconveniente se debe optar por la siguiente configuración.
En el archivo /boot/loader.conf
cargar sólo el módulo vboxdvr
:
# VirtualBox vboxdrv_load="YES"
Luego es posible agregar las siguientes líneas dentro del archivo /etc/rc.local
para que los módulos vboxnetflt
y vboxnetadp
sean cargados de forma diferida (una vez que haya sido cargado vboxdvr
):
# VirtualBox /sbin/kldload vboxnetflt /sbin/kldload vboxnetadp
Además, habilitar el servicio "vboxnet" en el archivo /etc/rc.conf
, el cual puede ser útil para habilitar/deshabilitar estos módulos:
# VirtualBox vboxnet_enable="YES"
De esta forma, los módulos vboxnetflt
y vboxnetadp
serán cargados lo suficientemente tarde para que todo funcione correctamente al iniciar el host FreeBSD.