将远程动态端口转发与 SSH 相结合实现双隧道

将远程动态端口转发与 SSH 相结合实现双隧道

我想要实现的目标几乎与本文中描述的完全一致:https://peter-jp-xie.medium.com/use-double-ssh-tunnels-instead-of-vpn-to-access-private-network-f0dee50d82e3如图所示: 在此处输入图片描述

但我希望此图中“家庭电脑”上的本地隧道(监听端口 9000)能够像动态的端口转发(通常使用 SSH 的 -D 选项打开),因此基本上是一个 SOCKS 代理。
但我希望这个 SOCKS 代理不通过公共服务器重定向连接,而是将其路由到私人 PC,这实际上将成为真正的“枢纽”点,将连接重定向到其真实 IP 目的地。

换句话说,这就像在“家庭电脑”上使用动态端口转发,通过 ssh 直接连接到“私人电脑”,而不是连接到公共服务器。只不过私人电脑和家庭电脑都位于 NAT 后面,只能进行传出连接,因此公共服务器需要充当“会合”点。

我不知道如何结合 SSH 选项来实现这一点,或者是否可以使用 SSH 来实现。如果 SSH 不是一个选项,你还有其他技术可以建议吗?我考虑过使用 Wireguard,但我不确定私人 PC 是否可以通过 UDP 访问公共服务器——Wireguard 使用的是 UDP。

编辑:我想我想到了一个解决方案,它需要在“私人电脑”上安装一个 SSH 服务器:首先创建一个与第一张图片完全相同的双隧道,只不过它会指向私人电脑上的 localhost:22。然后,在家庭电脑上,使用之前创建的本地端口转发通过 SSH 连接到私人电脑(实际上允许家庭电脑连接到私人电脑),并使用 -D 标志通过此隧道打开动态端口转发。所以... 一个通过另一个“双 SSH 隧道”的 SSH 隧道。我没有尝试过,但我认为它应该可以工作。

还有其他更美观、更简单的方法来实现这一点吗?

答案1

您已经在编辑中描述了一个解决方案:

您必须与ssh -D ...Home PC到进行连接Private PC(或者Private Server,如果它们在同一个网络上)。

一个选项可以是Private PC

ssh -R9000:localhost:22 PublicServer

然后在家用电脑上:

ssh -J PublicServer -p9000 localhost  -D1080

瞧瞧,家用电脑上的 tcp/1080 端口现在是一个通过PrivatePC接口退出的 socks 代理。

相关内容