我知道您可以使用 ssh 将本地或远程端口转发到另一个目标和端口。例如,假设我有这个命令:
ssh -L *:8443:10.0.0.1:443 [email protected]
因此,这允许在发出命令的机器上打开一个监听套接字(假设它的ip是10.0.0.3
),端口是8443
。当某个客户端连接到10.0.0.3:8443
数据包时,数据包将流经建立在之间的ssh通道10.0.0.3
,10.0.0.2
然后ssh服务器将10.0.0.2
数据包转发到目的地,在本例中为10.0.0.1:443。
我想知道服务器是否10.0.0.2
可以建立永久连接,10.0.0.1:443
以便连接10.0.0.2:xxxxx -> 10.0.0.1:443
打开一次后永不断开。来自连接的客户端的所有流量10.0.0.3:8443
都应使用此永久通道。
所以基本上我不希望在新客户端连接到10.0.0.3:8443
新通道时10.0.0.2:xxxxx -> 10.0.0.1:443
出现这种情况。这会阻止我重复使用同一会话并使第一个客户端之后的另一个客户端发送的请求无效。
答案1
使用 SSH 无法做到这一点。而且这种通用方法本身就不是一个好主意。
TCP 是字节流,而不是消息协议。这意味着如果多个客户端并行发送消息,则消息可能会混淆。生成的数据可能以来自客户端 A 的 msgA 开头,然后以来自客户端 B 的 msgB 的部分继续,然后以 msgA 的另一部分继续,等等。
因此,与通用方法不同,我们实际上需要一个能够理解所说的特定应用协议的混合器,并确保无论客户端如何发送消息,合并数据流中的消息语法都得以保留。
请注意,UDP 的情况有所不同,因为 UDP 是基于消息的。但您的用例似乎是 TCP。