如何透明地将端口从 IPv4 隧道传输到远程 IPv6 设备?

如何透明地将端口从 IPv4 隧道传输到远程 IPv6 设备?

在家里,我连接一个 IPv6 地址,此外,我的提供商还提供了类似 NAT 的设置,通过该设置我可以收到一个公共 IPv4 地址,并与其他客户共享该地址(原因显然是我们的 IPv4 地址不足)。

因此,当我使用 IPv4 网络时,我无法访问家里的设备(例如我的 VPN 网关)。但是,我确实有一个同时具有 IPv4 和 IPv6 地址的服务器。因此,如果我通过我的服务器,应该可以访问我的家用设备。

到目前为止,我的想法是这样的:由于在 IPv6 上,每个设备都有自己的 IP,所以我的服务器在家里获取静态 IPv6 IP。我的远程服务器已经拥有静态 IPv4 和 IPv6。

现在,当我想要访问家中的 OpenVPN 服务器时,以前我会在路由器上打开端口 1194,然后 NAT 会将连接传递到那里的服务器。在新的场景中,我想连接到远程服务器上的端口 1194(或其他端口,无所谓),它应该接受该连接并将其隧道传输到我的家庭服务器(因为它们都具有 IPv6)。

从图形上看,这意味着:

移动设备(IPv4)-->远程服务器(IPv4+IPv6)-->家庭服务器(IPv6)

但这应该只会发生在选定的端口上(或者有没有比通过端口选择更聪明的方法?)。

我的问题是,如何实现此设置?

这应该在哪个级别运行?如果我想通过端口执行此操作,显然我必须在 TCP/UDP 层转发数据包。我的第一个想法是 iptables,但 iptables 可以将数据包转发到远程 IP 吗?或者有其他可以的软件吗?或者我应该在两台服务器之间创建一个隧道,然后在本地转发?我该怎么做?

答案1

我终于找到了解决方案将 IPv4 端口转发到仅支持 IPv6 的主机它基本上使用socat:

socat TCP4-LISTEN:22,fork,su=nobody TCP6:[2a01:198:79d:1::8]:22

我的解决方案基本相同,只是我使用主机名,但那里有一个静态 IP。注意不要在主机名中使用方括号,因为它会将其解释为 IP。

相关内容