ปัญหาเครือข่ายโหนดหลายโหนดของ Vagrant (Virtualbox) เท่านั้น


9

ฉันกำลังพยายามใช้สภาพแวดล้อมแบบหลาย VM เพื่อทดสอบการปรับใช้ OpenStack และฉันพบปัญหาเครือข่ายด้วยการพยายามสื่อสารจาก VM หนึ่งไปยัง VM ภายในของ VM

ฉันมีสอง Vagrant nodes, โหนดควบคุมคลาวด์และโหนดคำนวณ ฉันใช้เครือข่ายโฮสต์เท่านั้น Vagrantfile ของฉันมีลักษณะเช่นนี้:

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

เมื่อฉันพยายามที่จะเริ่มต้น VM (อิง QEMU) มันบูทได้สำเร็จบน compute1 และ nic เสมือน (vnet0) นั้นเชื่อมต่อผ่านบริดจ์ br100:

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

                        vnet0

เมื่อ QEMU VM ทำการร้องขอไปยังเซิร์ฟเวอร์ DHCP (dnsmasq) ที่รันบนคอนโทรลเลอร์ฉันสามารถเห็นคำขอถึงตัวควบคุมได้เนื่องจากเอาต์พุตบน syslog บนคอนโทรลเลอร์:

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 

อย่างไรก็ตาม DHCPOFFER ไม่เคยทำให้มันกลับไปยัง VM ที่ทำงานบน compute1 หากฉันดูคำขอโดยใช้ tcpdump บนอินเทอร์เฟซ vboxnet3 บนเครื่องโฮสต์ที่รัน Vagrant (Mac OS X) ฉันจะเห็นทั้งคำขอและคำตอบ

$ 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

แต่ถ้าฉัน tcpdump บน eth2 ในการคำนวณฉันเห็นเฉพาะคำขอไม่ใช่คำตอบ:

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

ณ จุดนี้ฉันติดอยู่ ฉันไม่แน่ใจว่าทำไมการตอบกลับของ DHCP จึงไม่ส่งไปที่โหนดการคำนวณ บางทีมันอาจจะเกี่ยวข้องกับการตั้งค่าสวิตช์ / เราเตอร์เสมือนของ VirtualBox หรือไม่

โปรดทราบว่าอินเตอร์เฟส eth2 บนทั้งสองโหนดถูกตั้งค่าเป็นโหมดที่หลากหลาย

คำตอบ:


11

ปัญหาคือต้องมีการตั้งค่าอินเทอร์เฟซให้เป็นโหมดที่หลากหลายผ่าน Vagrant การทำภายในระบบปฏิบัติการของแขกไม่เพียงพอ

ตัวอย่างเช่นหากคุณเพิ่ม NIC สองตัวและ NIC สุดท้ายที่คุณกำหนดคืออันที่จะเชื่อมต่อกับ VMs Vagrantfile ของคุณควรมีสิ่งต่าง ๆ ดังนี้:

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

3
คุณช่วยอธิบายสิ่งที่ "nicpromisc3" ระบุได้หรือไม่?
jayunit100

2
@ jayunit100 มันตั้งค่า nic ที่สาม (ซึ่งตรงกับ eth2) เป็น "promiscuous mode" ซึ่งหมายความว่า VirtualBox จะส่งแพ็กเก็ตไปยัง VM แม้ว่าที่อยู่ MAC ของโฮสต์ปลายทางในแพ็คเก็ตไม่ตรงกับที่อยู่ MAC ของ VM
Lorin Hochstein

1
ดังนั้น --nicpromisc3 ​​คืออะแดปเตอร์ 3 ดังนั้น --nicpromisc2 เป็นอะแดปเตอร์ 2 หรือไม่
CMCDragonkai

@CMCDragonkai ใช่ฉันเชื่ออย่างนั้น
Lorin Hochstein

1
@ อัลเฟรดดูคำถามนี้สำหรับวิธีแก้ไขThe following settings shouldn't exist: customizeข้อผิดพลาด
Nick Craig-Wood
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.