Co powoduje komunikat „Odmowa połączenia”?

110

To jest kanoniczne pytanie dotyczące odmowy połączenia

Widzimy wiele pytań

Kiedy próbuję połączyć się z systemem, pojawia się komunikat

Połączenie odrzucone

Dlaczego to ?

użytkownik9517
źródło
2
Często to osiągamy w Apache Hadoop, gdzie często jest to spowodowane błędami konfiguracji w kliencie: z którym hostem rozmawiać, z czym są skonfigurowane ich tablice DNS lub / etc / host, lub z niedopasowaniem portów używanych przez usługa i że klienci uważają, że powinna z niej skorzystać. W związku z tym mamy dedykowany wpis wiki na ten temat. Wiele problemów jest prawdopodobnie gdzie indziej, choć (na szczęście) na mniejszą skalę. Debugowanie problemów z połączeniem w klastrze 1000 węzłów nie jest zabawne.
Steve Loughran
Twój dedykowany link do wiki wskazuje na to pytanie;)
user9517
1
dobry chwyt. Oto oficjalny link: wiki.apache.org/hadoop/ConnectionRefused . Dodam tu jednak odsyłacz do tej pełnej pętli.
Steve Loughran
@SteveLoughran Fajny artykuł - jeden komentarz - link z powrotem mówi Przepełnienie stosu i jesteśmy
usterką
gotowy. FWIW, ten link wiki jest dodawany do wyjątków ConnectionRefused przekazywanych w stosie Hadoop, wraz z dodatkowymi informacjami (hostami, portami) potrzebnymi do ustalenia, co się dzieje. Wciąż otrzymujemy wiele raportów o błędach od osób, które widzą ślad stosu i nie podążają za linkiem do wiki
Steve Loughran

Odpowiedzi:

118

Uwaga : ten komunikat jest objawem problemu, który próbujesz rozwiązać. Zrozumienie przyczyny komunikatu ostatecznie doprowadzi cię do rozwiązania problemu.

Komunikat „Odmowa połączenia” ma dwie główne przyczyny:

  1. Nic nie nasłuchuje na IP: Port, z którym próbujesz się połączyć.
  2. Port jest blokowany przez zaporę ogniową.

Żaden proces nie słucha.

Jest to zdecydowanie najczęstszy powód komunikatu. Najpierw upewnij się, że próbujesz połączyć się z odpowiednim systemem. Jeśli chcesz ustalić, czy to jest problem, uruchom na zdalnym systemie polecenie netstat lub ss 1, np. Jeśli oczekujesz, że proces będzie nasłuchiwał na porcie 22222

sudo netstat -tnlp | grep :22222

lub

ss -tnlp | grep :22222

W przypadku OSX odpowiednim poleceniem jest

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

Jeśli nic nie słucha, powyższe nie wytworzy żadnego wyjścia. Jeśli zobaczysz jakieś dane wyjściowe, potwierdź, że tego oczekujesz, a następnie zobacz sekcję zapory poniżej.

Jeśli nie masz dostępu do systemu zdalnego i chcesz potwierdzić problem przed zgłoszeniem go odpowiednim administratorom, możesz użyć tcpdump (wireshark lub podobny).

Podczas próby połączenia z portem IP: gdzie nic nie nasłuchuje, odpowiedzią systemu zdalnego na początkowy pakiet SYN jest pakiet z ustawionymi flagami RST, ACK. To zamyka połączenie i powoduje komunikat o odmowie połączenia, np

$ sudo tcpdump -n host 192.0.2.1 i port 22222
tcpdump: pełne wyjście wyłączone, użyj -v lub -vv do pełnego dekodowania protokołu
nasłuchiwania na enp14s0, typ łącza EN10MB (Ethernet), rozmiar przechwytywania 262144 bajtów

12: 31: 27.013976 IP 192.0.2.2.34390> 192.0.2.1.22222: Flagi [S] , seq 1207858804, win 29200, opcje [mss 1460, sackOK, TS val 15306344 ecr 0, nop, wscale 7], długość 0

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

Zauważ, że tcpdump używa . do reprezentowania ACK flagę.

Port jest blokowany przez zaporę ogniową

Jeśli port jest blokowany przez zaporę ogniową, a zapora została skonfigurowana tak, aby odpowiadać, icmp-port-unreachablespowoduje to również komunikat odmowy połączenia. Ponownie możesz to zobaczyć za pomocą tcpdump (lub podobnego)

$ sudo tcpdump -n icmp
tcpdump: pełne wyjście wyłączone z użycia, użyj -v lub -vv do pełnego dekodowania protokołu

nasłuchiwania na enp14s0, typ łącza EN10MB (Ethernet), rozmiar przechwytywania 262144 bajtów 13: 03: 24.149897 IP 192.0.2.1> 192.0. 2.2: ICMP 192.0.2.1 port TCP 22222 nieosiągalny, długość 68

Pamiętaj, że informuje nas to także o miejscu, w którym znajduje się zapora blokująca.


Teraz już wiesz, co powoduje komunikat „Odmowa połączenia”, powinieneś podjąć odpowiednie działania, np. Skontaktować się z administratorem zapory ogniowej lub ustalić przyczynę, dla której proces nie nasłuchuje.

1 Prawdopodobnie dostępne są inne narzędzia.

użytkownik9517
źródło
2
Wersja ELI5: oznacza to, że żądanie połączenia dotarło do drugiego komputera, a drugi komputer nie miał pojęcia, o czym mówisz.
immibis
„Żaden proces nie słucha”. Głównym powodem ..!
Samitha Chathuranga,
W moim przypadku coś nasłuchiwało… ale na innym węźle, z którym próbowałem się połączyć. Ups
ijoseph
1
@ijoseph Więc nic wtedy nie słuchało.
user9517
5

Dla mnie na ściśnięciu Debiana 6 było to tak proste, jak sprawdzenie usługi SSH :

sudo service ssh status

I nie znaleziono niczego (z komunikatem ssh: unrecognized service) po prostu instalując usługę :

sudo apt-get install openssh-server

Działa to również, jeśli nie otrzymujesz połączenia SFTP, ponieważ SFTP jest podzbiorem SSH (podczas gdy FTPS jest podzbiorem FTP).

SharpC
źródło