我想要实现的目标几乎与本文中描述的完全一致: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 代理。