我想从Windows Server 2003将一些端口(特别是TCP 22,UDP 1194,TCP 80,TCP 443)转发到同一台机器上的VirtualBox内运行的Linux VM。 有一个简单可靠的方法来做到这一点? 目前,虚拟机与服务器在一个桥接networking上,并应保持在其他所有端口上从外部(LAN)访问。
在我看来,这不是一个真正的解决scheme。 您指的是桥接networking,以及如何在Windows主机上执行此操作。
您的答案是不要在Windows主机上使用桥接,而是使用NAT。
从我的angular度来看,就像有人问如何更换奔驰的电池,并回答:使用大众。
所以要回到Windows主机上的桥接networking虚拟机。
Windows不会将数据包转发到虚拟适配器。 所以当你的windows机器使用192.168.1.2,你的虚拟机在192.168.1.3上从你的路由器的angular度来看,你将数据包转发到192.168.1.2或者192.168.1.3,这一切最后都在使用的网卡上通过你的窗户,因此192.168.1.2。 由于局域网内使用的一些低层协议,这不适用于局域网内部! 你的局域网机器去192.168.1.3实际上会被虚拟局域网适配器看到,而路由器转发的数据包却没有。 所以在你的路由器上的端口转发到192.168.1.2或192.168.1.3将总是到达192.168.1.2,但是在局域网里面有一些较低层次的分层窗口理解它不是为192.168.1.2而是为192.168.1.3。
这是一个窗口的限制,如何处理Windows数据包不同于使用局域网的一些低层数据的数据包相比,互联网数据包缺乏这种信息窗口需要知道它不是主要的网卡,但意味着桥接虚拟。
阻止数据包到达窗口或允许(防火墙)不会改变这个问题! 这就是主机操作系统如何在虚拟适配器可以接触到数据包之前先处理这些数据包(因此绝不会在这种情况下),这必须在实际命中防火墙规则之前确定。
然而,有一个解决scheme,你仍然可以用你的Windows主机连接你的虚拟机,在你的networking中使用桥接networking的可能性和低层networking协议,并告诉Windows特定端口上的数据包是用于虚拟机,而不是Windows NIC。
为此,您可以使用:netsh interface portproxy add v4tov4 listenport = 80 connectport = 80 connectaddress = 192.168.1.3
现在,端口80上的所有传入数据包到192.168.1.2或192.168.1.3都在您的主机操作系统(Windows)仍然传入,但是Windows现在将它们转发到虚拟机192.168.1.3
这就是如何设置一个桥接networking的所有好处,实际上是主机连接到局域网的一部分,并仍然得到适当的数据包到达你的虚拟机,你想他们到达的地方。
希望这解释了一下如何设置它。 这个窗口处理来自外部路由器转发数据包的数据包与LAN内部不同的具体解释当然不能解释这一点,但我认为这与你的问题无关。 你问如何在桥接环境中完成这个工作。
祝你好运。 以上的解决scheme已经过testing并certificate可行。
自己find了解决办法:
在Virtualbox中将networking设置更改为NAT,并使用内置function将任意端口连接到虚拟机。 这有一个缺点,就是虚拟机不能logging任何IP(因为NAT阻止了这个),除了指定的端口之外不再可用,但是正如你可以指定的那样,对于我来说这不是一个好消息。