O que causa a mensagem 'Conexão recusada'?

110

Esta é uma pergunta canônica sobre conexão recusada

Vemos muitas perguntas para o efeito

Quando tento me conectar a um sistema, recebo uma mensagem

Ligação recusada

Por que é isso ?

user9517
fonte
2
Isso ocorre muito no Apache Hadoop, onde geralmente é causado por erros de configuração no cliente: com qual host conversar, com o que suas tabelas DNS ou / etc / host estão configuradas ou uma incompatibilidade entre as portas usadas por um serviço e que os clientes pensam que deve usar. Por conseguinte, temos uma entrada wiki dedicada sobre o tópico. Muitos dos problemas provavelmente ocorrem em outros lugares, embora (possivelmente) em menor escala. Depurar problemas de conexão em um cluster de 1000 nós não é divertido.
Steve Loughran
O seu link de entrada dedicado para o wiki aponta para esta pergunta;)
user9517 3/17
11
boa pegada. Aqui está o link oficial: wiki.apache.org/hadoop/ConnectionRefused . Vou adicionar uma referência cruzada de lá para cá para esse loop completo.
Steve Loughran
@SteveLoughran artigo Cool - um comentário - o link diz Stack Overflow e estamos servidor falha;)
user9517
feito. FWIW, esse link wiki é adicionado às exceções ConnectionRefused transmitidas na pilha do Hadoop, junto com as informações extras (hosts, portas) necessárias para descobrir o que está errado. Nós ainda obter lotes de relatórios de erros de pessoas que vêem o rastreamento de pilha e não seguem o link para o wiki
Steve Loughran

Respostas:

118

Nota : Esta mensagem é um sintoma do problema que você está tentando resolver. A compreensão da causa da mensagem acabará por levá-lo a resolver seu problema.

A mensagem 'Conexão recusada' tem duas causas principais:

  1. Nada está escutando no IP: Porta à qual você está tentando se conectar.
  2. A porta está bloqueada por um firewall.

Nenhum processo está escutando.

Esse é de longe o motivo mais comum para a mensagem. Primeiro verifique se você está tentando se conectar ao sistema correto. Se você deve determinar se esse é o problema, no sistema remoto, execute netstat ou ss 1, por exemplo, se você espera que um processo esteja escutando na porta 22222

sudo netstat -tnlp | grep :22222

ou

ss -tnlp | grep :22222

Para OSX, um comando adequado é

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

Se nada estiver ouvindo, o item acima não produzirá saída. Se você vir alguma saída, confirme se é o que você espera, consulte a seção de firewall abaixo.

Se você não tem acesso ao sistema remoto e deseja confirmar o problema antes de relatá-lo aos administradores relevantes, pode usar o tcpdump (wireshark ou similar).

Quando uma conexão é tentada a uma porta IP: onde nada está escutando, a resposta do sistema remoto ao pacote SYN inicial é um pacote com os sinalizadores RST, ACK definidos. Isso fecha a conexão e causa a mensagem Conexão recusada, por exemplo

$ sudo tcpdump -n host 192.0.2.1 e porta 22222
tcpdump: saída detalhada suprimida, use -v ou -vv para decodificação de protocolo completo
escutando enp14s0, tipo de link EN10MB (Ethernet), tamanho da captura 262144 bytes

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

12: 31: 27.020162 IP 192.0.2.1.22222> 192.0.2.2.34390: Flags [R.] , seq 0, ack 1207858805, vitória 0, comprimento 0

Observe que o tcpdump usa a . para representar a bandeira ACK .

A porta está bloqueada por um firewall

Se a porta estiver bloqueada por um firewall e o firewall tiver sido configurado para responder, icmp-port-unreachableisso também causará uma mensagem de conexão recusada. Novamente, você pode ver isso com tcpdump (ou similar)

$ sudo tcpdump -n icmp
tcpdump: saída detalhada suprimida, use -v ou -vv para decodificação completa de protocolo

em escuta enp14s0, tipo de link EN10MB (Ethernet), tamanho de captura 262144 bytes 13: 03: 24.149897 IP 192.0.2.1> 192.0. 2.2: Porta 22222 tcp ICMP 192.0.2.1 inacessível, comprimento 68

Observe que isso também nos diz onde está o firewall de bloqueio.


Portanto, agora você sabe o que está causando a mensagem de recusa de conexão e deve tomar as medidas apropriadas, por exemplo, entre em contato com o administrador do firewall ou investigue o motivo pelo qual o processo não está escutando.

1 Outras ferramentas provavelmente estão disponíveis.

user9517
fonte
2
Versão ELI5: significa que a solicitação de conexão chegou ao outro computador, e o outro computador não tinha idéia do que você estava falando.
immibis 29/09/2015
"Nenhum processo está escutando." A principal razão ..!
Samitha Chathuranga
No meu caso, algo estava escutando ... mas em um nó diferente ao qual eu estava tentando me conectar. Opa
precisa saber é
11
@ Joseph Então nada estava ouvindo então.
user9517
5

Para mim, no aperto Debian 6, era tão simples quanto verificar o serviço SSH :

sudo service ssh status

E não foi possível encontrar nada (com a mensagem ssh: unrecognized service) apenas instalando o serviço :

sudo apt-get install openssh-server

Isso também funciona se você não estiver recebendo uma conexão SFTP, pois o SFTP é um subconjunto do SSH (enquanto o FTPS é um subconjunto do FTP).

SharpC
fonte