假设我在 有一台专用服务器,host.com
其 IPv4 地址为1.2.3.4
,静态分配的 IPv6 地址,以及充足的其他 IPv6 地址。此主机为guest.com
、等处的多个 KVM 提供服务guest0.com
,guest1.com
且具有静态分配的 IPv6 地址。让这些访客能够使用 的 IPv4 仅供 IPv4 客户端使用的最有效方法是什么host.com
?
注意:所有主机都运行 Ubuntu 18.04 和各种服务,并且可用性需要在命名的基础级别上,而不仅仅是单个服务或端口/套接字。
答案1
鉴于要求是每台 IPv6 机器都要托管任意数量的不同服务,我认为你运气不佳。
这基本上与 RFC1918 范围的网络上单个公共 IPv4 地址及其后面的一组服务器的问题相同。(例如家庭宽带类型设置)
如果它们都托管在协议中封装主机名的服务(例如 HTTP 或带有 SNI 的 HTTPS),那么双宿主机可以轻松为它们代理。但在纯 IP 级别上,没有办法做到这一点,因为仅 IPv4 客户端将使用 DNS 来解析目标的地址,这可以返回 2 个选项:
- 网关的 IPv4 地址,然后打开与网关的连接,但现在最终目标信息已丢失(因为协议中没有携带该信息),所以它不知道将数据包转发到哪里。
- 最终目标的 IPv6 地址,但由于仅有 IPv4,因此无法访问它。
我能想到的最好的折中方法是使用 SSH 通过网关设置客户端本地端口转发(作为巴斯蒂安·霍斯特) 到目标机器。这意味着您需要在尝试访问目标服务器之前在每个客户端上启动 SSH 连接。并且您需要在启动 ssh 会话之前知道该服务器提供哪些服务,因为它需要预先为每个服务设置转发。