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 относительно регистрации, файлов конфигурации, демонов и т. Д.
Надеюсь, это сэкономит кому-то время в будущем!