如果有这样的 SSH 设置:
主机 A -> 主机 B <- 主机 C
如果主机 C 位于 NAT/防火墙后面,则打开到主机 B 的反向隧道,主机 A 通过主机 B (ProxyCommand) 连接到主机 C。一切都仅限 IPv4。
是否有一种简单的方法可以在主机 A 和主机 C 之间建立 IP(v6) 连接,而无需在任何这些主机上进行大量根访问和侵入方法?
编辑:基本上类似的东西
hostC$ ssh -R 1234:localhost:22 hostB # establis remote hole for host C on host B
hostA$ ssh -o"ProxyCommand=ssh hostB nc localhost 1234" # Connect via HostB to Host C
hostA$ ping6 <ipv6> # this would validate the connectivity to HostC
我们的想法是让 IP(v6) 网络尽可能瞬态。应该可以从 HostA 访问在 HostC 上侦听 :::1 的服务。
答案1
您似乎将 SSH 端口转发与 VPN 混淆了。这些是非常不同的概念,具有不同的功能。
SSH 端口转发允许一台服务器(IP 和端口)伪装成另一台服务器(IP 和端口)。从您的图表来看,这会让主机 A 认为它正在与主机 B(端口 1234)通信,而实际上它正在与主机 C(端口 22)通信,因为主机 B 正在转发流量。注意 主机 A 永远不知道主机 C 的存在。
我认为您实际上想要的是一个VPN,其中主机A可以与主机C通信(知道它正在与主机C通信),并且所有流量都通过主机B发送。
你不能单独使用 ssh 来做到这一点。通常,所有主机(A、B 和 C)都需要安装相同的 VPN 软件(例如 OpenVPN)。 B 将被设置为 VPN 服务器,A 和 C 作为客户端。
有一个例外。穿梭会让 ssh 服务器充当 VPN 服务器,只要客户端上有 sshuttle,服务器就不需要知道。但是,它可能无法在您之后的配置中工作。它可能不会让主机 A 和 C 相互交谈。