2017-08-12 84 views
3

我已经创建了一个具有静态外部IP地址的GCP计算引擎实例。机器类型:n1-standard-2(2个vCPU,7.5 GB内存)。操作系统是Linux/Debian。TCP服务器的GCP计算引擎防火墙规则

enter image description here

我的目的是建立在机器上一个普通的Node.js服务器的TCP。代码如下:

var net = require('net'); 

var HOST = '0.0.0.0'; 
var PORT = 110; 

net.createServer(function(sock) { 
     console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort); 
     sock.on('data', function(data) { 
     console.log('DATA ' + sock.remoteAddress + ': ' + data); 
     sock.write('You said "' + data + '"'); 

    }); 


}).listen(PORT, HOST); 
console.log('Server listening on ' + HOST +':'+ PORT); 

客户端是:

var net = require('net'); 

var HOST = '104.197.23.132'; 
var PORT = 110; 

var client = new net.Socket(); 
client.connect(PORT, HOST, function() { 
    console.log('CONNECTED TO: ' + HOST + ':' + PORT); 
    client.write('I am Chuck Norris!'); 

}); 
client.on('data', function(data) { 
    console.log('DATA: ' + data); 
    client.destroy(); 

}); 
client.on('close', function() { 
    console.log('Connection closed'); 
}); 

我的防火墙规则如下:

enter image description here

请注意:我听端口110,并且客户端正试图连接到静态外部IP地址。 Itt似乎根据防火墙规则启用了超过110的TCP流量。我看到的错误是

Error: connect ETIMEDOUT 104.197.23.132:110 

当我ssh进入实例,并运行tcp客户端,我连接成功。所以最后的问题是,为什么本地tcp客户端(我的电脑)不能连接到计算实例?我的防火墙规则/源过滤器/ IP转发有问题吗?

+0

你是否以'root'身份运行你的应用程序?低于1024的端口仅限于root用户。 https://serverfault.com/questions/38461/is-there-still-a-reason-why-binding-to-port-1024-is-only-authorized-for-root-o –

+0

是的,我是。当我在虚拟机上运行客户端应用程序时,启动tcp服务器并连接到它并没有问题。连接问题发生时。尝试从我的本地机器连接。 –

回答

-1

您需要首先根据您的主机IP添加防火墙规则,因为需要从该特定主机(您的计算机)接收内部通信。 然后您应该能够ping通GCP计算实例。 您还应该能够在您的程序中配置的特定端口上进行远程登录。

这应该没问题。 另外 - 定制规则应添加到实例的网络标签中,以使该规则与该实例相关联,然后该实例使用该特定规则。

2

enter image description here我刚解决了这个问题。

你有错误的目标。转到编辑页面并单击“目标”的选择菜单,然后您可以选择第一个选项“应用于所有实例”,这是最简单的方法。