我正在虚拟机内运行外部可访问的服务器。我的本地路由器配置为使用 DDS 将我的 IP 地址映射到我拥有的域,并将数据包转发到我的 Windows PC 的端口 80 和 443。VirtualBox VM 配置有 NAT 网络和以下端口转发规则:
直到最近,IPv4 的一切都表现得非常出色。不幸的是,我最近更换了 DSL 提供商,他们使用 DS Lite 隧道,这意味着我没有公共 IPv4 地址,只有 IPv6。因此,我重新配置了 DDNS 规则,将我的域映射到动态 IP 地址。数据包似乎到达我的 PC*,但未转发到虚拟机。
为什么?我是否需要在某处配置 IPv6 和/或在“附加到:”下拉列表中使用不同的网络类型?我可以以某种方式将 IPv6 数据包转发到 VM 内的 IPv4 地址吗?
* 实际上,当在主机上运行服务器时,我也无法通过外部 IPv6 地址访问它。我被重定向到我的路由器页面。所以也许我还需要以某种方式修复我的路由器配置。我认为它与“IPv6 前缀”有关,这对我来说是一个新概念。在端口转发设置中显然还有一个专用于我的 PC 的 IPv6 地址,这似乎意味着有多个外部 IPv6 地址分配给我。看来我需要阅读更多相关内容。
虽然理论上 VirtualBox 的 NAT 实现可以将 IPv6 连接转发到 IPv4 主机,但这种协议转换往往会带来很多复杂性,例如“目标主机应该看到什么 IPv4 源地址?” (因为原始 v6 地址当然无法放入 IPv4 标头中)。因此,实践中唯一的选择是 v4-to-v4 和 v6-to-v6。
VirtualBox 中的默认 NAT 网络不支持 IPv6。您需要在 VirtualBox 主窗口中打开“工具 → 网络”,并在其中创建自定义NAT 网络,启用 IPv6 并配置一些地址前缀;然后您会看到“端口转发”选项卡现在同时具有“IPv4”和“IPv6”子选项卡。
然后,在虚拟机的设置中,将网络接口从“NAT”切换为“NAT 网络”,并选择您刚刚创建的网络。
(与默认 NAT 模式不同,这些自定义 NAT 网络可以在多个虚拟机之间共享,因此端口转发是通过网络设置而不是虚拟机设置来配置的。)
选项 B:使用“桥接”模式代替 NAT 模式,该模式允许虚拟机直接存在于您的主 LAN 中。然后,虚拟机将拥有自己的 IPv6 地址(以及自己的 IPv4 LAN 地址),与 Windows 主机的方式相同,因此您根本不需要端口转发配置。
选项 C:可以在 Windows 主机上运行 HTTP 反向代理和 TCP 代理,代理与 VM 的连接(通过 VBox NAT“端口转发”或通过“仅主机”接口)。代理可以在 IPv4 和 IPv6 之间进行转换,因为它们不会尝试保留原始 IP 地址;他们只是从主机自己的 IP 建立一个新连接。(原始客户端 IP 将通过 X-Forwarded-For 或类似方法提供。)
选项 D:Windows 有内置的 TCP 代理服务,同样支持 IPv4 和 IPv6 之间的中继。
netsh
您可以在下面找到它interface portproxy
(尝试该add
命令)。它不支持 X-Forwarded-For 或类似的东西。