我正在尝试设置 ssh 隧道布局,其中:
- 客户端 A(未启用 ssh 服务器)发起与服务器 S 的 ssh 连接
- ocks 服务器在服务器 S:yyyy 上打开,通过客户端 A 传输所有数据
- 客户端B连接服务器S上的socks服务器,tcp数据通过客户端A路由到互联网
一种可能的解决方案是在客户端 A 上添加代理服务器(绑定到 localhost:xxxx),然后在客户端 A 上运行ssh -R yyyy:localhost:xxxx Server
。这样就可以达到目的了。但这并不像只使用 ssh 那样干净。
是否可以仅使用 A 上的 ssh 客户端和 S 上的 ssh 服务器来实现此目的?这就像 ssh 上的反向动态端口转发 - 创建ssh -D
从 A 到 S,然后以某种方式在此隧道上设置ssh -D
从 S 到 A 的第二条隧道。有点令人困惑,不确定是否可能。
答案1
OpenSSH 7.6引入反向动态代理作为本机选项。完全在客户端实现,所以服务器端不需要更新。
ssh -R 1080 server
答案2
我只是在寻找这个并遇到了相同(或类似)的问题堆栈溢出。
在客户端 A 上ssh -R \*:24680:localhost:12345 serverS
然后(仍然在客户端 A 上)ssh -D 12345 localhost
[1]
你需要到位\*
,因此它将绑定到服务器 S 的公共 IP 地址,而不仅仅是本地主机。
然后在客户端B上只需连接到socks服务器serverS:24680
[1] 编辑:我刚刚意识到,如果客户端 A 没有 SSH 服务器,这将不起作用,因为它本身无法 ssh。我正在考虑一种设置,其中客户端 A 有一个 SSH 服务器,但服务器 S 无法访问该设置。但是如果您可以安装一个类似的设置,那么类似的设置仍然可以工作袜子服务器在客户端 A 上并在端口 12345 上打开它。
答案3
不知道这是否对任何人有帮助,这是我设法构建的设置图表......
您将在 MACHINE_B 上看到两个进程:
与 MACHINE_A 的 SSH 客户端连接(橄榄色):
ssh -R 127.0.0.1:22344:127.0.0.1:4444 -i privkey.sshkey -N user_a@machine_a
SSH 客户端作为 SOCKS 服务器在端口 4444 上工作(深绿色):
ssh -D localhost:4444 -N user_c@localhost
MACHINE_A 上有一个进程,该播放服务器监听端口 22344(橄榄色)。
当 MACHINE_A 上的浅绿色进程请求连接时,MACHINE_B 上的浅绿色进程应该出现...
答案4
这非常简单。
在本地端(服务器 S),启动 openssh 服务器。默认情况下,这将在端口 22 上启动 ssh 服务器 - 如果需要,您可以在 /etc/ssh/sshd_config 文件中更改此端口。
service ssh start
在远程端(客户端A),启动socks代理并在本地设置远程端口以连接到socks代理。
ssh -N -D 127.0.0.1:8888 -p 22 <server-s>
ssh -N -R 2222:127.0.0.1:8888 -p 22 <server-s>
在本地端(服务器S),通过例如在端口2222上使用socks代理设置来连接到Google。
curl --socks5 127.0.0.1:2222 https://www.google.com