Cosa causa il messaggio "Connessione rifiutata"?


110

Questa è una domanda canonica sulla connessione rifiutata

Vediamo molte domande sull'effetto

Quando provo a connettermi a un sistema ricevo un messaggio

connessione rifiutata

Perchè è questo ?


2
Lo otteniamo molto in Apache Hadoop, dove spesso è causato da errori di configurazione nel client: con quale host parlare, con cosa sono impostati i loro DNS o / etc / host table, o una discrepanza tra le porte utilizzate da un servizio e che i clienti pensano che dovrebbe usare. Di conseguenza, abbiamo una voce wiki dedicata sull'argomento. Molti dei problemi sono probabilmente altrove, sebbene (fortunatamente) su scala minore. Il debug dei problemi di connessione in un cluster a 1000 nodi non è divertente.
Steve Loughran,

Il tuo link dedicato alla wiki punta a questa domanda;)
user9517

1
buona pesca. Ecco il link ufficiale: wiki.apache.org/hadoop/ConnectionRefused . Aggiungerò un riferimento incrociato da lì a qui per quel ciclo completo però.
Steve Loughran,

@SteveLoughran Articolo interessante - un commento - il link indietro dice Stack Overflow e siamo Server Fault;)
user9517

fatto. FWIW, quel collegamento wiki viene aggiunto alle eccezioni ConnectionRefused trasmesse nello stack Hadoop, insieme alle informazioni extra (host, porte) necessarie per capire cosa non va. Riceviamo ancora molte segnalazioni di bug da parte di persone che vedono la traccia dello stack e non seguono il link al wiki
Steve Loughran,

Risposte:


118

Nota : questo messaggio è un sintomo del problema che si sta tentando di risolvere. Comprendere la causa del messaggio alla fine ti porterà a risolvere il tuo problema.

Il messaggio "Connessione rifiutata" ha due cause principali:

  1. Niente è in ascolto sull'IP: porta alla quale si sta tentando di connettersi.
  2. La porta è bloccata da un firewall.

Nessun processo è in ascolto.

Questo è di gran lunga il motivo più comune per il messaggio. Assicurati innanzitutto di provare a connetterti al sistema corretto. Se si deve quindi determinare se questo è il problema, sul sistema remoto eseguire netstat o ss 1, ad esempio se si prevede che un processo sia in ascolto sulla porta 22222

sudo netstat -tnlp | grep :22222

o

ss -tnlp | grep :22222

Per OSX è un comando adatto

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

Se nulla è in ascolto, quanto sopra non produrrà alcun output. Se vedi qualche output, conferma che è quello che ti aspetti, quindi vedi la sezione firewall qui sotto.

Se non si ha accesso al sistema remoto e si desidera confermare il problema prima di segnalarlo agli amministratori interessati, è possibile utilizzare tcpdump (WireShark o simile).

Quando si tenta una connessione a un IP: porta in cui nulla è in ascolto, la risposta dal sistema remoto al pacchetto SYN iniziale è un pacchetto con i flag RST, ACK impostati. Ciò chiude la connessione e provoca ad es. Il messaggio Connessione rifiutata

$ sudo tcpdump -n host 192.0.2.1 e porta 22222
tcpdump: soppressione dell'output dettagliato, utilizzo -v o -vv per l'
ascolto della decodifica del protocollo completo su enp14s0, tipo di collegamento EN10MB (Ethernet), dimensione di acquisizione 262144 byte

12: 31: 27.013976 IP 192.0.2.2.34390> 192.0.2.1.22222: Flags [S] , seq 1207858804, win 29200, opzioni [mss 1460, sackOK, TS val 15306344 ecr 0, nop, wscale 7], lunghezza 0

12: 31: 27.020162 IP 192.0.2.1.22222> 192.0.2.2.34390: Bandiere [R.] , seq 0, ack 1207858805, vittoria 0, lunghezza 0

Si noti che tcpdump utilizza a . per rappresentare la bandiera ACK .

La porta è bloccata da un firewall

Se la porta è bloccata da un firewall e il firewall è stato configurato per rispondere, icmp-port-unreachableciò causerà anche un messaggio di rifiuto della connessione. Ancora una volta puoi vederlo con tcpdump (o simile)

$ sudo tcpdump -n icmp
tcpdump: soppressione dell'output dettagliato, utilizzo -v o -vv per l'

ascolto della decodifica del protocollo completo su enp14s0, tipo di collegamento EN10MB (Ethernet), dimensione di acquisizione 262144 byte 13: 03: 24.149897 IP 192.0.2.1> 192.0. 2.2: porta ICMP 192.0.2.1 tcp 22222 non raggiungibile, lunghezza 68

Nota che questo ci dice anche dove si trova il firewall di blocco.


Quindi ora sai cosa sta causando il messaggio di rifiuto della connessione, dovresti prendere le misure appropriate, ad esempio contattare l'amministratore del firewall o indagare sul motivo per cui il processo non è in ascolto.

1 Altri strumenti sono probabilmente disponibili.


2
Versione ELI5: significa che la richiesta di connessione è arrivata all'altro computer e l'altro computer non aveva idea di cosa stavi parlando.
immibis,

"Nessun processo è in ascolto." Il motivo principale ..!
Samitha Chathuranga,

Nel mio caso, qualcosa stava ascoltando ... ma su un nodo diverso da quello a cui stavo tentando di connettermi. Ops.
ijoseph,

1
@ijoseph Quindi niente stava ascoltando allora.
user9517

5

Per me su Debian 6 squeeze è stato semplice come controllare il servizio SSH :

sudo service ssh status

E trovando nulla esisteva (con il messaggio ssh: unrecognized service) solo l' installazione del servizio :

sudo apt-get install openssh-server

Questo funziona anche se non si ottiene una connessione SFTP, poiché SFTP è un sottoinsieme di SSH (mentre FTPS è un sottoinsieme di FTP).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.