script if-up para la interfaz de "red solo de host" de virtualbox

script if-up para la interfaz de "red solo de host" de virtualbox

Estoy usando una red de solo host de Virtualbox y tengo la interfaz vboxnet0.

En el host (Ubuntu 14), tengo personal de ruta, varias tablas de ruta (principales y dos adicionales), reglas de IP establecidas, etc.

Todos los cambios que hice en las tablas de enrutamiento para la interfaz vbonxen0 en el host perdieron el reinicio.

¿Cómo se puede crear un script tipo ifup para la interfaz vboxnet0?

Respuesta1

Hay algunas cosas a tener en cuenta al utilizar VirtualBoxredes solo de hostmodo (al menos V4.3.36), especialmente cuandopuenteNo hay opción y es manual, es necesario configurar rutas personalizadas después:

  • vboxnet0el nodo del dispositivo esnodisponible automáticamente después del arranque (!)
    Excepto cuando lo configura manualmente, /etc/network/interfaceslo que puede interferir cuando virtualbox intenta abrir su propia instancia.
  • Ni siquiera está disponible cuando se cargan los módulos vbox(pci|netadp|netflt|drv).
  • El uso vboxmanage hostonlyif createsimplemente agregará el nodo del dispositivo pero lo dejará en estado ABAJO, que aún no es enrutable.
  • vboxnet0El estado del dispositivo permanecerá desconocido incluso cuando se abra la interfaz:
    4: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... state UNKNOWN ...
    cualquier intento de utilizararribaeventos de /etc/network/interfaces, ifupo /etc/network/if-up.d/MYSCRIPTes inútil ya que ese estado nunca se alcanza.
  • En el host se conviertesolodisponible y listo para usar cuando se inicie su primera máquina invitada VM.

La única manera de llegar entrecaja virtualy el inicio de su VM que he encontrado hasta ahora está usando unregla udevcolocando un archivo por ejemplo: /etc/udev/rules.d/80-vboxnetcon:

KERNEL=="vboxnet0", SUBSYSTEM=="net", ACTION=="add", RUN+="/bin/bash -c '/bin/sleep 1; /sbin/ip ruta agregar xxxx dev vboxnet0'"

lo que desencadena una instancia de bash. Puse la ip route ...declaración directamente en el archivo de reglas, pero alternativamente es posible abrir un script en otro lugar y colocar configuraciones de ruta adicionales allí.

Respuesta2

La respuesta de 3roncoproporciona una buena idea de cómo VirtualBox nos arruina con esto, pero descubrí que su solución Udev no funcionó en mi Ubuntu 19.04, ya que el enlace aún estaba inactivo en el momento en que se ejecutó el script.

Intenté agregar la interfaz enplan de redcon rutas estáticas configuradas allí, sin embargo, por razones desconocidas, las rutas fueron ignoradas.

Si su sistema tiene networkd-dispatcher, puede poner un script aquí

/etc/networkd-dispatcher/routable.d/99-vboxnetworks

Aquí está el mío:

#!/bin/bash

if [ $IFACE == vboxnet2 ]; then
   /sbin/ip route add fdnn:nnnn:nnnn:2::/64 via fdnn:nnnn:nnnn:1::2
   /sbin/ip route add fdnn:nnnn:nnnn:3::/64 via fdnn:nnnn:nnnn:1::3
fi

Ahora resulta que este script no se ejecutará a menos que la interfaz tenga una entrada en netplan. La mía incluye una de las entradas de enrutamiento ignoradas, solo para que sea sintácticamente correcta (probablemente haya una forma más ordenada de hacerlo). Así que tengo

/etc/netplan/01-mynet.yaml

Que contiene:

network:
    ethernets:
            vboxnet2:
                    routes:
                            # These routes are ignored for reasons unknow,
                            # I have included them just so that vboxnet2 gets
                            # a mention here. Actual routes are added by
                            # /etc/networkd-dispatcher/routable.d/99-vboxnetworks
                            #
                            - to: fdnn:nnnn:nnnn:2::/64
                              via: fdnn:nnnn:nnnn:1::2

información relacionada