单独使用socat可以模拟SSH远程端口转发吗?

单独使用socat可以模拟SSH远程端口转发吗?

请考虑以下场景。

  • 服务器 A 可以访问 serverX:9000。
  • 服务器 A 可以访问 serverB:7000。
  • 服务器 B 无法直接访问服务器 A 上的端口。
  • 服务器 B 想要访问 serverX:9000,但是没有直接访问权限。

解决这个问题的经典方法是使用 ssh 端口转发。

ssh -R 9000:serverX:9000 serverB -p 7000

假设,我不想在服务器 B 上运行 sshd,也不想在服务器 A 上运行 ssh,而是想在两者上运行未经身份验证的网络实用程序(例如socatnc),并解决相同的问题。

是否可以仅使用 socat/nc 实现远程端口转发,而无需 ssh?

答案1

通过构建 TCP 性别转换器,Socat 可以实现这一点。

在 serverB 上运行一个双监听器,等待 9000 上的连接,然后分叉一个子进程,等待 7000 上的连接,最后转发流量:

socat TCP-LISTEN:9000,reuseaddr,fork TCP-LISTEN:7000,reuseaddr

在服务器 A 上运行双客户端,该客户端不断尝试连接到服务器 B:7000,并在成功后建立到服务器 X:9000 的转发。请注意,这会产生永久网络流量,在防火墙上生成日志,并且未加密:

socat TCP:serverB:7000,forever,interval=1,fork TCP:serverX:9000

连接会延迟转发,您可以通过间隔设置(秒,浮点数)来控制最大等待时间

相关内容