对于那些使用 ssh 端口转发或有想法的人,我设法通过 ssh 服务器(具有公共地址)创建从我的 PC 到远程计算机(没有公共地址的摄像机)的远程隧道)。
目标是通过ssh远程端口转发将摄像头的访问转发给公众,
我在电脑上启动的命令的格式是:
ssh -R sshServer_port:destination_address:destination_port sshServer_address
例子:
ssh -R 3000:192.198.1.210:80 [email protected]
在sshServer中,我可以通过localhost:3000访问远程机器
然后,我设置了一个 tcpproxy 以使用以下命令公开访问:
tcpproxy -lhost 0.0.0.0:8080 -rhost localhost:3000
这样,任何网络的任何人都可以通过输入 52.14.9.210:8080 来访问相机界面
我想要做的是创建一个隧道,监听两个远程机器端口(80 用于 http,8000 用于实时流媒体),命令格式如下:
ssh -R sshServer_port:destination_address:destination_port1 -R sshServer_port:destination_address:destination_port2 sshServer_address
例子:
ssh -R 3000:192.168.1.210:80 -R 3000:192.168.1.210:8000 [email protected]
我尝试运行该命令,但收到此错误:警告:侦听端口 3000 的远程端口转发失败
您知道如何解决这个问题吗?
答案1
您想要的不是创建一个侦听两个远程计算机端口的隧道,您想要两个侦听同一远程端口的隧道。
这是不可能的。 ssh 如何知道传入连接应转发到哪个端口?
有一些解决方案可以区分协议,但没有一个是通用的。如果您使用的端口 80 表示 http 流量,则可以设置反向代理,但为两个目标使用两个不同的端口会容易得多。
编辑
从您的评论来看,您似乎只是缺少-g
SSH 选项来允许其他主机连接到隧道。
答案2
我解决了这个问题,感谢 ralffriedl 的提示。
第一步:我在端口 80 上的摄像头地址和端口 2233 上的 ssh 服务器之间创建了第一个远程端口转发隧道,然后在 ssh 服务器的 localhost:2233 和服务器的公共 ip 地址之间设置了 tcpproxy( 52.214.9.211) 在端口 4455 上
第二步:我在端口 8000 上的摄像头地址和端口 2255 上的 ssh 服务器之间创建了第二个远程端口转发隧道,然后在 ssh 服务器的 localhost:2255 和服务器的公共 ip 地址之间设置了 tcpproxy( 52.214.9.211) 在端口 8000 上
这样,当外网的人在浏览器上输入服务器ip地址,并加上摄像机ip地址的80端口转发的端口,即:(52.214.9.211:4455),就可以访问摄像机了当在端口 8000 上完成直播请求时,即:(52.214.9.211:8000),它会转发到服务器的 localhost:2255,然后转发到摄像机的端口 8000。