Ich versuche, die einfachste Netzwerkbrückendemo in Vagrant einzurichten. Ich habe zwei Maschinen im selben Subnetz, aber in unterschiedlichen LANs, und eine Brückenmaschine mit zwei Schnittstellen und einer Netzwerkbrücke, die in einem Bereitstellungsskript eingerichtet wird.
Hier ist meins 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
Ich kann keine der Maschinen dazu bringen, die andere erfolgreich anzupingen. Mit tcpdump
habe ich festgestellt, dass eine ARP-Anforderung von machine1
bis zu weitergeleitet wird machine2
, aber wenn machine2
antwortet, erreicht die Antwort nicht einmal eth2
auf . (Ich sehe die ARP-Antwort nur, wenn ich auf in bridge
lausche .eth1
machine2
Wie kann ich das zum Laufen bringen?
Antwort1
Es stellt sich heraus, dass VirtualBox standardmäßig keine Promiscuous-NICs zulässt; Sie müssen dies ausdrücklich aktivieren.
Ich habe der bridge
Definition die folgenden Zeilen hinzugefügt und dann hat alles funktioniert:
bridge.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
end