我创建了一个具有静态外部 IP 地址的 GCP 计算引擎实例。机器类型:n1-standard-2(2 个 vCPU、7.5 GB 内存)。操作系统是Linux/Debian。
我的目的是在机器上创建一个普通的 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');
});
我的防火墙规则如下:
请注意:我正在侦听端口 110,并且客户端正在尝试连接到静态外部 IP 地址。根据防火墙规则,我似乎正在启用超过 110 的 TCP 流量。我看到的错误是
Error: connect ETIMEDOUT 104.197.23.132:110
当我 ssh 进入实例并运行 tcp 客户端时,我连接成功。所以最后一个问题是,为什么本地 tcp 客户端(我的电脑)无法连接到计算实例?我的防火墙规则/源过滤器/IP 转发有问题吗?