Was verursacht die Meldung "Verbindung abgelehnt"?

110

Dies ist eine kanonische Frage zu " Verbindung abgelehnt"

Wir sehen viele Fragen zu diesem Effekt

Wenn ich versuche, eine Verbindung zu einem System herzustellen, erhalte ich eine Nachricht

Verbindung abgelehnt

Warum ist das ?

user9517
quelle
2
In Apache Hadoop kommt dies häufig vor, da es häufig durch Konfigurationsfehler im Client verursacht wird: Mit welchem ​​Host kommuniziert werden soll, wie die DNS- oder / etc / host-Tabellen eingerichtet sind oder eine Nichtübereinstimmung zwischen den von a verwendeten Ports Service und dass die Kunden denken, es sollte verwenden. Dementsprechend haben wir einen eigenen Wiki-Eintrag zum Thema. Viele der Probleme dürften anderswo auftreten, wenn auch (hoffentlich) in kleinerem Maßstab. Das Debuggen von Verbindungsproblemen in einem 1000-Knoten-Cluster macht keinen Spaß.
Steve Loughran
Ihr dedizierter Wiki-Eintrag verweist auf diese Frage;)
user9517
1
guter Fang. Hier ist der offizielle Link: wiki.apache.org/hadoop/ConnectionRefused . Ich werde von dort aus einen Querverweis für diese vollständige Schleife hinzufügen.
Steve Loughran
@SteveLoughran Coole Artikel - ein Kommentar - der Link zurück sagt Stack Overflow und wir sind
Serverfehler
getan. FWIW, dieser Wiki-Link wird zu ConnectionRefused-Ausnahmen hinzugefügt, die im Hadoop-Stapel übergeben wurden, zusammen mit den zusätzlichen Informationen (Hosts, Ports), die benötigt werden, um herauszufinden, was falsch läuft. Wir erhalten immer noch viele Fehlerberichte von Leuten, die den Stack-Trace sehen und nicht dem Link zum Wiki folgen
Steve Loughran

Antworten:

118

Hinweis : Diese Meldung ist ein Symptom für das Problem, das Sie lösen möchten. Das Verstehen der Ursache der Nachricht führt Sie letztendlich zur Lösung Ihres Problems.

Die Meldung "Verbindung abgelehnt" hat zwei Hauptursachen:

  1. Auf dem IP: -Port, zu dem Sie eine Verbindung herstellen möchten, wird nichts abgehört.
  2. Der Port wird von einer Firewall blockiert.

Kein Prozess hört zu.

Dies ist bei weitem der häufigste Grund für die Nachricht. Stellen Sie zunächst sicher, dass Sie versuchen, eine Verbindung zum richtigen System herzustellen. Wenn Sie dann feststellen möchten , ob dies das Problem ist, führen Sie auf dem fernen System netstat oder ss 1 aus, z. B. wenn Sie erwarten, dass ein Prozess Port 22222 überwacht

sudo netstat -tnlp | grep :22222

oder

ss -tnlp | grep :22222

Für OSX ist ein geeigneter Befehl

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

Wenn nichts zuhört, wird auf diese Weise kein Ausgang erzeugt. Wenn Sie eine Ausgabe sehen, vergewissern Sie sich, dass diese Ihren Erwartungen entspricht, und lesen Sie den Abschnitt über die Firewall weiter unten.

Wenn Sie keinen Zugriff auf das Remote-System haben und das Problem bestätigen möchten, bevor Sie es den entsprechenden Administratoren melden, können Sie tcpdump (wireshark oder ähnliches) verwenden.

Wenn versucht wird, eine Verbindung zu einem IP: -Port herzustellen, an dem nichts empfangsbereit ist, ist die Antwort des fernen Systems auf das anfängliche SYN-Paket ein Paket mit den Flags RST, ACK. Dies schließt die Verbindung und bewirkt, dass die Nachricht Connection Refused (Verbindung abgelehnt) angezeigt wird, z

$ sudo tcpdump -n Host 192.0.2.1 und Port 22222
tcpdump: Ausführliche Ausgabe unterdrückt. Verwenden Sie -v oder -vv für die vollständige Protokolldecodierung
von enp14s0, EN10MB (Ethernet) vom Verbindungstyp, erfassen Sie Größe 262144 Byte

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

Beachten Sie, dass tcpdump a verwendet . zur Darstellung der ACK- Flagge.

Der Port wird von einer Firewall blockiert

Wenn der Port von einer Firewall blockiert wird und die Firewall so konfiguriert wurde, dass sie darauf antwortet, icmp-port-unreachablewird auch eine Meldung angezeigt, dass die Verbindung abgelehnt wurde. Wieder können Sie dies mit tcpdump (oder ähnlichem) sehen

$ sudo tcpdump -n icmp
tcpdump: Ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldecodierungsüberwachung

auf enp14s0, EN10MB (Ethernet) vom Verbindungstyp, Erfassungsgröße 262144 Byte 13: 03: 24.149897 IP 192.0.2.1> 192.0. 2.2: ICMP 192.0.2.1 TCP-Port 22222 nicht erreichbar, Länge 68

Beachten Sie, dass dies auch angibt, wo sich die blockierende Firewall befindet.


Jetzt wissen Sie also, woher die Meldung "Verbindung abgelehnt" stammt. Sie sollten geeignete Maßnahmen ergreifen, z. B. den Firewall-Administrator kontaktieren oder den Grund für das Nichthören des Prozesses ermitteln.

1 Andere Tools sind wahrscheinlich verfügbar.

user9517
quelle
2
ELI5-Version: Dies bedeutet, dass die Verbindungsanforderung an den anderen Computer gesendet wurde und der andere Computer keine Ahnung hatte, wovon Sie gesprochen haben.
immibis
"Kein Prozess hört zu." Der Hauptgrund ..!
Samitha Chathuranga
In meinem Fall hörte etwas zu… aber auf einem anderen Knoten, mit dem ich mich verbinden wollte. Hoppla.
ijoseph
1
@ijoseph Also hat damals nichts zugehört.
user9517
5

Für mich bei Debian 6 Squeeze war es so einfach wie das Überprüfen des SSH-Dienstes :

sudo service ssh status

Und es wurde nichts gefunden (mit der Meldung ssh: unrecognized service), nur der Dienst wurde installiert :

sudo apt-get install openssh-server

Dies funktioniert auch, wenn Sie keine SFTP-Verbindung erhalten, da SFTP eine Teilmenge von SSH ist (während FTPS eine Teilmenge von FTP ist).

SharpC
quelle