如何在 Vagrant 中创建一个简单的网络桥?

如何在 Vagrant 中创建一个简单的网络桥?

我正在尝试在 Vagrant 中设置最基本的网桥演示。我有两台位于同一子网但位于不同 LAN 上的机器,以及一台具有两个接口的桥接机器和一台在配置脚本中设置的网桥。

这是我的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

我无法让任何一台机器成功 ping 另一台机器。使用时,tcpdump我发现 ARP 请求从machine1一直传递到machine2,但当machine2响应时,响应甚至没有到达eth2。 (我只有在 中 bridge监听 时才能看到 ARP 响应。eth1machine2

我怎样才能让它工作?

答案1

事实证明,VirtualBox 默认不允许您拥有混杂 NIC,您必须明确启用它。

我在定义中添加了以下几行bridge,事情开始起作用了:

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

相关内容