Я пытаюсь настроить самую простую демонстрацию сетевого моста в 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