web-dev-qa-db-ja.com

Node.jsサーバーはipv6のみをリッスンします

私はポート5403でnode.jsサーバーを実行しています。このポートでプライベートIPにTelnet接続できますが、同じポートでパブリックIPにTelnet接続できません。

この原因は、node.jsがipv6でのみリッスンしているためと考えられます。これはの結果です

netstat -tpln

(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
PID/Program name
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      
-
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      
-
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      
-
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      
-
tcp6       0      0 :::5611                 :::*                    LISTEN      
25715/node
tcp6       0      0 :::22                   :::*                    LISTEN      
-
tcp6       0      0 ::1:631                 :::*                    LISTEN      
-
tcp6       0      0 :::5403                 :::*                    LISTEN      
25709/node

ノードサーバーでipv4をリッスンする方法

11
codeyard

listen()を呼び出すときにIPV4アドレスを指定する必要があります。httpモジュールで同じ問題が発生しました。これを使用する場合:

var http = require('http');

var server = http.createServer(function(request, response) {
...
});

server.listen(13882, function() { });

Netstatの出力からわかるように、IPV6でのみリッスンします。

$ netstat -lntp
Proto  Recv-Q  Send-Q  Local Address  Foreign Address  State
tcp6        0       0  :::13882       :::*             LISTEN

ただし、次のようにIPV4アドレスを指定すると、

var http = require('http');

var server = http.createServer(function(request, response) {
...
});

server.listen(13882, "0.0.0.0", function() { });

netstatは、サーバーをIPV4で待機していると報告します。

$ netstat -lntp
Proto  Recv-Q  Send-Q  Local Address     Foreign Address  State
tcp         0       0  0 0.0.0.0:13882   0 0.0.0.0:13882  LISTEN

Ubuntu 16.04とnpm 5.3.0を使用しています。

HTH

18