Невозможно подключиться к брокеру Mosquitto с удаленного компьютера. Paho.mqtt Python3.7 - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть брокер Mosquitto, работающий в оболочке Debian на моем ноутбуке с включенным TLS. Я могу успешно подключиться к нему из другой оболочки Debian под управлением Python3.7, используя paho.mqtt.client и ssl на одном ноутбуке. Но когда я пытаюсь подключиться из внешнего экземпляра Debian (в частности, Raspberry Pi 3B +), вызов метода «connect» просто зависает, пока не произойдет ошибка тайм-аута.

Вот что работает на клиентской оболочке моего ноутбука:

    import paho.mqtt.client as mqtt
    import ssl
    mqttc = mqtt.Client()
    mqttc.tls_set("ca.crt", "client.crt", "client.key", cert_reqs=ssl.CERT_REQUIRED)
    mqttc.connect("LPS", 8883)

Когда я пытаюсь сделать то же самое на RPi3B +, метод подключения просто зависает. «LPS» - это имя компьютера моего ноутбука, которое я использовал при создании ключей / сертификатов в соответствии с этим документом: https://mosquitto.org/man/mosquitto-tls-7.html

Вот мой вызов метода подключения:

    mqttc.connect("LPS", 8883)

На RPi3B + у меня есть тот же сертификат центра сертификации (ca.crt). Я пытался использовать один и тот же client.crt и client.key, но недавно я пытался использовать новые client.crt и client.key, сгенерированные с использованием openssl на RPi3B + (то же самое «Общее имя»: LPS). Без разницы.

Согласно нескольким предложениям, я попытался изменить третье утверждение на различные комбинации следующих (включая попытку mqtt.MQTTv31 для протокола):

    Client(client_id="", clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp")

Без разницы.

Мой RPi3B + подключен к моему ноутбуку через мою сеть WiFi И через небольшой Ethernet-коммутатор (Link Local connection). Я попытался заменить «LPS» в вызове метода подключения на IP-адреса («169.254.128.185» и «192.168.0.102»). Без разницы.

Я запускаю mosquitto, используя следующую команду из / etc / mosquitto:

    mosquitto -c mosquitto.conf -v

Вот соответствующие строки из mosquitto.conf:

    port 8883
    cafile /etc/mosquitto/ca_certificates/ca.crt
    certfile /etc/mosquitto/certs/server.crt
    keyfile /etc/mosquitto/certs/server.key
    tls_version tlsv1
    require_certificate true

Я также попытался установить следующее в mosquitto.conf (просто бросать вещи в стену, чтобы посмотреть, что может прилипнуть):

    bind_address LPS
    protocol mqtt

Без разницы.

Я заметил, что если я ввожу какую-то фигню для домена / IP-адреса в методе соединения, произойдет то же самое:

    mqttc.connect("iujhkjhk", 8883)

Нет разницы, то есть он зависает до тех пор, пока не произойдет ошибка тайм-аута.

Одна вещь, которую я могу сделать, чтобы получить другой результат, - это если я префикс домена / IP-адреса с "tcp: //". В этом случае я сразу получаю сообщение об ошибке:

    socket.gaierror: [Errno -2] Name or service not known

Я пытался убедиться, что у меня везде установлены последние версии mosquitto и paho.mqtt.

Что я делаю не так, пытаясь подключиться с RPi3B +. ​​

...