Mosquitto: Mosty

Jak połączyć serwery Mosquitto (most)

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Mosquitto MQTT cloud, które zapewnia wiele korzyści, w tym:

  • Nieograniczoną wymianę i transfer wiadomości.
  • Nieograniczoną autoryzację urządzeń za pomocą zewnętrznego API.
  • Zaawansowane ACL na tematy, użytkowników i działania.
  • Dostosowywalną nazwę domeny zabezpieczoną za pomocą HTTPS (na przykład, https://mqtt.twoja-firma.com).
  • Łatwe aktualizacje za pomocą jednego kliknięcia.
  • Optymalną wydajność i solidne bezpieczeństwo dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie Mosquitto MQTT cloud hosting Stackhero!

Łączenie wielu brokerów MQTT umożliwia płynną wymianę danych między różnymi lokalizacjami.

Wyobraź sobie serwer Mosquitto w magazynie z kilkoma podłączonymi urządzeniami. Możesz połączyć tego zdalnego brokera z instancją Stackhero (Mosquitto MQTT) za pomocą funkcji "most". Ta konfiguracja pozwala urządzeniom podłączonym do instancji Stackhero i tym w magazynie komunikować się, jakby były podłączone do tego samego brokera.

Dla zaawansowanych zastosowań możesz dostosować, które tematy mają być udostępniane. Możesz również dodać zdalne tematy do podtematu, takiego jak "warehouse", gdzie "warehouse/#" przechwyci wszystkie twoje zdalne urządzenia. Osiąga się to za pomocą opcji topic w mosquitto.conf. Chociaż ten przewodnik nie obejmuje tej zaawansowanej konfiguracji, więcej informacji znajdziesz w oficjalnej dokumentacji Mosquitto.

W tym przykładzie zdalny serwer połączy się z instancją Stackhero, używając dedykowanego użytkownika z szyfrowaniem TLS dla maksymalnego bezpieczeństwa.

Najpierw utwórz nowego użytkownika na instancji MQTT Stackhero. Nazwijmy go bridge-1, z hasłem secretPassword.

Następnie, na zdalnym serwerze Mosquitto, możesz edytować plik konfiguracyjny mosquitto.conf (zwykle znajdujący się w /etc/mosquitto/mosquitto.conf), dodając następujące linie na końcu:

# TODO: zastąp "<XXXXXX>.stackhero-network.com" i "<PORT_TLS>" informacjami o swojej instancji Stackhero
connection <XXXXXX>.stackhero-network.com
address <XXXXXX>.stackhero-network.com:<PORT_TLS>

# TODO: zastąp "bridge-1" i "secretPassword" danymi nowo utworzonego użytkownika
remote_clientid bridge-1
remote_username bridge-1
remote_password secretPassword

start_type automatic
try_private true

# Tematy do udostępnienia, kierunek i QOS.
# Zauważ, że "both" wydaje się nie działać z nieznanego powodu.
topic # out 2
topic # in 2

# Włącz połączenie TLS, aby zaszyfrować dane między zdalnym serwerem Mosquitto a instancją Stackhero.
bridge_insecure false
bridge_capath /etc/ssl/certs

Przed ponownym uruchomieniem Mosquitto z nową konfiguracją upewnij się, że certyfikaty TLS istnieją na twoim zdalnym serwerze.

Sprawdź, czy katalog /etc/ssl/certs istnieje i zawiera pliki za pomocą polecenia:

ls /etc/ssl/certs

Jeśli istnieje i zawiera pliki, możesz po prostu ponownie uruchomić swój serwer Mosquitto.

Jeśli nie istnieje, możesz rozważyć wykonanie jednego z tych poleceń:

  • Na Ubuntu/Debian możesz uruchomić:

    sudo apt-get install ca-certificates
    
  • Na Alpine Linux możesz uruchomić:

    apk add ca-certificates
    

Alternatywnie, możesz ręcznie pobrać certyfikat. Aby to zrobić, pobierz certyfikat CA do /etc/mosquitto/isrgrootx1.pem za pomocą następującego polecenia:

wget https://letsencrypt.org/certs/isrgrootx1.pem -O /etc/mosquitto/isrgrootx1.pem

Następnie edytuj plik mosquitto.conf, aby zastąpić bridge_capath /etc/ssl/certs na bridge_cafile /etc/mosquitto/isrgrootx1.pem.

Na koniec ponownie uruchom swój serwer Mosquitto.

Więcej informacji na temat konfiguracji mostów znajdziesz w oficjalnej dokumentacji Mosquitto.

Mosquitto nie dostarcza szczegółowych logów do weryfikacji działania mostu.

Najlepszym sposobem na upewnienie się, że działa, jest bezpośrednie przetestowanie.

Możesz połączyć się ze swoim zdalnym serwerem i zasubskrybować temat testBridge używając istniejącego użytkownika (i hasła) zadeklarowanego na zdalnym serwerze:

mosquitto_sub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -v

W innym terminalu możesz połączyć się z instancją Mosquitto Stackhero używając istniejącego użytkownika (i hasła) zadeklarowanego na twojej instancji Mosquitto Stackhero:

mosquitto_sub -h <XXXXXX>.stackhero-network.com -p <PORT_TLS> -u <user> -P <password> -t "testBridge" -v

Otwórz trzeci terminal i wyślij wiadomość testową używając swojej instancji Stackhero (i odpowiedniego użytkownika):

mosquitto_pub -h <XXXXXX>.stackhero-network.com -p <PORT_TLS> -u <user> -P <password> -t "testBridge" -m "Message from Stackhero broker"

Powinieneś zobaczyć "Message from Stackhero broker" na swoich dwóch pierwszych terminalach.

Na koniec wyślij wiadomość testową używając swojej zdalnej instancji Mosquitto:

mosquitto_pub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -m "Message from remote broker"

Gratulacje! Teraz masz dwa serwery MQTT połączone bezpiecznie, z uwierzytelnianiem i szyfrowaniem!