公共静态ip为stream浪箱子

我有1个以太网卡和2个公共静态IP(188.120.245.4和188.120.244.5)的服务器(Debian Squeeze)。

我想要的:通过静态IP(188.120.244.5)通过访问来设置虚拟盒子(Ubuntu)。

我正在尝试:

  • config.vm.forward_port – 好主意:设置主机上的接口“eth1:1”为188.120.244.5,并添加到stream浪文件“config.vm.forward_port = hmm ..?”
  • config.vm.network:hostonly,“188.120.244.5” – 不起作用。 在主机上用ip“188.120.244.1”创build了新的接口。 当然188.120.244.1 IP不是我的,我不能通过这个IP访问我的服务器。
  • config.vm.network:桥接 – 我很困惑这是如何工作:)

我现在有什么:不工作的configuration。

Debian-host-machine# cat Vagrantfile Vagrant::Config.run do |config| config.vm.define :gitlab do |box_config| box_config.vm.box = "ubuntu" box_config.vm.host_name = "ubuntu" box_config.vm.network :bridged box_config.vm.network :hostonly, "188.120.244.5", :auto_config => false end end Debian-host-machine# ifconfig eth1 Link encap:Ethernet HWaddr 00:15:17:69:71:bb inet addr:188.120.245.4 Bcast:188.120.247.255 Mask:255.255.248.0 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00 inet addr:188.120.244.1 Bcast:188.120.246.255 Mask:255.255.255.0 Ubuntu-virtual-machine# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:ee:8d:0c inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 eth1 Link encap:Ethernet HWaddr 08:00:27:45:71:87 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 

如何通过公共静态IP从networking访问虚拟框?

我正在使用Oracle VM VirtualBox Manager 4.1.18和Vagrant版本1.0.3。

预先感谢您的反馈。

从版本1.3.0开始:

 Static IP can now be set on public networks. [GH-1745] 

你只需要把这个configuration放在你的Vagrantfile中:

 config.vm.network :public_network, ip: "192.168.0.200" 

这个stream浪事情真的很棒:-)

两周后,我这样解决了我的问题:

食谱从模板生成Vagrantfile:

 Vagrant::Config.run do |config| config.vm.define :gitlab do |box_config| box_config.vm.box = "mybox" box_config.vm.host_name = "mybox" box_config.vm.forward_port 80, 4567 box_config.vm.forward_port 22, 2222 box_config.vm.network :hostonly, "192.168.5.10" end end 

重build-iptables需要生成并应用iptables规则:

 # /etc/iptables/general *filter :INPUT ACCEPT [0,0] :FORWARD ACCEPT [0,0] :OUTPUT ACCEPT [0,0] # Vagrand boxes forwarding ports -A FORWARD -p tcp -d 192.168.5.10 --dport 80 -j ACCEPT -A FORWARD -p tcp -d 192.168.5.10 --dport 22 -j ACCEPT COMMIT *nat :PREROUTING ACCEPT [0,0] :POSTROUTING ACCEPT [0,0] :OUTPUT ACCEPT [0,0] # Nat all traffic to vagrant boxes # For example, my vagrant box public static ip is 8.8.8.8 -A PREROUTING -d 8.8.8.8 -p tcp -j DNAT --to-destination 192.168.5.10 -A POSTROUTING -j MASQUERADE COMMIT 

和:

 echo '1' > /proc/sys/net/ipv4/ip_forward 

现在,我可以安装应用程序,并通过公共静态IP连接到他们没有“port_forwarding”设置(如在VPS)。

你真正需要的是一个具有静态IP的桥接接口。 不幸的是,stream浪汉还不支持这个(见这里的讨论)。

首先,设置box_config.vm.network:桥接,因为您需要virtualbox来创build一个桥接接口,并且您可以删除box_config.vm.network:hostonly。

你可以使用shellconfiguration重新configuration你的IP地址,但是你不能修改/ etc / network / interfaces文件,否则虚拟机将不能恢复,如果你做了一个stream浪汉的话并重新configurationnetworking接口,如果您修改了该文件,则会死亡)。
所以,另一种方法是在/etc/network/if-up.d/中创build一个脚本来重新设置接口的IP地址。 不理想,但我还没有想出一个更好的解决scheme呢!

请参阅下面的configuration的相关部分。 在bash脚本上,你应该设置IP /networking掩码,网关和DNS(和接口号,如果你的是不同的,它应该是eth1,但是如果你刚才在Vagrantfile中设置了桥接)。
所以,第一次你做了stream浪汉并创build虚拟机时,它会创build一个脚本/etc/network/if-up.d/custom-network-config来设置IPconfiguration,路由并重新启动apache(您将需要如果您使用依赖networkingconfiguration的其他服务,则修改此设置),并设置DNS。
然后,如果你在虚拟机已经存在的时候(例如在做了stream浪汉之后)再次进入虚拟环境,它所做的只是重新启动networking接口,这样脚本就可以运行并且configuration了接口(由于某种原因,我发现脚本没有被踢掉closures虚拟机时打开和接口最初 – 不知道为什么)。

Vagrantfile

 config.vm.network :bridged config.vm.provision :shell, :path => "vagrant-setup.sh" 

vagrant-setup.sh

 #!/bin/bash ip="188.120.244.5/24" gateway="" dns="8.8.8.8" ##################### # NEW VM ##################### if [ ! -f /etc/network/if-up.d/custom-network-config ]; then cat >/etc/network/if-up.d/custom-network-config <<EOL #!/bin/bash if [ "\$IFACE" != "eth1" ]; then exit 0 fi ifconfig eth1 down ifconfig eth1 ${ip} up route del default route add default gw ${gateway} dev eth1 service apache2 restart EOL cat >/etc/resolv.conf <<EOL nameserver ${dns} EOL chmod +x /etc/network/if-up.d/custom-network-config /etc/init.d/networking restart ##################### # EXISTING VM ##################### else /etc/init.d/networking restart fi