Bagaimana saya bisa secara otomatis beralih adapter yang dijembatani VMs saya antara eth0 dan wlan0 tergantung pada apa yang aktif?

3

Di Virtualbox, saya punya banyak mesin virtual. Tuan rumah adalah laptop Debian yang sering beralih antara koneksi kabel dan nirkabel. Setiap kali saya menggunakan nirkabel (atau menggunakan kabel), saya harus mengubah pengaturan Virtualbox dari setiap mesin virtual dari eth0 ke wlan0 (atau sebaliknya) agar tamu terhubung ke jaringan. Bagaimana saya bisa membuat peralihan ini otomatis?

Matt Alexander
sumber
Apakah Anda mengatakan bahwa Anda menjembatani VM Anda ke antarmuka nirkabel? Karena itu tidak mungkin.
Ambroz Bizjak
@ AmbrozBizjak, Ya, itulah yang saya katakan. Bahkan, kata-kata ini sedang dikirim dari VM tamu di host Debian nirkabel.
Matt Alexander
Ah, jadi sepertinya VBox melakukan beberapa peretasan untuk membuatnya berfungsi. Antarmuka klien nirkabel tidak dapat dijembatani dalam pengertian biasa karena setiap klien nirkabel diberikan satu dan hanya satu alamat MAC.
Ambroz Bizjak
Apakah benar-benar perlu bahwa VM dijembatani? Mengapa perutean tidak berfungsi?
Ambroz Bizjak
Saya menggunakan mereka sebagai server dan mereka membutuhkan IP.
Matt Alexander

Jawaban:

3

Dimungkinkan untuk mengubah jenis antarmuka jaringan virtual dengan perintah seperti:

VBoxManage controlvm <VM_name> nic1 bridged eth0

Ini akan membuat antarmuka virtual pertama dalam VM ini dijembatani dengan eth0. Namun demikian hanya berfungsi saat tamu berjalan . (Saya tidak yakin kapan tepatnya akan memperbarui konfigurasi persisten, tetapi beberapa pengujian telah menunjukkan bahwa perintah tidak melakukan apa-apa jika tamu tidak berjalan, tetapi jika ya, itu akan mengubah keadaan langsung antarmuka dan memperbarui konfigurasi .)

Tapi itu bisa dibuat berfungsi jika Anda memiliki sesuatu yang sering menjalankannya, menentukan antarmuka yang ingin Anda jembatani. Anda bisa menggunakan Bahasa pemrograman NCD untuk melakukan ini secara otomatis. Program NCD di bawah ini akan mengamati status eth0 dan wlan0, dan akan berulang kali memanggil perintah seperti di atas untuk memastikan VM Anda dijembatani dengan antarmuka yang tepat. (khususnya, yang memiliki bendera RUNNING; mis. untuk antarmuka kabel ini berarti bahwa kabel dicolokkan)

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");
}

Anda dapat menggunakan program di atas dengan menjalankan (sebagai akun pengguna Anda, bukan root):

badvpn-ncd --loglevel warning --config-file <file_with_above_script.ncd>

Pastikan untuk menyesuaikan nama antarmuka dalam skrip, dan nama VM. Setelah Anda memverifikasi bahwa itu berfungsi, Anda dapat mengkonfigurasi lingkungan desktop Anda untuk memulai kembali badvpn-ncd proses.

Ambroz Bizjak
sumber