我有如下3个系统:
客户端 A:IP 未公开
客户端 B:IP 未公开
服务器:某个公共 IP
客户端 C:IP 未公开
所以,我想做的是,我希望客户端 C 能够通过具有公共 IP 的反向 SSH 连接到服务器,同时客户端 A 和 B 也可以连接到服务器以访问客户端 C 本地网络上的某些端口,我们假设它们是3000
并4000
在客户端 C 的机器上运行命令
可能的方法
这是我想到的方法:
我们可以让客户端 C 连接到服务器,但在不同的子域上,并且clientc.example.com
共享端口,客户端 A 和客户端 B 可以通过 ssh 来访问。clientc.example.com:3000
clientc.example.com:4000
也可以采用动态端口转发的方法,如下所示:
客户端 C 可以通过动态端口转发功能 ssh 到服务器,将端口 1080 暴露为 SOCKS 代理
ssh -D 1080 user@remote_server
客户端 A 和 B 可以使用本地 SOCKS 代理
ssh -L 9000:localhost:1080 user@remote_server
1080 和 9000 只是随机端口,它们可以是任何用户希望的端口
我也可能错了,但这只是我能收集到的一些信息(过去两天我一直喝咖啡来弄清楚这一点)。
请帮我看看我应该使用哪种方法。我认为第一种方法将耗费更多的资源,因为这是一个 FOSS 项目,我希望它消耗尽可能少的资源。第二种方法可能使用较少的资源,但我自己对它如何工作感到困惑。
我看过一些项目,比如穿梭巴士但它们可能不符合我的用例。
谢谢!
答案1
“SOCKS代理”方法可以工作,但不适用于-D
创建客户端代理,类似于其-L
工作方式(“ssh”客户端监听 1080 通过服务器转发连接)。您需要一个等效的模式-R
,它应该只-R 1080
与最近的客户端和服务器有关。
使用 SOCKS 模式似乎太复杂;仅通过发布单个端口-R localhost:4000
可能就足够了。
别忘了VPN本质上是双向的。如果 A、B 和 C 连接到同一 VPN 服务器,它们将能够直接通过 IP(使用其 VPN IP 地址)相互通信,而无需任何特殊配置。
(甚至存在专门用于连接客户端而几乎不依赖中央中继的“网状”VPN。)