web-dev-qa-db-fra.com

Le port semble être ouvert, mais la connexion a été refusée

J'essaie d'ouvrir le port 3000 sur Ubuntu 12.04, car un serveur Web y écoute. Je suis un peu en dehors de ma zone de confort et j'ai passé de nombreuses heures à tenter de résoudre le problème sans succès.

Le port semble être ouvert dans le pare-feu:

$> Sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
...
3000/tcp                   ALLOW       Anywhere
3000/tcp                   ALLOW       Anywhere (v6)

Le serveur écoute bien sur ce port:

$> netstat -an | grep "LISTEN "
...
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN     
...

Et je peux même wget bien la page d’index:

$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK

Et le fichier reçu contient ce que j'attendais ("hello world" :).

Cependant, lorsque j'essaie depuis un autre ordinateur ou si je wget mydomain.com:3000, je reçois "connection refused", et nmap m'indique que le port n'est pas ouvert:

$> nmap -A -T4 mydomain.com
Host is up (0.00032s latency).
...
Not shown: 999 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
...
Service Info: OS: Linux

Une idée de ce que je devrais essayer ensuite ???

EDIT

Voici ce que donne traceroute:

$> traceroute mydomain.com
traceroute to mydomain.com (176.31.x.x), 30 Hops max, 60 byte packets
 1  mydomain.com (176.31.x.x)  0.034 ms  0.013 ms  0.010 ms
19
sebpiq

Si votre serveur n'écoute que sur l'interface localhost, vous ne pourrez pas y accéder à partir d'un ordinateur distant. Cela semble être votre principal problème car seul 127.0.0.1:3000 est répertorié dans votre sortie netstat.

Vous devrez également vous assurer que "mydomain.com" résout l'adresse IP correcte pour votre machine, de sorte que sa connexion entraînera une communication avec l'interface externe de cette machine.

23
dobey

J'ai eu ce problème récemment avec un serveur HTTPS de nodejs, et la solution à ce problème n'était pas d'utiliser "localhost", "127.0.0.1" ou même le nom de domaine. C'était pour utiliser "0.0.0.0"

Je crois que cela fonctionne comme un joker, permettant maintenant une résolution publique via le nom de domaine et fonctionnant également avec "localhost"

Edit: Voici un lien vers une page serverfault sur la rubrique 0.0.0.0: https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0- 0 et 127-0-0-1

13
Sami Fouad

Existe-t-il une chance que vous utilisiez AWS ou tout autre service cloud? Dans ce cas, le port doit être ouvert au niveau de configuration inctance (OS) ou après. En particulier dans AWS, vous devez rechercher des "groupes de sécurité" dans lesquels vous devez ouvrir l'accès au port 3000.