我想在旅途中访问我的家庭网络,但从外部只能通过 IPv6 访问。我想要访问的网络通常只有 IPv4。(如何)我可以通过中间的服务器访问整个家庭网络吗?
我们假设以下情况:
网络 A(家庭):
- 内部 IP 范围:192.168.0.0/24(我暂时想在内部保留 IPv4)
- 机器 A:aaaa:bbbb:cccc:dddd(可从外部访问 IPv6)
- 机器A(内部):192.168.0.1
网络 B(远程):
- 内部 IP 范围:192.168.178.0/24
- 机器B(内部):192.168.178.2
- 公网 IP:1.2.3.4(路由器)
服务器:
- IPv4:2.3.4.5
- IPv6:bbbb:cccc:dddd:eeee
现在我想从 192.168.178.2(网络 B)访问 192.168.0.3(网络 A)。可以使用 OpenVPN / (SSH) 隧道 / iptables / 路由来实现吗?如果可以:如何?
抱歉,通常我的方法都是半途而废,或者至少有个想法来解决问题,但我已经想了一整天,脑子里只剩下一片混乱;所以我最好从头开始。(当然我的想法是服务器将 IPv6 网络 A 与 IPv4 网络 B 连接起来。但怎么做呢?)
如果网络 A 与服务器以及服务器与网络 B(即互联网)之间的所有流量都经过加密,则可获得加分。
答案1
您没有提到您使用的是什么操作系统,所以我只能给您一般性的建议:
您必须设置两个隧道:
- 计算机 A 和服务器之间的 IPv4-over-IPv6 隧道
- 计算机 B 和服务器之间的 IPv4-over-IPv4 隧道
在家庭网络上,您必须将流量路由到192.168.178.0/24
机器 A。如果机器 A 是默认网关,那么情况已经如此。否则,您必须在默认网关上添加静态路由,以将该流量发送到机器 A。在机器 A 上,您必须配置一条静态路由,以192.168.178.0/24
将流量发送到服务器的 IPv4-over-IPv6 隧道。
在远程网络上,您必须将流量路由到192.168.0.0/24
计算机 B。如果计算机 B 是默认网关,那么情况已经如此。否则,您必须在默认网关上添加静态路由,以将该流量发送到计算机 B。在计算机 B 上,您必须配置一条静态路由,以192.168.0.0/24
将流量发送到服务器的 IPv4-over-IPv4 隧道。
服务器将需要两个静态路由:
192.168.0.0/24
通往机器 A 的 IPv4-over-IPv6 隧道192.168.178.0/24
通往机器 B 的 IPv4-over-IPv4 隧道
现在,家庭网络上的机器将把数据包发送192.168.178.0/24
到默认网关。如果这不是机器 A,则默认网关将把数据包转发给机器 A。机器 A 将通过 IPv4-over-IPv6 隧道将它们转发到服务器。服务器将通过 IPv4-over-IPv4 隧道将它们转发给机器 B,后者将数据包转发到远程网络。
现在远程网络上的机器将把数据包发送192.168.0.0/24
到默认网关。如果这不是机器 B,则默认网关将把数据包转发给机器 B。机器 B 将通过 IPv4-over-IPv4 隧道将它们转发到服务器。服务器将通过 IPv4-over-IPv6 隧道将它们转发给机器 A,机器 A 再将数据包转发到家庭网络。
我明确地记下了两个方向的路径的每一跳。只有在以下情况下,通信才会有效:每一个上述步骤有效。
您可以使用多种协议和应用程序来设置隧道。普通 IPvX-in-IPvY 隧道最简单,但不提供加密。GRE 隧道也是如此。OpenVPN 设置起来有点困难,但确实提供加密。查看Linux IPv6 操作方法和Linux 高级路由指南中的隧道部分了解如何设置隧道。