Ne etkin olduğuna bağlı olarak VM'lerin köprülenmiş adaptörlerini eth0 ve wlan0 arasında otomatik olarak nasıl değiştirebilirim?


3

Virtualbox'da bir sürü sanal makinem var. Ana bilgisayar, sık sık kablolu ve kablosuz bağlantı arasında geçiş yapan bir Debian dizüstü bilgisayarıdır. Ne zaman kablosuz olsam (ya da kablolu olursam), konukların ağa bağlanabilmesi için her sanal makinenin Sanal Kutu ayarlarını eth0'dan wlan0'a (veya başka bir yolla) değiştirmem gerekiyor. Bu anahtarı otomatik olarak nasıl yapabilirim?


VM'nizi kablosuz bir arayüze bağladığınızı mı söylüyorsunuz? Çünkü bu mümkün değil.
Ambroz Bizjak

@ BabrozBizjak, Evet, ben de öyle diyorum. Aslında, bu kelimeler kablosuz bir Debian sunucusundaki bir konuk sanal makineden gönderilmektedir.
Matt Alexander

Ah, öyle görünüyor ki VBox işe yaraması için bazı saldırılar yapıyor. Her kablosuz istemciye bir ve sadece bir MAC adresi atandığından, kablosuz istemci arayüzleri her zaman köprülenemez.
Ambroz Bizjak

VM'nin köprülenmiş olması kesinlikle gerekli midir? Yönlendirme neden işe yaramaz?
Ambroz Bizjak

Onları sunucu olarak kullanıyorum ve bu yüzden bir IP'ye ihtiyaçları var.
Matt Alexander

Yanıtlar:


3

Sanal ağ arabiriminin türünü aşağıdaki gibi bir komutla değiştirmek mümkündür:

VBoxManage controlvm <VM_name> nic1 bridged eth0

Bu, bu VM'deki ilk sanal arayüzün eth0'a köprülenmesini sağlayacaktır. Ancak, o yalnızca misafir çalışırken çalışır . (Kalıcı yapılandırmayı tam olarak ne zaman güncelleyeceğinden tam olarak emin değilim, ancak bazı testler misafirin çalışmadığı durumda komutun hiçbir şey yapmadığını göstermiştir, ancak öyleyse hem arayüzün acil durumunu değiştirir hem de yapılandırmayı günceller. .)

Ancak, sık sık çalışan bir şeyiniz varsa, köprülemek istediğiniz arayüzü belirterek, çalışmak için yapılabilir. Benim kullanabilirsiniz NCD programlama dili bunu otomatik olarak yapmak için. Aşağıdaki NCD programı, eth0 ve wlan0'ın durumunu gözlemleyecek ve VM'nizin doğru arayüze köprülendiğinden emin olmak için tekrar tekrar yukarıdaki gibi bir komutu çağıracak. (özellikle, ÇALIŞMA bayrağına sahip olan; örneğin kablolu arayüzler için bu, kablonun takılı olduğu anlamına gelir)

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

Yukarıdaki programı çalıştırarak kullanabilirsiniz (root olarak değil kullanıcı hesabınız olarak):

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

Koddaki arayüz adlarını ve VM adını ayarladığınızdan emin olun. İşe yaradığını doğruladıktan sonra, masaüstü ortamınızı otomatik olarak başlatmak için yapılandırabilirsiniz. badvpn-ncd süreci.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.