允许公共IP通过WebSockets连接

Nag*_*agi 7 networking router portforwarding websocket node.js

我尝试与nodejs ws(einaros)创建聊天,这是我的代码:

服务器:

var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 80 });
wss.on('connection', function(ws) {
    console.log('connecting count:' + wss.clients.length);
});
Run Code Online (Sandbox Code Playgroud)

客户:

var hostname = location.hostname;
var port = 80;
var url = 'ws://'+hostname+':'+port+'/';
window.WebSocket = window.WebSocket || window.MozWebSocket;
var w = new WebSocket(url);
Run Code Online (Sandbox Code Playgroud)

当我用我的计算机或其他与我的路由器连接的计算机进行测试时,它运行良好.但是,通过Internet访问的其他客户端无法建立连接.当然,他们使用公共IP,如218.xxx.xxx.xxx,而不是192.168.xxx.xxx.

我想知道如何解决这个问题.

谢谢你的回答.但是,这可能不是NAT问题.例如,我的公共IP是218.100.50.50,而我的私有IP是192.168.1.1.当连接来自我的网络外部并访问218.100.50.50:80时,路由器将其重定向到192.168.1.1:80.有一个可以通过这种方式访问​​的网页,但仍然无法连接到我的websocket服务器.这个问题让我很困惑.

mok*_*oka 4

使用 IPv4 坐在路由器后面会导致将实际流量路由到正确方向(路由器后面的计算机)时出现问题。

您需要将路由器设置中的80端口转发到您的计算机IP。此外,我建议在路由器设置中为您的计算机设置首选 IP,这样在重新启动后,它更有可能不会更改本地 IP 地址(否则可能会发生)。

进行这些更改后,您甚至可以尝试从自己的计算机使用公共 IP 进行连接,如果它可以工作,那么它应该可以从外部计算机工作。
另外检查防火墙设置以确保它不会阻止任何到端口 80 的外部流量。