「接続拒否」メッセージの原因は何ですか?


110

これは、接続拒否に関する正規の質問です

効果について多くの質問があります

システムに接続しようとすると、メッセージが表示されます

接続拒否

どうしてこれなの ?


2
これはApache Hadoopで多く発生します。ApacheHadoopでは、多くの場合、クライアントの構成エラーが発生します。どのホストと通信するか、DNSまたは/ etc / hostテーブルの設定、またはサービスとクライアントが使用すべきだと考えていること。したがって、トピックに関する専用のWikiエントリがあります。問題の多くは他の場所にある可能性がありますが、小規模ではありますが(おそらく)。1000ノードのクラスターで接続の問題をデバッグするのは面白くありません。
スティーブラフラン

専用のWikiエントリリンクはこの質問を指します;)
user9517

1
良いキャッチ。公式リンク:wiki.apache.org/hadoop/ConnectionRefusedをご覧ください。ただし、完全なループのために、そこからここに相互参照を追加します。
スティーブラフラン

@SteveLoughranクールな記事-1つのコメント-戻るリンクはStack Overflowと言っており、サーバー障害です;)
user9517

できた。FWIW、そのWikiリンクは、Hadoopスタックに渡されるConnectionRefused例外に、問題の解決に必要な追加情報(ホスト、ポート)とともに追加されます。我々はまだ、スタックトレースを参照してくださいとWikiへのリンクをたどっていない人からのバグレポートの多くを得る
スティーヴ・ローラン

回答:


118

:このメッセージは、解決しようとしている問題の症状です。メッセージの原因を理解することは、最終的に問題を解決することにつながります。

「接続拒否」というメッセージには、主に2つの原因があります。

  1. 接続しようとしているIP:Portでリッスンしているものはありません。
  2. ポートはファイアウォールによってブロックされています。

リッスンしているプロセスはありません。

これがメッセージの最も一般的な理由です。まず、正しいシステムに接続しようとしていることを確認してください。これが問題かどうかを判断する場合は、リモートシステムでnetstatまたはss 1を実行します。たとえば、プロセスがポート22222でリッスンすることを期待している場合

sudo netstat -tnlp | grep :22222

または

ss -tnlp | grep :22222

OSXの場合、適切なコマンドは

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

何もリッスンしていない場合、上記は出力を生成しません。何らかの出力が表示される場合は、期待どおりであることを確認してから、以下のファイアウォールセクションを参照してください。

リモートシステムにアクセスできず、問題を関連する管理者に報告する前に確認したい場合は、tcpdump(wiresharkなど)を使用できます。

何もリッスンしていないIP:portへの接続が試行されると、リモートシステムから最初のSYNパケットへの応答は、フラグRST、ACKが設定されたパケットになります。これにより、接続が閉じられ、接続拒否メッセージが表示されます。

$ sudo tcpdump -n host 192.0.2.1 and port 22222
tcpdump:詳細出力が抑制され、
enp14s0、リンクタイプEN10MB(イーサネット)、キャプチャサイズ262144バイト

12:31:27.013976 IPでリッスンする完全なプロトコルデコードに-vまたは-vvを使用192.0.2.2.34390> 192.0.2.1.22222:フラグ[S]、seq 1207858804、win 29200、オプション[mss 1460、sackOK、TS val 15306344 ecr 0、nop、wscale 7]、長さ0

12:31:27.020162 IP 192.0.2.1.22222> 192.0.2.2.34390:フラグ[R.]、seq 0、ack 1207858805、win 0、length 0

tcpdumpはを使用することに注意してくださいACKフラグを表します。

ポートがファイアウォールによってブロックされています

ポートがファイアウォールによってブロックされ、ファイアウォールがicmp-port-unreachableこれで応答するように構成されている場合も、接続拒否メッセージが表示されます。繰り返しますが、これはtcpdump(または同様の)で見ることができます

$ sudo tcpdump -n icmp
tcpdump:詳細な出力を抑制します

。enp14s0、リンクタイプEN10MB(イーサネット)でリッスンする完全なプロトコルデコードには-vまたは-vvを使用し、キャプチャサイズ262144バイト13:03:24.149897 IP 192.0.2.1> 192.0。 2.2:ICMP 192.0.2.1 tcpポート22222到達不能、長さ68

これは、ブロッキングファイアウォールの場所も示していることに注意してください。


接続が拒否されたというメッセージの原因がわかったので、適切なアクションを実行する必要があります。たとえば、ファイアウォール管理者に連絡するか、プロセスがリッスンしていない理由を調査します。

1他のツールも利用可能です。


2
ELI5バージョン:接続要求が他のコンピューターに到達したことを意味し、他のコンピューターはあなたが何について話しているのか見当がつかなかった。
イミビス

「プロセスはリッスンしていません。」主な理由..!
サミサチャトゥランガ

私の場合、何かがリッスンしていましたが、接続しようとしたノードとは別のノードで。おっと。
ijoseph

1
@ijosephそのため、当時は何も聞いていませんでした。
user9517

5

Debian 6のスクイーズでは、SSHサービスチェックするのと同じくらい簡単でした:

sudo service ssh status

そして、サービスをインストールするssh: unrecognized serviceだけで(メッセージとともに)何も存在しませんでした:

sudo apt-get install openssh-server

SFTPはSSHのサブセットであるため(FTPSはFTPのサブセットであるため)、これはSFTP接続を取得していない場合にも機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.