websocket不会从远程服务器连接

时间:2017-05-29 00:47:54

标签: websocket firewall

我有一个网页来控制覆盆子pi上的恒温器,当我尝试从远程客户端使用websockets时,我遇到了困难。然而,在LAN上似乎工作正常。我显然缺少一些东西(可能是基本的东西),但我似乎无法弄清楚它是什么。

pi的本地IP为192.168.1.134。网页(从apache服务器提供)具有URL http://192.168.1.134:8010/thermostat.html。该页面启动了一些javascript,然后尝试使用websockets通过ws://192.168.1.134:9000连接到pi的主程序。 (pi上的服务器正在运行libwebsockets)。 websocket出现了,似乎工作正常。然后我尝试通过http:\\23.239.99.99:8010\thermostat.html的远程客户端(一个关闭wifi的手机)进行连接。 html / js文件加载正常,但是Web套接字尝试连接到uri ws:\\23.239.99.99:9000和这个fials。

据我所知,NAT似乎配置正确:

name           ext     ext    protocol    int     int     ip addr     interface
               port    port               port    port
               start   end                start   end

Thermostat3     8010   8010   TCP        8010   8010    192.168.1.134   eth3.1  
Thermostat5     8000   8000   TCP/UDP    80     80      192.168.1.134   eth3.1  
Thermostat_ws   9000   9000   TCP/UDP    9000   9000    192.168.1.134   eth3.1  

我查了一下,路由器没有设置任何防火墙,我的调制解调器也没有。我没有在pi上安装防火墙(我检查过,并没有奇怪的iptables规则)。有谁知道我错过了什么?

---编辑---

我仍然坚持这一点。我打电话给我的ISP,他们向我保证他们的服务器上没有防火墙。有没有办法判断端口9000是否被阻止,以及由谁控制?

3 个答案:

答案 0 :(得分:2)

将您的apache服务器绑定到0.0.0.0地址,以便从远程计算机访问

答案 1 :(得分:1)

尝试使用此工具确定端口是否无法访问(使用自定义端口):http://www.whatsmyip.org/port-scanner/

其他一切看起来都不错。作为一个完整性检查,我会尝试将ws端口放到8010以查看是否有效。我还建议使用Advanced Web Client之类的工具来隔离网络问题。

答案 2 :(得分:0)

这很有趣。我曾经遇到过类似的问题。我设置了一个WebSocket(我使用的是nodejs ws),一旦我尝试从远程客户端访问它,我就无法通过ws://yourip:port访问它,而是我必须使用http://yourip:port }。我不知道你是否有同样的问题,我的代理是我使用的。

我仍然建议您如何解决问题。我不知道你对安全性有多担心,但据我了解你的想法,你基本上通过WebSocket连接到你的树莓派并告诉它改变温度。
 回到类似的项目时,我发现很难保证我的WebSocket连接。我基本上是通过WebSocket向我的服务器发送密码加命令,然后检查密码是否正确。否则互联网上的每个人都可以加热你的房子。不酷...
但是,我不得不通过https隧道连接,以防止中间件攻击 我赶紧扔了毛巾,决定采用完全不同的解决方案。基本上我设置了一个nodejs express服务器(可以很容易地配置自签名证书以使用https或在nginx / apache https服务器后面使用)并使用用户名和密码进行身份验证。当有人通过温度请求向/ api / thermostats?id = 0发出POST请求时,服务器会检查用户是否经过身份验证,然后从节点内执行终端命令。
也许这个想法也符合你的要求。