Qu'est-ce qui cause le message 'Connexion refusée'?

110

Ceci est une question canonique sur le refus de connexion

Nous voyons beaucoup de questions à l'effet

Lorsque j'essaie de me connecter à un système, je reçois un message.

Connexion rejetée

Pourquoi est-ce ?

utilisateur9517
la source
2
Cela arrive souvent dans Apache Hadoop, où il est souvent causé par des erreurs de configuration dans le client: à quel hôte parler, à quoi leurs tables DNS ou / etc / host sont-elles configurées, ou à une discordance entre les ports utilisés par un service et que les clients pensent qu’il devrait utiliser. En conséquence, nous avons une entrée wiki dédiée sur le sujet. Bon nombre des problèmes se posent probablement ailleurs, mais à plus petite échelle (avec espoir). Déboguer des problèmes de connexion dans un cluster à 1000 nœuds n’est pas amusant.
Steve Loughran
Votre lien d’entrée wiki dédié pointe vers cette question;)
user9517
1
bonne prise. Voici le lien officiel: wiki.apache.org/hadoop/ConnectionRefused . Je vais cependant ajouter une référence croisée ici pour cette boucle complète.
Steve Loughran
@SteveLoughran Article Cool - un commentaire - le lien en arrière indique Stool Overflow et nous sommes Server Fault;)
user9517
terminé. FWIW, ce lien wiki est ajouté aux exceptions ConnectionRefused transmises dans la pile Hadoop, avec les informations supplémentaires (hôtes, ports) nécessaires pour résoudre le problème. Nous recevons toujours de nombreux rapports de bugs de personnes qui voient la trace de la pile et ne suivent pas le lien vers le wiki
Steve Loughran

Réponses:

118

Remarque : Ce message est un symptôme du problème que vous essayez de résoudre. Comprendre la cause du message vous mènera finalement à résoudre votre problème.

Le message 'Connexion refusée' a deux causes principales:

  1. Rien n’écoute sur l’IP: le port auquel vous essayez de vous connecter.
  2. Le port est bloqué par un pare-feu.

Aucun processus n'écoute.

C'est de loin la raison la plus courante du message. Commencez par vous assurer que vous essayez de vous connecter au bon système. Si vous devez ensuite déterminer si tel est le problème, exécutez netstat ou ss 1 sur le système distant, par exemple si vous prévoyez qu'un processus écoute sur le port 22222.

sudo netstat -tnlp | grep :22222

ou

ss -tnlp | grep :22222

Pour OSX, une commande appropriée est

sudo netstat -tnlp tcp | grep '\.80 '

Si rien n’écoute, alors ce qui précède ne produira aucune sortie. Si vous voyez des résultats, confirmez que c'est ce que vous attendez, puis consultez la section sur le pare-feu ci-dessous.

Si vous n'avez pas accès au système distant et que vous souhaitez confirmer le problème avant de le signaler aux administrateurs appropriés, vous pouvez utiliser tcpdump (Wirehark ou similaire).

Lorsqu'une connexion est tentée vers un IP: port où rien n'est à l'écoute, la réponse du système distant au paquet SYN initial est un paquet avec les indicateurs RST, ACK définis. Ceci ferme la connexion et provoque le message Connection Refused, par exemple

$ sudo tcpdump -n hôte 192.0.2.1 et port 22222
tcpdump: sortie prolixe supprimée, utilisez -v ou -vv pour le décodage de protocole complet en
écoute sur enp14s0, type de lien EN10MB (Ethernet), taille de capture 262144 octets

12: 31: 27.013976 IP 192.0.2.2.34390> 192.0.2.1.22222: drapeaux [S] , seq 1207858804, victoire 29200, options [mss 1460, sackOK, TS val 15306344 ecr 0, non, échelle 7], longueur 0

12: 31: 27.020162 IP 192.0.2.1.22222> 192.0.2.2.34390: drapeaux [R.] , seq 0, ack 1207858805, victoire 0, longueur 0

Notez que tcpdump utilise a . pour représenter le drapeau ACK .

Le port est bloqué par un pare-feu

Si le port est bloqué par un pare-feu et que le pare-feu a été configuré pour répondre, icmp-port-unreachablecela provoquera également un message de connexion refusée. Encore une fois, vous pouvez voir cela avec tcpdump (ou similaire)

$ sudo tcpdump -n icmp
tcpdump: sortie verbeuse supprimée, utilisez -v ou -vv pour le décodage complet du protocole en

écoute enp14s0, type de lien EN10MB (Ethernet), taille de capture 262144 octets 13: 03: 24.149897 IP 192.0.2.1> 192.0. 2.2: port TCP 2222 ICMP 192.0.2.1 inaccessible, longueur 68

Notez que cela nous indique également où se trouve le pare-feu bloquant.


Alors maintenant que vous savez ce qui cause le message de connexion refusée, vous devez prendre les mesures appropriées, par exemple contacter l’administrateur du pare-feu ou rechercher la raison pour laquelle le processus n’écoute pas.

1 D'autres outils sont probablement disponibles.

utilisateur9517
la source
2
Version ELI5: cela signifie que la demande de connexion a été envoyée à l'autre ordinateur et que l'autre ordinateur n'avait aucune idée de ce dont vous parliez.
user253751
"Aucun processus n'écoute." La principale raison ..!
Samitha Chathuranga
Dans mon cas, quelque chose m'écoutait… mais sur un nœud différent de celui auquel je tentais de me connecter. Oops.
ijoseph
1
@ijoseph Donc, rien n'écoutait alors.
user9517
5

Pour moi sous Debian 6 squeeze, c'était aussi simple que de vérifier le service SSH :

sudo service ssh status

Et ne rien trouver existait (avec le message ssh: unrecognized service) en installant simplement le service :

sudo apt-get install openssh-server

Cela fonctionne également si vous n'obtenez pas de connexion SFTP, car SFTP est un sous-ensemble de SSH (alors que FTPS est un sous-ensemble de FTP).

SharpC
la source