我在数据中心有一台 Windows Server 2012,虚拟盒托管 LinuxCentOS6.4 服务器。
数据中心为我提供了5 个 IP,并且它们都在同一个子网中。
可以从外部进入 Windows、IIS以及FTP等服务均正常运行。
CentOS有一个LAMP配置,从控制台运行curl命令可以看到apache测试页面以及 phpmyadmin 的登录页面。如果我平或者从 CentOS curl 我正确地得到了来自外部网站。如果我从外部 ping 我分配给 CentOS 的 IP 地址,我可以看到响应。
我已在 /etc/sysconfig/network-scripts/ifcfg-eth0 中配置了网关,其参数如下:
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
HWADDR=06:01:78:a7:00:33
NETMASK=255.255.248.0
IPADDR=95.110.xxx.xxx
TYPE=Ethernet
我在这里定义了默认网关(/etc/sysconfig/network)
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=myhostname
GATEWAY=95.110.xxx.xxx
在 Windows 中我有两个可见的网络适配器:
- 以太网,指定 Windows 服务器的 IPv4
- VirtualBox 仅主机网络,我已在其中设置了可用的附加 IP 之一
然后在 Virtualbox 控制面板中,我尝试设置桥接网络和仅主机,但 CentOS 服务器永远无法从外部访问,而外部的意思是也无法从 Windows 主机服务器访问。
我总是收到“网站无法访问”的消息超时响应如果我尝试浏览 IP 或http://95.110.xxx.xxx/phpmyadmin。但是如果我尝试 ping 它,我会得到响应。哪种配置 virtualbox 和网络适配器的正确方法可以使客户机从外部访问?
请注意:
- 我不想使用 NAT 和端口转发,因为我拥有一个用于客户服务器的专用 IP,而且我不想配置端口转发。
- 我尝试禁用 iptables 和 ip6tables,但仍然无法访问。
- 我也尝试过暂时禁用 Windows 防火墙。
- 不要告诉我使用 Vagrant 或其他软件。
- 物理服务器直接连接到互联网,没有任何可能导致问题的硬防火墙或代理。
答案1
如果您的服务器只有一个“真实”适配器,并且已连接并暴露在 Internet 上,那么您设置为“桥接”的每个虚拟机也将被暴露。因此,如果只需要访问一个虚拟机,您可以只将该虚拟机设置为桥接,其余虚拟机设置为 NAT(我的意思是 Virtualbox NAT,而不是带有路由器或防火墙的 NAT)。因此,您只能使用两个公共 IP,一个用于您的主机,另一个用于想要从 Internet 访问的虚拟机。您可以使用其中一个公共 IP 地址以与真实机器相同的方式为这个暴露的虚拟机设置静态 IP(每个虚拟机必须有一个公共 IP,但它们之间不同)。
无论如何,这样做,您的所有虚拟机都将被暴露,而不仅仅是您想要暴露的端口,请记住这一点。
总结一下:
- 你的主机(真实机器)会有一个固定的公网 IP 地址
- 您的虚拟机将具有桥接接口和固定的公共 IP 地址
- 其余虚拟机的接口将为 NAT。