Điều gì gây ra thông báo 'Kết nối bị từ chối'?


110

Đây là một câu hỏi Canonical về kết nối bị từ chối

Chúng tôi thấy rất nhiều câu hỏi để có hiệu lực

Khi tôi cố gắng kết nối với một hệ thống, tôi nhận được một tin nhắn

Kết nối bị từ chối

Tại sao lại thế này?


2
Chúng tôi nhận được điều này rất nhiều trong Apache Hadoop, nơi thường xảy ra do lỗi cấu hình trong máy khách: máy chủ nào sẽ nói chuyện, bảng DNS hoặc / etc / host của chúng được thiết lập hoặc không khớp giữa các cổng được sử dụng bởi dịch vụ và khách hàng nghĩ rằng nó nên sử dụng. Theo đó, chúng tôi có một mục wiki dành riêng về chủ đề này. Nhiều vấn đề có thể xảy ra ở những nơi khác, mặc dù (hy vọng) ở quy mô nhỏ hơn. Gỡ lỗi các vấn đề kết nối trong cụm 1000 nút không thú vị.
Steve Loughran

Liên kết mục nhập wiki chuyên dụng của bạn chỉ ra câu hỏi này;)
user9517

1
nắm bắt tốt. Đây là liên kết chính thức: wiki.apache.org/hadoop/ConnectionRefuse . Tôi sẽ thêm một tham chiếu chéo từ đó đến đây cho vòng lặp đầy đủ đó.
Steve Loughran

@SteveLoughran Bài viết thú vị - một bình luận - liên kết lại cho biết Stack Overflow và chúng tôi là Server Fault;)
user9517

làm xong. FWIW, liên kết wiki đó được thêm vào các ngoại lệ ConnectionRefuse được truyền trong ngăn xếp Hadoop, cùng với thông tin bổ sung (máy chủ, cổng) cần thiết để tìm ra sự cố. Chúng tôi vẫn nhận được rất nhiều báo cáo lỗi từ những người nhìn thấy dấu vết ngăn xếp và không theo liên kết đến wiki
Steve Loughran

Câu trả lời:


118

Lưu ý : Thông báo này là một triệu chứng của vấn đề bạn đang cố gắng giải quyết. Hiểu nguyên nhân của thông điệp cuối cùng sẽ dẫn bạn đến việc giải quyết vấn đề của bạn.

Thông báo 'Từ chối kết nối' có hai nguyên nhân chính:

  1. Không có gì nghe trên IP: Cổng bạn đang cố gắng kết nối.
  2. Cổng bị chặn bởi tường lửa.

Không có quá trình là lắng nghe.

Đây là lý do phổ biến nhất cho tin nhắn. Trước tiên hãy đảm bảo rằng bạn đang cố gắng kết nối với hệ thống chính xác. Nếu bạn đang xác định xem đây có phải là sự cố hay không, trên hệ thống từ xa hãy chạy netstat hoặc ss 1, ví dụ: nếu bạn đang mong đợi một quá trình được lắng nghe trên cổng 22222

sudo netstat -tnlp | grep :22222

hoặc là

ss -tnlp | grep :22222

Đối với OSX, một lệnh thích hợp là

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

Nếu không có gì nghe thì ở trên sẽ không có đầu ra. Nếu bạn thấy một số đầu ra thì hãy xác nhận rằng đó là những gì bạn mong đợi, hãy xem phần tường lửa bên dưới.

Nếu bạn không có quyền truy cập vào hệ thống từ xa và muốn xác nhận sự cố trước khi báo cáo với quản trị viên có liên quan, bạn có thể sử dụng tcpdump (wireshark hoặc tương tự).

Khi một kết nối được thử với một cổng IP: nơi không có gì lắng nghe, phản hồi từ hệ thống từ xa đến gói SYN ban đầu là một gói có các cờ RST, ACK được đặt. Điều này sẽ đóng kết nối và gây ra thông báo Từ chối kết nối, vd

$ sudo tcpdump -n host 192.0.2.1 và cổng 22222
tcpdump: đầu ra verbose bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ
trên enp14s0, loại EN10MB (Ethernet), kích thước chụp 262144 byte

12: 31: 27 192.0.2.2.34390> 192.0.2.1.22222: Cờ [S] , seq 1207858804, thắng 29200, tùy chọn [mss 1460, sackOK, TS val 15306344 ecr 0, nop, wscale 7], độ dài 0

12: 31: 27.020162 192.0.2.1.22222> 192.0.2.2.34390: Cờ [R.] , seq 0, ack 1207858805, thắng 0, dài 0

Lưu ý rằng tcpdump sử dụng a . để đại diện cho cờ ACK .

Cổng bị chặn bởi tường lửa

Nếu cổng bị chặn bởi tường lửa và tường lửa đã được cấu hình để phản hồi với icmp-port-unreachableđiều này cũng sẽ gây ra thông báo từ chối kết nối. Một lần nữa bạn có thể thấy điều này với tcpdump (hoặc tương tự)

$ sudo tcpdump -n icmp
tcpdump: đầu ra verbose bị chặn, sử dụng -v hoặc -vv để

nghe giải mã giao thức đầy đủ trên enp14s0, EN10MB loại liên kết (Ethernet), kích thước thu 262144 byte 13: 03.149897 2.2: Cổng ICMP 192.0.2.1 tcp 22222 không truy cập được, chiều dài 68

Lưu ý rằng điều này cũng cho chúng ta biết tường lửa chặn ở đâu.


Vì vậy, bây giờ bạn biết những gì gây ra thông báo từ chối kết nối, bạn nên có hành động thích hợp, ví dụ như liên hệ với quản trị viên tường lửa hoặc điều tra lý do cho quá trình không lắng nghe.

1 công cụ khác có khả năng có sẵn.


2
Phiên bản ELI5: có nghĩa là yêu cầu kết nối đã đến máy tính khác và máy tính kia không biết bạn đang nói gì.
Immibis

"Không có quá trình là lắng nghe." Lý do chính ..!
Samitha Chathuranga

Trong trường hợp của tôi, một cái gì đó đang lắng nghe nhưng trên một nút khác mà tôi đang cố gắng kết nối. Úi.
ijoseph

1
@ijoseph Vậy là không có gì nghe rồi.
dùng9517

5

Đối với tôi, việc nén Debian 6 đơn giản như kiểm tra dịch vụ SSH :

sudo service ssh status

Và không tìm thấy gì tồn tại (với thông báo ssh: unrecognized service) chỉ cần cài đặt dịch vụ :

sudo apt-get install openssh-server

Điều này cũng hoạt động nếu bạn không nhận được kết nối SFTP, vì SFTP là tập hợp con của SSH (trong khi FTPS là tập hợp con của FTP).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.