2017-08-12 106 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我剛解決了這個問題。

你有錯誤的目標。轉到編輯頁面並單擊「目標」的選擇菜單,然後您可以選擇第一個選項「應用於所有實例」,這是最簡單的方法。