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/interfaces
was 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 create
wird 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/interfaces
oderifup
ist/etc/network/if-up.d/MYSCRIPT
nutzlos, 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-vboxnet
mit:
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