Mosquitto: Bridges

Wie man Mosquitto-Server miteinander verbindet (Bridge)

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Mosquitto MQTT Cloud Lösung, die zahlreiche Vorteile bietet, darunter:

  • Unbegrenzter Nachrichtenaustausch und -transfer.
  • Unbegrenzte Geräteauthentifizierung über eine externe API.
  • Erweiterte ACLs für Themen, Benutzer und Aktionen.
  • Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://mqtt.ihre-firma.com).
  • Mühelose Updates mit nur einem Klick.
  • Optimale Leistung und robuste Sicherheit durch eine private und dedizierte VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Mosquitto MQTT Cloud Hosting Lösung von Stackhero auszuprobieren!

Das Verbinden mehrerer MQTT-Broker ermöglicht einen nahtlosen Datenaustausch über verschiedene Standorte hinweg.

Stellen Sie sich vor, Sie haben einen Mosquitto-Server in einem Lagerhaus mit mehreren verbundenen Geräten. Sie können diesen entfernten Broker mit einer Stackhero-Instanz (Mosquitto MQTT) über die "Bridge"-Funktion verbinden. Diese Konfiguration ermöglicht es, dass Geräte, die mit der Stackhero-Instanz und denen im Lagerhaus verbunden sind, kommunizieren, als wären sie mit demselben Broker verbunden.

Für fortgeschrittene Anwendungen können Sie anpassen, welche Themen geteilt werden müssen. Sie können auch entfernte Themen zu einem Unterthema wie "warehouse" hinzufügen, wobei "warehouse/#" alle Ihre entfernten Geräte erfasst. Dies wird mit der topic-Option in mosquitto.conf erreicht. Obwohl dieser Leitfaden diese erweiterte Konfiguration nicht abdeckt, finden Sie weitere Informationen in der offiziellen Mosquitto-Dokumentation.

In diesem Beispiel wird sich ein entfernter Server mit einer Stackhero-Instanz verbinden, indem ein dedizierter Benutzer mit TLS-Verschlüsselung für maximale Sicherheit verwendet wird.

Erstellen Sie zuerst einen neuen Benutzer auf der Stackhero MQTT-Instanz. Nennen wir ihn bridge-1 mit dem Passwort secretPassword.

Bearbeiten Sie als Nächstes auf dem entfernten Mosquitto-Server die Konfigurationsdatei mosquitto.conf (normalerweise unter /etc/mosquitto/mosquitto.conf zu finden), indem Sie die folgenden Zeilen am Ende hinzufügen:

# TODO: Ersetzen Sie "<XXXXXX>.stackhero-network.com" und "<PORT_TLS>" durch die Informationen Ihrer Stackhero-Instanz
connection <XXXXXX>.stackhero-network.com
address <XXXXXX>.stackhero-network.com:<PORT_TLS>

# TODO: Ersetzen Sie "bridge-1" und "secretPassword" durch die Anmeldedaten des neu erstellten Benutzers
remote_clientid bridge-1
remote_username bridge-1
remote_password secretPassword

start_type automatic
try_private true

# Themen zum Teilen, Richtung und QOS.
# Beachten Sie, dass "both" aus unbekannten Gründen nicht zu funktionieren scheint.
topic # out 2
topic # in 2

# Aktivieren Sie die TLS-Verbindung, um Daten zwischen Ihrem entfernten Mosquitto-Server und Ihrer Stackhero-Instanz zu verschlüsseln.
bridge_insecure false
bridge_capath /etc/ssl/certs

Bevor Sie Mosquitto mit seiner neuen Konfiguration neu starten, stellen Sie sicher, dass TLS-Zertifikate auf Ihrem entfernten Server vorhanden sind.

Überprüfen Sie, ob das Verzeichnis /etc/ssl/certs existiert und Dateien enthält, mit dem Befehl:

ls /etc/ssl/certs

Wenn es existiert und Dateien enthält, können Sie einfach Ihren Mosquitto-Server neu starten.

Wenn es nicht existiert, sollten Sie in Betracht ziehen, einen dieser Befehle auszuführen:

  • Auf Ubuntu/Debian können Sie ausführen:

    sudo apt-get install ca-certificates
    
  • Auf Alpine Linux können Sie ausführen:

    apk add ca-certificates
    

Alternativ können Sie das Zertifikat manuell herunterladen. Laden Sie dazu das CA-Zertifikat nach /etc/mosquitto/isrgrootx1.pem mit dem folgenden Befehl herunter:

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

Bearbeiten Sie dann die mosquitto.conf-Datei, um bridge_capath /etc/ssl/certs durch bridge_cafile /etc/mosquitto/isrgrootx1.pem zu ersetzen.

Starten Sie schließlich Ihren Mosquitto-Server neu.

Für weitere Informationen zur Bridge-Konfiguration können Sie die offizielle Mosquitto-Dokumentation konsultieren.

Mosquitto bietet keine ausführlichen Protokolle, um zu überprüfen, ob Ihre Bridge funktioniert.

Der beste Weg, um ihre Funktionalität sicherzustellen, ist, sie direkt zu testen.

Sie können sich mit Ihrem entfernten Server verbinden und das Thema testBridge abonnieren, indem Sie einen vorhandenen Benutzer (und Passwort) verwenden, der auf dem entfernten Server deklariert ist:

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

In einem anderen Terminal können Sie sich mit Ihrer Stackhero Mosquitto-Instanz verbinden, indem Sie einen vorhandenen Benutzer (und Passwort) verwenden, der auf Ihrer Stackhero Mosquitto-Instanz deklariert ist:

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

Öffnen Sie ein drittes Terminal und senden Sie eine Testnachricht mit Ihrer Stackhero-Instanz (und einem entsprechenden Benutzer):

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

Sie sollten die "Message from Stackhero broker" auf Ihren ersten beiden Terminals sehen.

Senden Sie schließlich eine Testnachricht mit Ihrer entfernten Mosquitto-Instanz:

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

Herzlichen Glückwunsch! Sie haben jetzt Ihre beiden MQTT-Server sicher verbunden, mit Authentifizierung und Verschlüsselung!