Mosquito Server отказывается от подключений Ubuntu 18.04

Это довольно узкий вопрос, но я надеюсь, что группа Ubuntu может помочь. Я спросил о SO, но я уверен, что ошибка, которую я получаю, связана с отсутствием настроек в Ubuntu или проблемой с моим портом маршрутизатора. Я не знаю, как это отладить.

Я установил Mosquitto в своей системе Ubuntu 18.04. По умолчанию он работает через порт 1883. Вы можете указать точный порт либо в командной строке, либо в файле конфигурации. Я перепробовал много вариантов:

Я открыл порт 1883 в брандмауэре через UFW. Это кажется правильным:

mark_admin:~$ sudo ufw status
Status: active    
To                         Action      From
--                         ------      ----
1883                       ALLOW       Anywhere                  
5900                       ALLOW       Anywhere                  
1883 (v6)                  ALLOW       Anywhere (v6)             
5900 (v6)                  ALLOW       Anywhere (v6)             

Я могу подключиться к нему с другого компьютера в локальной сети. Но когда я пытаюсь открыть соединение из "внешнего мира", используя фактический IP-адрес компьютера, я получаю сообщение об ошибке "Невозможно установить соединение, потому что целевая машина активно отказалась от него".

РЕДАКТИРОВАТЬ: Решено. Я переадресовал порт не на тот маршрутизатор.

2 ответа

Решение

Я предполагаю, что на вашем сервере есть доступ в интернет.

Если вы можете добраться до порта в локальной сети, то проблема определенно связана с переадресацией портов.

Во-первых, у вашей серверной машины есть статический IP-адрес внутри сети? Если нет, я настоятельно рекомендую сначала исправить это. Причина этого заключается в том, что когда вы настраиваете переадресацию порта, он захочет узнать, какой внутренний адрес (диапазон 192.168.0.x) будет перенаправлен. Но если ваш сервер динамический (использует DHCP), он иногда будет перемещаться, и каждый раз, когда это происходит, он прерывает переадресацию портов.

Во-вторых, глядя на ваш скриншот с настройками переадресации портов, он в основном выглядит хорошо, за исключением того, что он имеет 192.168.0.144, что отличается от 192.168.0.155, указанного в комментариях к вопросу. Убедитесь, что вы это исправили.

В-третьих, где вы тестируете соединение с внешним адресом (96.221.154.134)? Если это из-за того же маршрутизатора, если ваш маршрутизатор не поддерживает "шпильку NAT" (чего нет у большинства потребительских маршрутизаторов), он не будет работать. Но это будет работать для всех остальных "в интернете" (то есть, люди не за тем же маршрутизатором). Так что все может работать, и то, как вы тестируете, может быть сломано. Очевидно, что если вы находитесь за одним и тем же маршрутизатором, вам следует просто использовать внутренний адрес вместо общедоступного (если это возможно, IE, вы не используете DNS-имена, отвечающие на один и тот же адрес, независимо от того, за каким маршрутизатором вы находитесь).

В-четвертых, если у вас несколько маршрутизаторов с несколькими уровнями NAT, все "установите статический внутренний IP-адрес и перенаправьте порт на него" применимы к каждому маршрутизатору. Поэтому, если у вас есть два маршрутизатора, A и B, с B за A и A, подключенным к вашему интернет-провайдеру, вам нужно настроить маршрутизатор B на статический IP-адрес в его WAN/ восходящем соединении (которое является сетью "LAN" маршрутизатора A)., Затем на маршрутизаторе A необходимо настроить переадресацию портов на адрес маршрутизатора B. Затем повторите процедуру для маршрутизатора B: установите статический IP-адрес на сервере, а затем на маршрутизаторе B перенаправьте порт на статический IP-адрес сервера.

PS: разве NAT и переадресация портов не приносят удовольствия? (это был сарказм). Вы можете спросить у своего интернет-провайдера, есть ли у него доступный IPv6, что является долгосрочным решением для того, чтобы не иметь дело с переадресацией портов или NAT. Большинство интернет-провайдеров довольно медленно внедряют IPv6; в основном потому, что немногие клиенты понимают достаточно, чтобы понять, что это облегчит все (как только мы получим всех по IPv6).

Я публикую это как ответ, чтобы я мог дать больше подробностей на случай, если кто-нибудь наткнется на это в будущем.

Настройка сервера MOSQUITTO MQTT в Ubuntu 18.04 на самом деле не сложная, но шаги важны.

Шаг 1: Установите программное обеспечение Mosquitto

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto

Шаг 2: Откройте порт 1883 и запустите брандмауэр

sudo ufw allow 1883 
sudo ufw enable

Шаг 3: Убедитесь, что Mosquitto еще не запущен

pgrep mosquitto

[Обратите внимание, если отображается любое число, это PID уже запущенного Mosquitto. Вы можете просто убить это. Также вы можете попробовать: sudo service mosquitto stop ]

Шаг 4: Запустите Mosquitto с подробной опцией

mosquitto -v

[Примечание: запускается Mosquitto без использования файла конфигурации. Это выводит на экран информацию о подключении и статусе. Самый простой для быстрой отладки.]

Шаг 5: Проверьте подключение с помощью локального хоста

Перейдите на свой клиентский компьютер (в моем случае это ноутбук с Windows 10) и запустите клиент MQTT, подключившись к локальному адресу сервера Linux Mosquitto (в моем случае 192.168.0.144). Вы должны быть в состоянии подключиться. Фактически, вы можете сделать этот шаг еще до того, как откроете брандмауэр, поскольку все это находится в локальной сети, правила брандмауэра на данном этапе не имеют значения. До следующего шага, который...

Шаг 6: Проверьте подключение с помощью веб-инструмента

используйте: www.yougetsignal.com/tools/open-ports/ или https://canyouseeme.org/

[ПРИМЕЧАНИЕ: Вы не получите состояние ОТКРЫТО, ЕСЛИ БРОКЕР MOSQUITTO НЕ РАБОТАЕТ ]

Шаг 7: если порт отображается закрытым при входе из Интернета (то есть не локальный)

Вот где я споткнулся. В моем случае у меня есть модем Verizon, который также имеет брандмауэр (потому что у него есть маршрутизатор). У меня есть собственный беспроводной маршрутизатор, tp-link Archer C1200, который я подключил к модему / маршрутизатору Fios. Я начал с переадресации портов в tp-link. Но этот брандмауэр идет после брандмауэра Fios, поэтому мне нужно было перейти к первой стене и сделать там порт вперед.

И это второе, что сложно. Все интерактивные инструкции говорят, что я должен перенаправить порт 1883 на локальный IP-адрес моего Linux-сервера, который в моем случае был 192.168.0.144. Но это было не правильно в моем случае. Archer C1200 был на самом деле устройством, которое мне нужно было переслать - он обрабатывал правильный дистрибутив оттуда. У него был адрес 192.168.0.152, назначенный ему от маршрутизатора Verizon. У меня все еще есть обе переадресации (то есть Fios и tp-link), и я предполагаю, что они мне нужны.

Теперь все пути открыты, вы можете следовать другим инструкциям Mosquitto относительно регистрации, файлов конфигурации, демонов и т. Д.

Надеюсь, это сэкономит кому-то время в будущем!

Другие вопросы по тегам