web-dev-qa-db-fra.com

Serveur Node.js écoutant uniquement sur ipv6

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

11
codeyard

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

18
Dario Fiumicello