Vagrant (Virtualbox) yalnızca ana makine için çok düğümlü ağ sorunu


9

OpenStack dağıtımı için bir test yatağı olarak bir multi-VM vagrant ortamı kullanmaya çalışıyorum ve bir VM'den VM içinde bir VM'den iletişim kurmaya çalışırken bir ağ sorunu ile karşılaşıyorum.

İki Vagrant düğümü, bir bulut denetleyici düğümü ve bir işlem düğümü var. Yalnızca ana bilgisayar ağını kullanıyorum. Benim Vagrantfile şöyle görünüyor:

Vagrant::Config.run do |config|

  config.vm.box = "precise64"

  config.vm.define :controller do |controller_config|
    controller_config.vm.network :hostonly, "192.168.206.130" # eth1
    controller_config.vm.network :hostonly, "192.168.100.130" # eth2
    controller_config.vm.host_name = "controller"
  end

  config.vm.define :compute1 do |compute1_config|
    compute1_config.vm.network :hostonly, "192.168.206.131" # eth1
    compute1_config.vm.network :hostonly, "192.168.100.131" # eth2
    compute1_config.vm.host_name = "compute1"
    compute1_config.vm.customize ["modifyvm", :id, "--memory", 1024]
  end
end

Bir (QEMU tabanlı) VM başlatmaya çalıştığımda, compute1 üzerinde başarıyla önyükleme yapıyor ve sanal nic (vnet0) bir köprü, br100 ile bağlı:

root@compute1:~# brctl show 100
bridge name bridge id       STP enabled interfaces
br100       8000.08002798c6ef   no      eth2

                        vnet0

QEMU VM, denetleyicide çalışan DHCP sunucusuna (dnsmasq) bir istekte bulunduğunda, denetleyicideki syslog'daki çıktı nedeniyle isteğin denetleyiciye ulaştığını görebilirim:

Aug  6 02:34:56 precise64 dnsmasq-dhcp[12042]: DHCPDISCOVER(br100) fa:16:3e:07:98:11 
Aug  6 02:34:56 precise64 dnsmasq-dhcp[12042]: DHCPOFFER(br100) 192.168.100.2 fa:16:3e:07:98:11 

Ancak, DHCPOFFER bunu asla compute1 üzerinde çalışan VM'ye geri döndürmez. Vagrant (Mac OS X) çalıştıran ana makinemdeki vboxnet3 arabiriminde tcpdump kullanarak istekleri izlersem, hem istekleri hem de yanıtları görebilirim

$ sudo tcpdump -i vboxnet3  -n port 67 or port 68
tcpdump: WARNING: vboxnet3: That device doesn't support promiscuous mode
(BIOCPROMISC: Operation not supported on socket)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vboxnet3, link-type EN10MB (Ethernet), capture size 65535 bytes
22:51:20.694040 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280
22:51:20.694057 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280
22:51:20.696047 IP 192.168.100.1.67 > 192.168.100.2.68: BOOTP/DHCP, Reply, length 311
22:51:23.700845 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280
22:51:23.700876 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280
22:51:23.701591 IP 192.168.100.1.67 > 192.168.100.2.68: BOOTP/DHCP, Reply, length 311
22:51:26.705978 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280
22:51:26.705995 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280
22:51:26.706527 IP 192.168.100.1.67 > 192.168.100.2.68: BOOTP/DHCP, Reply, length 311

Ancak, bilgi işlem üzerinde eth2 üzerinde tcpdump, cevapları değil, sadece istekleri görüyorum:

root@compute1:~# tcpdump -i eth2 -n port 67 or port 68
tcpdump: WARNING: eth2: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
02:51:20.240672 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280
02:51:23.249758 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280
02:51:26.258281 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fa:16:3e:07:98:11, length 280

Bu noktada sıkıştım. DHCP yanıtlarının neden hesaplama düğümüne gelmediğinden emin değilim. Belki de VirtualBox sanal anahtarının / yönlendiricisinin yapılandırmasıyla ilgili bir şey var mı?

Her iki düğümdeki eth2 arabirimlerinin karışık moda ayarlandığını unutmayın.

Yanıtlar:


11

Sorun, arabirimin Vagrant aracılığıyla karışık moda ayarlanması gerektiğidir, konuk işletim sistemlerinde bunu yapmak yeterli değildir.

Örneğin, iki NIC eklerseniz ve tanımladığınız son NIC, sanal makinelere köprülenecek olan NIC ise, Vagrant dosyanız aşağıdaki gibi bir şey içermelidir:

compute1_config.vm.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]

3
"nicpromisc3" 'ün ne belirlediğini açıklayabilir misiniz?
jayunit100

2
@ jayunit100 Üçüncü nic'i (eth2'ye karşılık gelen) "karışık moda" ayarlar, yani paketteki hedef ana bilgisayarın MAC adresi, paketin MAC adresiyle eşleşmese bile VM'ye paketleri gönderir. VM.
Lorin Hochstein

1
Peki --nicpromisc3 ​​Adaptör 3 mü? Bu nedenle --nicpromisc2 Adaptör 2 mi?
CMCDragonkai

@CMCDragonkai Evet, inanıyorum.
Lorin Hochstein

1
@Alfred , hatanın nasıl düzeltileceği hakkında bu soruya bakın The following settings shouldn't exist: customize.
Nick Craig-Wood
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.