J'exécute un serveur node.js sur le port 5403. Je peux me connecter à l'IP privée sur ce port mais ne peux pas telnet à l'IP publique sur le même port.
Je suppose que la cause de cela est que node.js écoute uniquement sur ipv6. C'est le résultat de
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
Comment faire écouter le serveur de noeud sur ipv4
Vous devez spécifier une adresse IPV4 lorsque vous appelez la listen()
, j'ai eu le même problème avec le module http
. Si j'utilise ceci:
var http = require('http');
var server = http.createServer(function(request, response) {
...
});
server.listen(13882, function() { });
Il n'écoute que sur IPV6, comme vous pouvez le voir sur la sortie netstat:
$ netstat -lntp
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp6 0 0 :::13882 :::* LISTEN
Cependant, si je spécifie une adresse IPV4 comme celle-ci:
var http = require('http');
var server = http.createServer(function(request, response) {
...
});
server.listen(13882, "0.0.0.0", function() { });
netstat signalera que le serveur écoute sur 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
J'utilise Ubuntu 16.04 et npm 5.3.0.
HTH