Как создать простой сетевой мост в Vagrant?

Как создать простой сетевой мост в Vagrant?

Я пытаюсь настроить самую простую демонстрацию сетевого моста в Vagrant. У меня есть две машины в одной подсети, но в разных локальных сетях, а также машина-мост с двумя интерфейсами и сетевой мост, который настраивается в скрипте подготовки.

Вот мой Vagrantfile:

$bridge_script = <<SCRIPT
sudo apt-get update
sudo apt-get install -y bridge-utils
sudo brctl addbr br0
sudo brctl addif br0 eth1 eth2
sudo ifconfig br0 up
SCRIPT

Vagrant.configure(2) do |config|
  config.vm.define "machine1" do |machine1|
    machine1.vm.box = "hashicorp/precise64"
    machine1.vm.network "private_network", ip: "192.168.1.2",
      virtualbox__intnet: "lan1"
  end

  config.vm.define "bridge" do |bridge|
    bridge.vm.box = "hashicorp/precise64"
    bridge.vm.network "private_network", ip: "0.0.0.0",
      virtualbox__intnet: "lan1"
    bridge.vm.network "private_network", ip: "0.0.0.0",
      virtualbox__intnet: "lan2"
    bridge.vm.provision :shell, inline: $bridge_script
  end

  config.vm.define "machine2" do |machine2|
    machine2.vm.box = "hashicorp/precise64"
    machine2.vm.network "private_network", ip: "192.168.1.3",
      virtualbox__intnet: "lan2"
  end
end

Я не могу заставить ни одну из машин успешно пинговать другую. Используя tcpdumpя обнаружил, что запрос ARP передается от machine1всего пути до machine2, но когда machine2отвечает, ответ даже не доходит eth2до bridge. (Я вижу ответ ARP только при прослушивании eth1в machine2.

Как мне это сделать?

решение1

Оказывается, по умолчанию VirtualBox не позволяет использовать беспорядочные сетевые карты, вам придется явно включить эту функцию.

Я добавил в определение следующие строки bridge, и все заработало:

bridge.vm.provider :virtualbox do |vb|
  vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
  vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
end

Связанный контент