我在Ubuntu 14.04 LTS上运行Vagrant 1.7(来自他们的官方1.7软件包),我正在尝试configuration几个私有虚拟机和一个公共虚拟机。 我的Ansibleconfiguration脚本更改所有vagrant / root密码,并replace安全性方面的Vagrant股票SSH密钥。
我所有的内部IP是10.10.20.0/24。 我有一个虚拟机,需要IP 10.42.7.226(从我们的真实的外部IP地址80/443有一个NAT去它)。
pipe理程序在10.42.7.227,我创build了一个连接到eth0的IP。 我的networkingconfiguration如下所示:
auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 10.42.7.227 netmask 255.255.255.0 network 10.42.7.0 broadcast 10.42.7.255 gateway 10.42.7.1 dns-nameservers 8.8.8.8 auto br0 iface br0 inet static address 10.42.7.227 netmask 255.255.255.0 gateway 10.42.7.1 bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0
我正在远程工作,这就是为什么我害怕从eth0中删除IP。 我意识到br0应该取代它(br *有真正的IP和eth *不)。
在我的Vagrentconfiguration中,我有如下的块:
config.vm.define "haproxy" do |haproxy| haproxy.vm.network :private_network, ip: 10.10.20.12 haproxy.vm.network :public_network, ip: 10.42.7.226 haproxy.vm.hostname = vars.hostname('haproxy') haproxy.hostmanager.aliases = vars.aliases('haproxy') haproxy.vm.provision "ansible" do |ansible| ansible.playbook = "ansible/haproxy.yml" end end
但是在那个虚拟机中,我只能看到下面的适配器:
eth0 inet addr:192.168.121.189 eth1 inet addr:10.10.20.12 eth2 inet addr:10.42.7.169 Bcast:10.42.7.255 Mask:255.255.255.0
并在pipe理程序上我看到br0上的以下内容:
brctl show bridge name bridge id STP enabled interfaces br0 8000.0022192df5a7 no eth1 virbr0 8000.000000000000 yes virbr1 8000.525400eda938 yes virbr1-nic vnet0 vnet2 vnet4 vnet6 virbr2 8000.525400c3098d yes virbr2-nic vnet1 vnet3 vnet5 vnet7
以及virbr *设备的pipe理程序的ifconfig:
virbr0 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 virbr1 inet addr:192.168.121.1 Bcast:192.168.121.255 Mask:255.255.255.0 virbr2 inet addr:10.10.20.1 Bcast:10.10.20.255 Mask:255.255.255.0
看起来libvirt / kvm由于某种原因正在build立192个networking。 我并不太在意这些,但是我猜测我的10.42.7.226在Vagrant / libvirtconfiguration中被转换为10.42.7.169。
我猜我需要在libvirt另一个networking? 我所有的似乎是默认的:
<network> <name>default</name> <uuid>baa4b92a-b8ee-4e2f-a31a-bb3112b51dc0</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:9d:3b:a9'/> <ip address='10.10.20.1' netmask='255.255.255.0'> <dhcp> <range start='10.10.20.2' end='10.10.20.254'/> </dhcp> </ip> </network>
我对libvirt的文档有点困惑。 我基本上需要我的haproxy虚拟机有一个适配器的IP地址10.42.7.226访问连接到主机eth0的物理networking。 在这种configuration下我需要做什么才能做到这一点?
对于所需的configuration,您需要使虚拟机的NIC使用主机上的现有网桥br0。 不幸的是, vagrant-libvirt似乎不支持这种configuration(它只使用macvtap,它意味着完全接pipe一个物理接口,并不能帮助你,因为主机不能使用接口)。
我会联系vagrant-libvirt的作者,并要求添加这个function。
目前版本的vagrant-libvirt插件似乎支持使用macvtap的传统桥梁。
在主机上创build一个网桥,并将其用作Vagrantfile中的public_network设备。
主机有主适配器em1,dhcp:
auto em1 iface em1 inet manual auto br0 iface br0 inet dhcp bridge_ports em1 bridge_stp off bridge_fd 0 bridge_maxwait 0
Vagrantfile:
config.vm.network :public_network, :dev => "br0", :mode => "bridge", :type => "bridge"
这导致guest虚拟机有两个适配器 – 一个绑定到pipe理networking,另一个使用您的网桥通过DHCP检索IP地址。