O que causa a mensagem 'Connection Refused'?

77

This is a Canonical Question about Connection Refused

Nós vemos muitas perguntas para o efeito

When I try to connect to a system I get a message

Connection refused

Why is this ?

    
por Iain 28.09.2015 / 14:13

3 respostas

89

Note: This message is a symptom of the problem you are trying to solve. Understanding the cause of the message will ultimately lead you to solving your problem.

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.

Este é de longe o motivo mais comum para a mensagem. Primeiro, verifique se você está tentando se conectar ao sistema correto. Se você for então determinar se esse é o problema, no sistema remoto, execute netstat ou ss 1 eg se você está esperando que um processo esteja escutando na porta 22222

sudo netstat -tnlp | grep :22222

ou

ss -tnlp | grep :22222

Para o OSX, um comando adequado é

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

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

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

Quando uma conexão é tentada para um IP: porta onde nada está escutando, a resposta do sistema remoto ao pacote SYN inicial é um pacote com os sinalizadores RST, ACK set. Isso fecha a conexão e faz com que a mensagem de recusa de conexão, por exemplo,

$ sudo tcpdump -n host 192.0.2.1 and port 22222
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp14s0, link-type EN10MB (Ethernet), capture size 262144 bytes

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

12:31:27.020162 IP 192.0.2.1.22222 > 192.0.2.2.34390: Flags [R.], seq 0, ack 1207858805, win 0, length 0

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

A porta está bloqueada por um firewall

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

$ sudo tcpdump -n icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on enp14s0, link-type EN10MB (Ethernet), capture size 262144 bytes 13:03:24.149897 IP 192.0.2.1 > 192.0.2.2: ICMP 192.0.2.1 tcp port 22222 unreachable, length 68

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

Então agora você sabe o que está causando a mensagem de conexão recusada. Entre em contato com o administrador do firewall ou investigue o motivo pelo qual o processo não está sendo ouvido.

1 Outras ferramentas provavelmente estão disponíveis.

    
por 28.09.2015 / 14:13
4

Para mim, no Debian 6 squeeze, foi tão simples quanto verificação do serviço SSH :

sudo service ssh status

E achando que nada existia (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 obtendo uma conexão SFTP, pois o SFTP é um subconjunto do SSH (enquanto o FTPS é um subconjunto do FTP).

    
por 16.05.2016 / 11:39
0

O firewall My Centos Shorewall ficou sem espaço em disco. confusamente, alguns sites, como youtube e MS, funcionavam. Outros como cnn.com falharam. Limpar algum espaço e reiniciar o servidor resolveu o problema para mim.

    
por 03.11.2016 / 14:19