如何在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。 (我只eth1在 監聽時看到 ARP 回應machine2

我怎樣才能讓它發揮作用?

答案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

相關內容