Mosquitto: Bruggen

Hoe Mosquitto-servers met elkaar te verbinden (brug)

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare Mosquitto MQTT cloud oplossing die tal van voordelen biedt, waaronder:

  • Onbeperkte uitwisseling en overdracht van berichten.
  • Onbeperkte apparaatverificatie via een externe API.
  • Geavanceerde ACL's op onderwerpen, gebruikers en acties.
  • Aanpasbare domeinnaam beveiligd met HTTPS (bijvoorbeeld, https://mqtt.uw-bedrijf.com).
  • Moeiteloze updates met slechts één klik.
  • Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Mosquitto MQTT cloud hosting oplossing van Stackhero te proberen!

Het verbinden van meerdere MQTT-brokers maakt naadloze gegevensuitwisseling tussen verschillende locaties mogelijk.

Stel je een Mosquitto-server voor in een magazijn met verschillende aangesloten apparaten. U kunt deze externe broker verbinden met een Stackhero-instantie (Mosquitto MQTT) met behulp van de "bridge"-functie. Deze configuratie stelt apparaten die zijn verbonden met de Stackhero-instantie en die in het magazijn in staat om te communiceren alsof ze met dezelfde broker zijn verbonden.

Voor geavanceerd gebruik kunt u aanpassen welke topics moeten worden gedeeld. U kunt ook externe topics toevoegen aan een subtopic zoals "warehouse", waar "warehouse/#" al uw externe apparaten opvangt. Dit wordt bereikt met behulp van de topic-optie in mosquitto.conf. Hoewel deze handleiding deze geavanceerde configuratie niet behandelt, kunt u meer informatie vinden in de officiële Mosquitto-documentatie.

In dit voorbeeld zal een externe server verbinding maken met een Stackhero-instantie met behulp van een speciale gebruiker met TLS-versleuteling voor maximale beveiliging.

Maak eerst een nieuwe gebruiker aan op de Stackhero MQTT-instantie. Laten we deze bridge-1 noemen, met het wachtwoord secretPassword.

Vervolgens kunt u op de externe Mosquitto-server het configuratiebestand mosquitto.conf bewerken (meestal te vinden op /etc/mosquitto/mosquitto.conf) door de volgende regels aan het einde toe te voegen:

# TODO: vervang "<XXXXXX>.stackhero-network.com" en "<PORT_TLS>" door uw Stackhero-instantiegegevens
connection <XXXXXX>.stackhero-network.com
address <XXXXXX>.stackhero-network.com:<PORT_TLS>

# TODO: vervang "bridge-1" en "secretPassword" door de inloggegevens van de nieuw aangemaakte gebruiker
remote_clientid bridge-1
remote_username bridge-1
remote_password secretPassword

start_type automatic
try_private true

# Topics om te delen, richting en QOS.
# Merk op dat "both" om een onbekende reden niet lijkt te werken.
topic # out 2
topic # in 2

# Schakel TLS-verbinding in om gegevens tussen uw externe Mosquitto-server en uw Stackhero-instantie te versleutelen.
bridge_insecure false
bridge_capath /etc/ssl/certs

Voordat u Mosquitto opnieuw start met de nieuwe configuratie, moet u ervoor zorgen dat TLS-certificaten op uw externe server aanwezig zijn.

Controleer of de directory /etc/ssl/certs bestaat en bestanden bevat met het commando:

ls /etc/ssl/certs

Als het bestaat en bestanden bevat, kunt u eenvoudig uw Mosquitto-server opnieuw starten.

Als het niet bestaat, kunt u overwegen een van deze commando's uit te voeren:

  • Op Ubuntu/Debian kunt u uitvoeren:

    sudo apt-get install ca-certificates
    
  • Op Alpine Linux kunt u uitvoeren:

    apk add ca-certificates
    

Als alternatief kunt u het certificaat handmatig downloaden. Download hiervoor het CA-certificaat naar /etc/mosquitto/isrgrootx1.pem met het volgende commando:

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

Bewerk vervolgens het mosquitto.conf-bestand om bridge_capath /etc/ssl/certs te vervangen door bridge_cafile /etc/mosquitto/isrgrootx1.pem.

Start ten slotte uw Mosquitto-server opnieuw.

Voor meer informatie over bridge-configuratie kunt u de officiële Mosquitto-documentatie raadplegen.

Mosquitto biedt geen uitgebreide logs om te verifiëren dat uw bridge werkt.

De beste manier om de functionaliteit te garanderen, is door deze direct te testen.

U kunt verbinding maken met uw externe server en zich abonneren op het testBridge-topic met een bestaande gebruiker (en wachtwoord) die op de externe server is gedeclareerd:

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

In een andere terminal kunt u verbinding maken met uw Stackhero Mosquitto-instantie met een bestaande gebruiker (en wachtwoord) die op uw Stackhero Mosquitto-instantie is gedeclareerd:

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

Open een derde terminal en stuur een testbericht met uw Stackhero-instantie (en een overeenkomstige gebruiker):

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

U zou het "Message from Stackhero broker" op uw eerste twee terminals moeten zien.

Stuur ten slotte een testbericht met uw externe Mosquitto-instantie:

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

Gefeliciteerd! U heeft nu uw twee MQTT-servers veilig verbonden, met authenticatie en versleuteling!