30 votes

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

Je suis en train d'essayer d'ouvrir le port 3000 sur Ubuntu 12.04, car j'ai un serveur web qui écoute là-bas. Je suis un peu en dehors de ma zone de confort ici, et j'ai passé de nombreuses heures à essayer 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 correctement 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 correctement 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 à quoi je m'attends ("hello world" :).

Cependant, lorsque j'essaie depuis un autre ordinateur, ou si je wget mydomain.com:3000 j'obtiens "connexion refusée", et nmap me dit 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

Avez-vous 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

25voto

lak-b Points 764

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

Vous devrez également vous assurer que "mydomain.com" se résout à la bonne adresse IP pour votre machine, de sorte que la connexion à celle-ci entraînera une communication avec l'interface externe de cette machine.

20voto

Jonathan Points 1

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

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

Édition: Voici un lien vers une page serverfault sur le sujet 0.0.0.0: https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1

6voto

Mark Points 306

Y a-t-il une chance que vous utilisiez AWS ou tout autre service cloud? Dans ce cas, le port doit être ouvert au niveau du service cloud. En particulier parmi AWS, vous devriez rechercher les "Groupes de sécurité" où vous devez ouvrir l'accès au port 3000.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X