Masalah jaringan multi simpul hanya host Vagrant (Virtualbox)

9

Saya mencoba menggunakan lingkungan multi-VM gelandangan sebagai testbed untuk menyebarkan OpenStack, dan saya telah mengalami masalah jaringan dengan mencoba berkomunikasi dari satu VM, ke VM-di-dalam-a-VM.

Saya memiliki dua node Vagrant, node cloud controller dan compute node. Saya menggunakan jaringan host-only. Vagrantfile saya terlihat seperti ini:

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

Ketika saya mencoba untuk memulai VM (berbasis QEMU), ia melakukan booting dengan sukses di compute1, dan virtualnya (vnet0) terhubung melalui jembatan, br100:

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

                        vnet0

Ketika QEMU VM membuat permintaan ke DHCP server (dnsmasq) yang berjalan pada controller, saya dapat melihat permintaan mencapai controller karena output pada syslog pada controller:

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 

Namun, DHCPOFFER tidak pernah kembali ke VM yang berjalan pada compute1. Jika saya menonton permintaan menggunakan tcpdump pada antarmuka vboxnet3 pada mesin host saya yang menjalankan Vagrant (Mac OS X), saya bisa melihat permintaan dan balasannya

$ 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

Tapi, jika saya tcpdump pada eth2 saat menghitung, saya hanya melihat permintaan, bukan balasan:

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

Pada titik ini, saya mandek. Saya tidak yakin mengapa balasan DHCP tidak sampai ke node komputasi. Mungkin ada hubungannya dengan konfigurasi switch / router virtual VirtualBox?

Perhatikan bahwa antarmuka eth2 pada kedua node telah diatur ke mode promiscuous.

Lorin Hochstein
sumber

Jawaban:

11

Masalahnya adalah bahwa antarmuka harus diatur ke mode promiscuous melalui Vagrant, melakukannya di dalam sistem operasi tamu tidak cukup.

Misalnya, jika Anda menambahkan dua NIC, dan NIC terakhir yang Anda tentukan adalah yang akan dijembatani ke VM, Vagrantfile Anda harus berisi sesuatu seperti:

compute1_config.vm.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
Lorin Hochstein
sumber
3
dapatkah Anda menjelaskan apa yang "nicpromisc3" tentukan?
jayunit100
2
@ jayunit100 Ini menetapkan nic ketiga (yang sesuai dengan eth2) ke "mode promiscuous", yang berarti bahwa VirtualBox akan mengirim paket ke VM bahkan jika alamat MAC dari host tujuan dalam paket tidak cocok dengan alamat MAC dari VM
Lorin Hochstein
1
Jadi --nicpromisc3 ​​adalah Adaptor 3? Oleh karena itu --nicpromisc2 adalah Adaptor 2?
CMCDragonkai
@ CMCDragonkai Ya, saya percaya begitu.
Lorin Hochstein
1
@Alfred lihat pertanyaan ini untuk cara memperbaiki The following settings shouldn't exist: customizekesalahan.
Nick Craig-Wood