VirtualBox 및 Ubuntu 16.04를 사용하여 여러 가상 머신이 동일한 네트워크에서 통신하도록 하는 방법은 무엇입니까? [폐쇄]

VirtualBox 및 Ubuntu 16.04를 사용하여 여러 가상 머신이 동일한 네트워크에서 통신하도록 하는 방법은 무엇입니까? [폐쇄]

저는 로컬 DNS 공격을 시뮬레이션하는 네트워크 보안 연구실(Syracuse University의 SEEDLab에서 개발)을 완성하는 중입니다. 보안 테스트를 위해 server_VM, user_VM 및 Attacker_VM의 세 가지 가상 머신을 생성해야 합니다. Ubuntu 16.04를 실행하는 VirtualBox를 사용하고 있습니다.

가상 머신을 생성했고 이제 Ubuntu 터미널에 명령을 입력하기 위해 가상 머신 사이를 전환하면서 동시에 실행해야 합니다. 동시에 실행하려고 하면 다음 메시지가 계속 나타납니다.

Failed to open a session for the virtual machine User.

Locking of attached media failed. A possible reason is that one of the media is attached to a running VM.

Result Code: VBOX_E_INVALID_OBJECT_STATE (0x80BB0007)

Component: SessionMachine

Interface: IMachine {b2547866-a0a1-4391-8b86-6952d82efaa0}
How do I go about getting the VMs to run simultaneously so that I can communicate with each one by way of command line?

저는 단지 VM을 가동하고 실행하기를 원하며 지금 당장 VM을 작동시킬 수 있다면 만족할 것입니다. 매우 감사합니다.

기타 정보:

각 가상 머신에는 기본 네트워크 모드(NAT)를 사용합니다. 다음은 특정 연구실 웹사이트에 대한 링크입니다.로컬 DNS 실습 설명및 실습 지침을 제공하는 PDF로컬 DNS 실습 지침.

답변1

오류 메시지는 동일한 미디어를 사용하는 가상 머신으로 인해 발생합니다.
이는 가상 머신에 동일한 가상 하드 디스크 이미지를 사용하고 있는데 작동하지 않기 때문일 수 있습니다. 각 가상 머신에는 자체 가상 하드 디스크가 필요합니다.
또 다른 가능성은 Ubuntu 설치 미디어(ISO 파일)가 런타임 시 3개의 가상 머신 모두에 연결된다는 것입니다. 이 ISO는 기본 설치에만 필요하므로 첫 번째 VM을 설치한 후 ISO 연결을 끊고 두 번째 VM에서 사용할 수 있습니다.

네트워킹 부분의 경우 VM은 NAT로 설정되고 10.0.0.x IP 범위를 사용하여 가상 네트워크에 배치됩니다. Virtualbox는 해당 서브넷에 대해 dhcp를 설정하고 DNS 등이 일반 DNS로 전달되는지 확인합니다. 호스트 시스템의 네트워크 구성을 기반으로 이 작업을 수행하므로 올바르게 설정해야 합니다.
대안으로 가상 머신 간에 호스트 전용 네트워킹을 설정할 수도 있습니다. 이 경우 가상 머신은 가상 머신과 호스트에만 표시되는 격리된 네트워크에서 실행됩니다.
어쨌든 우수한 Virtualbox 매뉴얼을 참조하십시오. GUI 구성보다 더 많은 가능성을 제공하는 명령(명령줄만)을 포함하여 네트워킹에 대한 광범위한 섹션이 있습니다.

답변2

Vagrant를 사용하는 경우 다음 Vagrantfile명령을 사용하여 3개의 박스를 구성할 수 있습니다(Ubuntu 16.04).

$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :


##############
### References
# - https://www.vagrantup.com/docs/vagrantfile/machine_settings.html
# - https://www.vagrantup.com/docs/vagrantfile/tips.html
# - https://www.vagrantup.com/docs/networking/forwarded_ports.html
##############

#unless Vagrant.has_plugin?("HostManager")
#  raise 'HostManager plugin not installed!'
#end

image = "ubuntu/xenial64"

Vagrant.configure("2") do |config|
  vboxName1 = "box-101"
  hostname1 = "box1"
  config.vm.define "#{vboxName1}" do |box|
    box.vm.box = "#{image}"
    #box.vm.network :private_network, ip: "192.168.56.101"
    box.vm.network :public_network, use_dhcp_assigned_default_route: true
    box.vm.provider :virtualbox do |v|
      v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
      v.customize ["modifyvm", :id, "--memory", 512]
      v.customize ["modifyvm", :id, "--name", "#{hostname1}"]
    end
  end

  vboxName2 = "box-102"
  hostname2 = "box2"
  config.vm.define "#{vboxName2}" do |box|
    box.vm.box = "#{image}"
    #box.vm.network :private_network, ip: "192.168.56.103"
    box.vm.network :public_network, use_dhcp_assigned_default_route: true
    box.vm.provider :virtualbox do |v|
      v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
      v.customize ["modifyvm", :id, "--memory", 512]
      v.customize ["modifyvm", :id, "--name", "#{hostname2}"]
    end
  end

  vboxName3 = "box-103"
  hostname3 = "box3"
  config.vm.define "#{vboxName3}" do |box|
    box.vm.box = "#{image}"
    #box.vm.network :private_network, ip: "192.168.56.103"
    box.vm.network :public_network, use_dhcp_assigned_default_route: true
    box.vm.provider :virtualbox do |v|
      v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
      v.customize ["modifyvm", :id, "--memory", 512]
      v.customize ["modifyvm", :id, "--name", "#{hostname3}"]
    end
  end
end

지침:

# launches all VMs
$ vagrant up

# ssh into box-101
$ vagrant ssh box-101

사용법에 대한 자세한 내용은 vagrant사용법:을 참조하세요.

$ vagrant

관련 정보