if-up-Skript für die Virtualbox-Schnittstelle „Host-Only-Netzwerk“

if-up-Skript für die Virtualbox-Schnittstelle „Host-Only-Netzwerk“

Ich verwende ein Virtualbox-Host-Only-Netzwerk und habe die Schnittstelle vboxnet0.

Auf dem Host (Ubuntu 14) habe ich einige Routen-Mitarbeiter, mehrere Routen-Tabellen (Haupt- und zwei zusätzliche), festgelegte IP-Regeln usw.

Alle Änderungen, die ich an den Routing-Tabellen für die vbonxen0-Schnittstelle auf dem Host vorgenommen habe, führten zum Neustart.

Wie kann ich ein ifup-ähnliches Skript für die vboxnet0-Schnittstelle erstellen?

Antwort1

Bei der Verwendung von VirtualBox sind einige Dinge zu beachten.Host-Only-NetzwerkModus (ab V4.3.36) insbesondere wennÜberbrückungist keine Option und es müssen manuelle, benutzerdefinierte Routen anschließend konfiguriert werden:

  • vboxnet0Geräteknoten istnichtautomatisch nach dem Booten verfügbar (!),
    außer wenn Sie es manuell konfigurieren, /etc/network/interfaceswas zu Störungen führen kann, wenn Virtualbox versucht, eine eigene Instanz zu starten.
  • Es ist nicht einmal verfügbar, wenn vbox(pci|netadp|netflt|drv)-Module geladen sind.
  • Durch die Verwendung vboxmanage hostonlyif createwird lediglich der Geräteknoten hinzugefügt, dieser bleibt jedoch im Status DOWN, der noch nicht geroutet werden kann.
  • vboxnet0Der Gerätezustand bleibt unbekannt, auch wenn die Schnittstelle aufgerufen wird:
    4: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... state UNKNOWN ...
    Jeder Versuch,hochEreignisse von /etc/network/interfacesoder ifupist /etc/network/if-up.d/MYSCRIPTnutzlos, da dieser Zustand nie erreicht wird.
  • Auf dem Host wird esnurverfügbar und einsatzbereit, wenn Ihr erster VM-Gastcomputer startet.

Der einzige Weg zwischenVirtualboxund der Start Ihrer VM, den ich bisher gefunden habe, verwendet einudev-Regeldurch Platzieren einer Datei zB: /etc/udev/rules.d/80-vboxnetmit:

KERNEL=="vboxnet0", SUBSYSTEM=="net", AKTION=="Hinzufügen", RUN+="/bin/bash -c '/bin/sleep 1; /sbin/ip route add xxxx dev vboxnet0'"

was eine Bash-Instanz auslöst. Ich habe die ip route ...Anweisung direkt in die Regeldatei eingefügt, aber alternativ ist es möglich, einfach woanders ein Skript aufzurufen und dort zusätzliche Routenkonfigurationen einzugeben.

Antwort2

3roncos Antwortbietet einige gute Einblicke, wie VirtualBox uns damit über den Tisch zieht, aber ich habe festgestellt, dass seine Udev-Lösung auf meinem Ubuntu 19.04 nicht funktionierte, da die Verbindung zum Zeitpunkt der Ausführung des Skripts noch nicht funktionierte.

Ich habe versucht, die Schnittstelle hinzuzufügen inNetzplanBei dort konfigurierten statischen Routen wurden die Routen jedoch aus unbekannten Gründen ignoriert.

Wenn Ihr System über einen Networkd-Dispatcher verfügt, können Sie hier ein Skript einfügen

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

Hier ist meins:

#!/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

Nun stellt sich heraus, dass dieses Skript nicht ausgeführt wird, wenn die Schnittstelle keinen Eintrag in Netplan hat. Meins enthält einen der ignorierten Routing-Einträge, nur um es syntaktisch korrekt zu machen (es gibt wahrscheinlich eine sauberere Möglichkeit, dies zu tun). Also habe ich

/etc/netplan/01-mynet.yaml

Enthält:

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

verwandte Informationen