Apa yang menyebabkan pesan 'Koneksi Ditolak'?

110

Ini adalah Pertanyaan Canonical tentang Koneksi yang Ditolak

Kami melihat banyak pertanyaan

Ketika saya mencoba untuk terhubung ke sistem saya mendapat pesan

Sambungan ditolak

Kenapa ini ?

user9517
sumber
2
Kami mendapatkan ini banyak di Apache Hadoop, di mana sering disebabkan oleh kesalahan konfigurasi di klien: host mana yang harus diajak bicara, untuk apa DNS atau / etc / host tables diatur, atau ketidaksesuaian antara port yang digunakan oleh layanan dan yang menurut klien harus digunakan. Karenanya, kami memiliki entri wiki khusus tentang topik ini. Banyak masalah mungkin terjadi di tempat lain, meskipun (dengan harapan) dalam skala yang lebih kecil. Masalah koneksi debugging dalam 1000 node cluster tidak menyenangkan.
Steve Loughran
Tautan entri wiki khusus Anda menunjukkan pertanyaan ini;)
user9517
1
tangkapan yang bagus. Inilah tautan resminya: wiki.apache.org/hadoop/ConnectionRefused . Saya akan menambahkan referensi silang kembali dari sana ke sini untuk loop penuh sekalipun.
Steve Loughran
@SteveLoughran Cool artikel - satu komentar - tautan kembali mengatakan Stack Overflow dan kami Server Fault;)
user9517
Selesai. FWIW, tautan wiki itu ditambahkan ke pengecualian ConnectionRefused yang dilewatkan di tumpukan Hadoop, bersama dengan info tambahan (host, port) yang diperlukan untuk mencari tahu apa yang salah. Kami masih mendapatkan banyak laporan bug dari orang-orang yang melihat jejak tumpukan dan tidak mengikuti tautan ke wiki
Steve Loughran

Jawaban:

118

Catatan : Pesan ini adalah gejala dari masalah yang Anda coba selesaikan. Memahami penyebab pesan pada akhirnya akan mengarahkan Anda untuk menyelesaikan masalah Anda.

Pesan 'Koneksi Ditolak' memiliki dua penyebab utama:

  1. Tidak ada yang mendengarkan pada IP: Port yang Anda coba sambungkan.
  2. Port diblokir oleh firewall.

Tidak ada proses mendengarkan.

Sejauh ini inilah alasan paling umum untuk pesan tersebut. Pertama, pastikan Anda mencoba terhubung ke sistem yang benar. Jika Anda kemudian menentukan apakah ini masalahnya, pada sistem jarak jauh jalankan netstat atau ss 1 misalnya jika Anda mengharapkan suatu proses untuk mendengarkan pada port 22222

sudo netstat -tnlp | grep :22222

atau

ss -tnlp | grep :22222

Untuk OSX perintah yang sesuai adalah

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

Jika tidak ada yang mendengarkan maka di atas tidak akan menghasilkan output. Jika Anda melihat beberapa output maka konfirmasikan bahwa itulah yang Anda harapkan kemudian lihat bagian firewall di bawah ini.

Jika Anda tidak memiliki akses ke sistem jarak jauh dan ingin mengkonfirmasi masalah sebelum melaporkannya ke administrator terkait, Anda dapat menggunakan tcpdump (wireshark atau yang serupa).

Ketika koneksi dicoba ke IP: port di mana tidak ada yang mendengarkan, respons dari sistem jarak jauh ke paket SYN awal adalah paket dengan flag RST, ACK set. Ini menutup koneksi dan menyebabkan pesan Koneksi Ditolak misalnya

$ sudo tcpdump -n host 192.0.2.1 dan port 22222
tcpdump: keluaran verbose ditekan, gunakan -v atau -vv untuk protokol decode penuh
mendengarkan pada enp14s0, tipe tautan EN10MB (Ethernet), ukuran tangkap 262144 byte

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

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

Perhatikan bahwa tcpdump menggunakan a . untuk mewakili bendera ACK .

Port diblokir oleh firewall

Jika port diblokir oleh firewall dan firewall telah dikonfigurasi untuk merespons dengan icmp-port-unreachableini juga akan menyebabkan koneksi menolak pesan. Sekali lagi Anda dapat melihat ini dengan tcpdump (atau serupa)

$ sudo tcpdump -n icmp
tcpdump: keluaran verbose ditekan, gunakan -v atau -vv untuk protokol decode penuh

mendengarkan pada enp14s0, tipe tautan EN10MB (Ethernet), ukuran tangkapan 262144 byte 13: 03: 24.149897 IP 192.0.2.1> 192.0. 2.2: ICMP 192.0.2.1 tcp port 22222 tidak dapat dijangkau, panjang 68

Perhatikan bahwa ini juga memberitahu kita di mana firewall pemblokiran berada.


Jadi sekarang Anda tahu apa yang menyebabkan pesan Sambungan ditolak Anda harus mengambil tindakan yang sesuai misalnya hubungi administrator firewall atau menyelidiki alasan untuk proses tidak mendengarkan.

1 Alat lain mungkin tersedia.

user9517
sumber
2
Versi ELI5: itu berarti permintaan koneksi sampai ke komputer lain, dan komputer lain tidak tahu apa yang Anda bicarakan.
immibis
"Tidak ada proses mendengarkan." Alasan utama ..!
Samitha Chathuranga
Dalam kasus saya, ada sesuatu yang mendengarkan ... tetapi pada simpul yang berbeda yang saya coba sambungkan. Ups.
ijoseph
1
@ijoseph Jadi tidak ada yang mendengarkan saat itu.
user9517
5

Bagi saya pada Debian 6 memeras itu semudah memeriksa layanan SSH :

sudo service ssh status

Dan menemukan tidak ada (dengan pesan ssh: unrecognized service) hanya menginstal layanan :

sudo apt-get install openssh-server

Ini juga berfungsi jika Anda tidak mendapatkan koneksi SFTP, karena SFTP adalah bagian dari SSH (sedangkan FTPS adalah bagian dari FTP).

SharpC
sumber