私はポート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をリッスンする方法
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