如何通过中间服务器转发 websocket 通信?

如何通过中间服务器转发 websocket 通信?

我正在尝试通过中间服务器(托管在 AWS EC2 实例上)连接 websocket 服务器(Linux 计算机)和客户端(Web 浏览器)。EC2 实例提供了 websocket 服务器和客户端可以引用的公共 IP。

我的客户端连接到ws://<SERVER>:<PORT>,其中SERVER是我的 EC2 实例的地址,而是PORT我为端口转发打开的任意端口(例如9111)。

在 websocket 服务器上,我正在运行以下命令:

  /usr/bin/ssh -f -N -i $KEY -l ubuntu \
                 -R $PORT:127.0.0.1:9090 \
                 -L 9090:$SERVER:$PORT \
                  $SERVER

其中,$KEY是 EC2 的私钥,9090是我的 websocket 服务器使用的端口。我已将 EC2 实例的 ssh 守护程序配置为启用网关端口,并且端口转发工作正常。

当我尝试启动 websocket 服务器时,出现了问题——我收到错误Address already in use,因为我显然无法在正在转发的端口上启动 websocket 服务器。这不是很标准的做法吗?我做错了什么?

谢谢!

答案1

您的 SSH 的“-L 9090”选项正在打开端口 9090 上的侦听器,这与您的 websocket 服务器冲突。-R 选项应该足够了,并且转发的连接将是双向的,您不需要使用 -L 设置“反向路由”。

除了任何防火墙更改之外,您可能需要在 EC2 SSH 守护程序上启用 GatewayPorts 选项,以允许使用 -R 设置接受来自任何 IP 的连接的端口。

相关内容