Не удается заставить Mosquitto разрешить соединение из внешней локальной сети - PullRequest
0 голосов
/ 26 февраля 2019

У меня ноутбук с Linux Ubuntu 18.04, и я установил брокера Mosquitto MQTT там.На моем ноутбуке с Windows 10 я запускаю приложение C #, написанное в Visual Studio 2013, которое использует библиотеки M2Mqtt.

Если я подключаюсь через локальный хост, все в порядке.Я запускаю сервер Mosquitto, подключаюсь через приложение C #, подписываюсь на тему, а затем могу отправлять сообщения туда и обратно весь день.

Но когда я пытаюсь подключиться через интернет-адрес, я постоянно получаюuPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException: «Невозможно установить соединение, поскольку целевая машина активно отказала ему в ошибке 95.XXX.XXX.134: 1883».(Адрес, который я получил через "WhatsmyIP")

Вот что я сделал до сих пор:

Сначала я пошел к своему маршрутизатору, который является TP-LINK AC1200.Я установил порт для перенаправления на локальный IP-адрес блока Linux.

TPLINK Screenshot

Затем я подошел к своему блоку Linux и использовал ufw для включения порта1833 и включите брандмауэр

Linux Screenshot

Оттуда я перепробовал все, что мог придумать - я запустил Mosquitto с портом, объявленным в командестрока, я изменил файл conf, чтобы сказать:

Слушатель 1883 0.0.0.0

и

Слушатель 1883 192.168.0.144

Я удалилназначение порта и назначение слушателя полностью (так как это все равно по умолчанию), и всегда я получаю один и тот же результат.

Я скачал 2 разные утилиты - одну на телефон Android, а другую - приложение, доступное в магазине Windows, и я не могу подключиться ни к одной из них.Телефон Android просто не будет подключаться (он не подключен к той же сети, поэтому опция localhost недоступна), а другое приложение будет подключаться локально, но не при переходе на интернет-адрес.

У меня такое чувство, что я просто упускаю одну маленькую вещь, но я не могу понять, что это такое.Есть и другие вопросы, связанные с переполнением стека, которые показывают ту же ошибку, но они мне не помогают.

Если это имеет значение, то текущий код C #, который выполняется:

try 
           {
                System.Security.Cryptography.X509Certificates.X509Certificate caCert = null;
                Boolean useSecureProtocol = false;
                int OpenPort = 1883;
                // external IP address
                String PublicIPAddress = "95.XXX.XXX.134";
                // local IP address
                String LocalIPAddress = "192.168.0.144";

                System.Net.IPAddress ipaddress = System.Net.IPAddress.Parse(PublicIPAddress);
                client = new MqttClient(ipaddress, OpenPort, useSecureProtocol, caCert, MqttSslProtocols.TLSv1_0); 
// certificate and Protocol are irrelevant because security set to false??
            }
            catch (System.Net.Sockets.SocketException SException )
            {
                string SEX = SException.Message;
            }

* * * 

            try
            {
                Byte retVal = client.Connect(ClientId);
            }
            catch (uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException ex)
            {
                string m = ex.Message;
            }

Файл конфигурации: conf.d (который я запускаю явно с опцией -C)

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
#


pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /home/mark_admin/mosquitto.log

include_dir /etc/mosquitto/conf.d

Как я уже сказал, я изменил его и перепробовал много вещей:

Слушатель 1883 192.168.0.144 Слушатель 1883 0.0.0.0 Слушатель 1883

И ничего из вышеперечисленного.Просто оставил это поле пустым.Никто из них не работал.

1 Ответ

0 голосов
/ 27 февраля 2019

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

Настройка сервера 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 ]

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

mosquitto -v

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

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

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

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

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

[ПРИМЕЧАНИЕ. Вы не получите состояние OPEN ЕСЛИ БРОКЕР 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 относительно регистрации, конфигурациифайлы, демоны и т. д.

Надеюсь, это спасет кого-то в будущем!

...