Що викликає повідомлення "Підключення відмовлено"?


110

Це канонічне запитання про відмову від з'єднання

Ми бачимо багато питань до цього

Коли я намагаюся підключитися до системи, я отримую повідомлення

З'єднання відхилено

Чому це ?


2
Ми отримуємо це багато в Apache Hadoop, де це часто викликано помилками налаштування клієнта: з яким хостом поговорити, з якими налаштованими їх DNS або / etc / хост-таблицями або з невідповідністю між портами, якими користується сервіс і що клієнти думають, що він повинен використовувати. Відповідно, у нас є виділений вікі-запис на цю тему. Багато проблем, ймовірно, в іншому місці, хоча і (сподіваючись) у меншому масштабі. Налагодження проблем з підключенням у кластері 1000 вузлів - це не цікаво.
Стів Лофран

Ваше виділене
вхідне

1
хороший улов. Ось офіційне посилання: wiki.apache.org/hadoop/ConnectionRefused . Я додаю перехресне посилання звідти сюди для цієї повної петлі.
Стів Лофран

Стаття @SteveLoughran Cool - один коментар - зворотній зв'язок говорить про переповнення стека, і ми помилки сервера;)
користувач9517

зроблено. FWIW, це посилання на wiki додано до винятків ConnectionRefused, що передаються в стеку Hadoop, а також додаткової інформації (хостів, портів), необхідної для визначення того, що відбувається не так. Ми все ще отримуємо багато повідомлень про помилки від людей, які бачать слід стека і не переходять за посиланням на вікі
Steve Loughran

Відповіді:


118

Примітка . Це повідомлення є симптомом проблеми, яку ви намагаєтеся вирішити. Розуміння причини повідомлення, врешті-решт, призведе до вирішення вашої проблеми.

Повідомлення "Підключення відмовлено" має дві основні причини:

  1. Нічого не слухає в IP: Порт, до якого ви намагаєтеся підключитися.
  2. Порт заблокований брандмауером.

Жоден процес прослуховування.

Це, безумовно, найпоширеніша причина повідомлення. Спочатку переконайтеся, що ви намагаєтеся підключитися до правильної системи. Якщо ви повинні визначити, чи це проблема, на віддаленій системі запустіть netstat або ss 1, наприклад, якщо ви очікуєте прослуховування процесу на порту 22222

sudo netstat -tnlp | grep :22222

або

ss -tnlp | grep :22222

Для OSX підходяща команда є

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

Якщо нічого не слухати, то вищезгадане не дасть результату. Якщо ви бачите деякий вихід, тоді підтвердьте, що ви очікуєте, тоді дивіться розділ брандмауера нижче.

Якщо у вас немає доступу до віддаленої системи і ви хочете підтвердити проблему, перш ніж повідомити про це відповідним адміністраторам, ви можете використовувати tcpdump (wireshark або подібне).

При спробі підключення до порту IP: де нічого не прослуховується, відповідь віддаленої системи на початковий пакет SYN - це пакет з прапорами RST, ACK. Це закриває з'єднання і викликає повідомлення про відмову від з'єднання, наприклад

$ sudo tcpdump -n хост 192.0.2.1 і порт 22222
tcpdump: підключений багатослівний вихід, використовуйте -v або -vv для повного декодування протоколу при
прослуховуванні enp14s0, тип посилання EN10MB (Ethernet), розмір захоплення 262144 байт

12: 31: 27.013976 IP 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, довжина 0

Зауважте, що tcpdump використовує a . щоб представляти ACK прапор.

Порт блокується брандмауером

Якщо порт заблокований брандмауером, а брандмауер налаштовано на відповідь, icmp-port-unreachableце також призведе до повідомлення про відмову в з’єднанні. Знову це можна побачити за допомогою tcpdump (або подібного)

$ sudo tcpdump -n icmp
tcpdump: вимикається багатослівний вихід, використовуйте -v або -vv для повного декодування протоколу при

прослуховуванні enp14s0, тип посилання EN10MB (Ethernet), розмір захоплення 262144 байтів 13: 03: 24.149897 IP 192.0.2.1> 192.0. 2.2: порт IC22 192.0.2.1 tcp 22222 недоступний, довжина 68

Зауважте, що це також говорить нам, де знаходиться блокувальний брандмауер.


Отже, тепер ви знаєте, що викликає повідомлення про відмову в з’єднанні, вам слід вжити відповідних заходів, наприклад, зв’язатися з адміністратором брандмауера або дослідити причину того, що процес не прослуховується.

1 Можливо, інші інструменти доступні.


2
Версія ELI5: це означає, що запит на з'єднання потрапив до іншого комп'ютера, а інший комп'ютер не мав поняття, про що ви говорили.
immibis

"Жоден процес не прослуховується." Основна причина ..!
Саміта Чатуранга

У моєму випадку щось слухали ... але на іншому вузлі, до якого я намагався підключитися. На жаль
ійосеф

1
@ijoseph Тож нічого тоді не слухали.
користувач9517

5

Для мене на Debian 6 вичавити це було так само просто, як перевірити службу SSH :

sudo service ssh status

І нічого не знайшлося (із повідомленням ssh: unrecognized service), просто встановивши сервіс :

sudo apt-get install openssh-server

Це також працює, якщо ви не отримуєте з'єднання SFTP, оскільки SFTP є підмножиною SSH (тоді як FTPS - це підмножина FTP).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.