我有一个网页用于控制树莓派上的恒温器,但是当尝试从远程客户端使用Websockets时遇到了困难。在局域网中似乎工作正常。显然我漏掉了一些东西(可能是基本的东西),但我似乎无法弄清楚是什么。
树莓派的本地IP为192.168.1.134。网页(由Apache服务器提供)的URL为http://192.168.1.134:8010/thermostat.html。该页面启动了一些JavaScript,然后尝试通过ws://192.168.1.134:9000使用Websockets连接到pi的主程序。(pi上的服务器正在运行libwebsockets)。Websocket已经启动,似乎工作正常。然后我尝试从远程客户端(关闭WiFi的手机)连接http:\\23.239.99.99:8010\thermostat.html。HTML/JS文件加载正常,但Websocket尝试连接到URI ws:\\23.239.99.99:9000,这导致失败。
据我所知,NAT似乎已正确配置:
树莓派的本地IP为192.168.1.134。网页(由Apache服务器提供)的URL为http://192.168.1.134:8010/thermostat.html。该页面启动了一些JavaScript,然后尝试通过ws://192.168.1.134:9000使用Websockets连接到pi的主程序。(pi上的服务器正在运行libwebsockets)。Websocket已经启动,似乎工作正常。然后我尝试从远程客户端(关闭WiFi的手机)连接http:\\23.239.99.99:8010\thermostat.html。HTML/JS文件加载正常,但Websocket尝试连接到URI ws:\\23.239.99.99:9000,这导致失败。
据我所知,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
我检查过路由器和调制解调器,都没有设置任何防火墙。树莓派里也没有安装防火墙(我检查过,没有奇怪的iptables规则)。有人知道我错过了什么吗?
--- 编辑 ---
我还是卡在这个问题上了。我联系了我的ISP,他们保证他们的服务器上没有防火墙。有没有办法确定端口9000被谁阻止了?
ws_uri += "//" + window.location.host.replace(/\:.*$/, '') + ":9000";
作为uri,我将其打印出来,它显示正确。我尝试使用443端口,但它具有相同的行为(从局域网中可以工作,但从广域网中不行...)。 - user2766918