¿Cómo hacer un puente de red simple en Vagrant?

¿Cómo hacer un puente de red simple en Vagrant?

Estoy intentando configurar la demostración de puente de red más básica en Vagrant. Tengo dos máquinas en la misma subred, pero en diferentes LAN, y una máquina puente con dos interfaces y un puente de red que se configura en un script de aprovisionamiento.

Aquí está mi 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

No puedo lograr que ninguna de las máquinas haga ping a la otra con éxito. Al usarlo, tcpdumpdescubrí que una solicitud ARP se pasa desde machine1, machine2pero cuando machine2responde, la respuesta ni siquiera llega eth2a bridge. (Solo veo la respuesta ARP cuando escucho eth1en machine2.

¿Cómo puedo hacer que esto funcione?

Respuesta1

Resulta que, de forma predeterminada, VirtualBox no te permite tener NIC promiscuas, debes habilitarlo explícitamente.

Agregué las siguientes líneas a la bridgedefinición y todo empezó a funcionar:

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

información relacionada