OpenStack을 배포하기위한 테스트 베드로 다중 VM vagrant 환경을 사용하려고하는데 하나의 VM에서 VM 내부 VM으로 통신하려고 할 때 네트워킹 문제가 발생했습니다.
클라우드 컨트롤러 노드와 컴퓨팅 노드라는 두 개의 Vagrant 노드가 있습니다. 호스트 전용 네트워킹을 사용하고 있습니다. 내 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
(QEMU 기반) VM을 시작하려고하면 컴퓨팅 1에서 성공적으로 부팅되고 가상 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는 compute1에서 실행되는 VM으로 다시 돌아 가지 않습니다. Vagrant (Mac OS X)를 실행하는 호스트 컴퓨터의 vboxnet3 인터페이스에서 tcpdump를 사용하여 요청을 보면 요청과 응답을 모두 볼 수 있습니다
$ 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
그러나 계산시 eth2에서 tcpdump하면 응답이 아닌 요청 만 볼 수 있습니다.
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 인터페이스가 무차별 모드로 설정되었습니다.