Można zmienić typ interfejsu sieci wirtualnej za pomocą polecenia:
VBoxManage controlvm <VM_name> nic1 bridged eth0
Spowoduje to, że pierwszy wirtualny interfejs w tej maszynie wirtualnej zostanie połączony z eth0. Działa to jednak tylko wtedy, gdy gość jest uruchomiony . (Nie jestem pewien, kiedy dokładnie zaktualizuje trwałą konfigurację, ale niektóre testy wykazały, że polecenie nic nie robi, jeśli gość nie jest uruchomiony, ale jeśli tak, zmienia zarówno bezpośredni stan interfejsu, jak i aktualizuje konfigurację .)
Ale można go uruchomić, jeśli często go uruchamiasz, określając interfejs, z którym chcesz się połączyć. Możesz użyć mojego języka programowania NCD, aby zrobić to automatycznie. Poniższy program NCD będzie obserwował stan eth0 i wlan0 i wielokrotnie będzie wywoływał polecenie takie jak powyżej, aby upewnić się, że maszyna wirtualna jest połączona z odpowiednim interfejsem. (w szczególności ten, który ma flagę RUNNING; np. w przypadku interfejsów przewodowych oznacza to, że kabel jest podłączony)
process vbox_iface {
# Wait for link on either eth0 or wlan0. Prefer eth0.
multidepend({"link-eth0", "link-wlan0"}) linkif;
println("Using ", linkif.dev);
# Enter loop (this is a hackish loop).
multiprovide("loop-run");
multidepend({"loop-again", "loop-run"});
println("Setting bridged to ", linkif.dev);
# Set VM NIC config.
runonce({"/usr/bin/VBoxManage", "controlvm", "Windows XP", "nic1", "bridged", linkif.dev});
# Wait some time (in milliseconds).
sleep("2000", "0");
# Continue loop.
multiprovide("loop-again");
}
process lan_iface {
var("eth0") dev;
# Wait for device to appear and for link (e.g. cable).
net.backend.waitdevice(dev);
net.backend.waitlink(dev);
multiprovide("link-eth0");
}
process wlan_iface {
var("wlan0") dev;
# Wait for device to appear and for link (e.g. cable).
net.backend.waitdevice(dev);
net.backend.waitlink(dev);
multiprovide("link-wlan0");
}
Możesz użyć powyższego programu, uruchamiając (jako konto użytkownika, a nie root):
badvpn-ncd --loglevel warning --config-file <file_with_above_script.ncd>
Pamiętaj, aby dostosować nazwy interfejsu w skrypcie i nazwę maszyny wirtualnej. Po sprawdzeniu, że działa, możesz skonfigurować środowisko pulpitu, aby automatycznie uruchamiało badvpn-ncd
proces.