流浪者盒子的公共静态IP


13

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

我想要的是:设置虚拟箱(Ubuntu),可以通过静态IP(188.120.244.5)进行访问。

我正在尝试:

  • config.vm.forward_port-好主意:在主机上用188.120.244.5设置接口“ eth1:1”,并将其添加到Vagrant文​​件“ config.vm.forward_port = hmm ..?”
  • config.vm.network:仅主机,“ 188.120.244.5”-不起作用。在主机上用ip“ 188.120.244.1”创建了新接口。当然188.120.244.1 IP不是我的,因此我无法通过此IP访问服务器。
  • config.vm.network:bridged-我很困惑这是如何工作的:)

我现在所拥有的:配置不正常。

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访问虚拟机?

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

预先感谢您的反馈。


我对将vagrant与外部可访问的IP(尤其是与virtualbox提供程序一起使用)保持谨慎。 stackoverflow.com/a/16919803/2109800
mc0e 2015年

Answers:


14

从1.3.0版开始:

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

您只需要将此配置放入您的Vagrantfile (文档)中

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

这个无所事事真的很棒:-)


因此,我注意到我的DHCP服务器似乎并没有认为我的
无聊用户

2

两周后,我以这种方式解决了我的问题:

Cookbook从模板生成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

rebuild-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)。


0

您真正需要的是带有静态IP的桥接接口。不幸的是,流浪汉还不支持这一点(请参阅此处的讨论)。

首先,根据需要virtualbox设置box_config.vm.network:bridged来创建桥接接口,然后可以删除box_config.vm.network:hostonly。

您可以使用外壳配置来用IP重新配置网络,但是您不能修改/ etc / network / interfaces文件,或者如果您停止游荡,则虚拟机将无法恢复(进行游荡将尝试并重新配置网络接口,如果您修改了该文件,它将消失。
因此,替代方法是在/etc/network/if-up.d/中创建一个脚本,以重新设置接口的IP。不理想,但是我还没有想出更好的解决方案!


请参阅下面的配置相关部分。在bash脚本上,您应该设置IP /网络掩码,网关和DNS(和接口号,如果您的接口号不同,则应该是eth1,尽管您刚刚在Vagrantfile中设置了桥接)。
因此,您第一次无所事事并创建VM时,会创建一个脚本/etc/network/if-up.d/custom-network-config,该脚本设置IP配置,路由并重新启动apache(您需要如果您使用的是依赖于网络配置的其他服务,请修改此设置,并设置DNS。
然后,如果您在虚拟机已经存在时再次进行了无用操作(例如,在无用操作中止之后),则只需重启网络接口即可运行脚本并配置接口(由于某种原因,我发现脚本没有被踢出)在打开虚拟机并最初启动接口时关闭-不知道为什么)。

流浪文件

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.