Mosquitto: Bridges
Comment connecter des serveurs Mosquitto ensemble (bridge)
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution Mosquitto MQTT cloud prête à l'emploi offrant de nombreux avantages, notamment :
- Échanges et transferts illimités de messages.
- Authentification illimitée des appareils via une API externe.
- ACLs avancées sur les topics, utilisateurs et actions.
- Nom de domaine personnalisable sécurisé avec HTTPS (par exemple, https://mqtt.votre-entreprise.com).
- Mises à jour simplifiées en un clic.
- Performance optimale et sécurité robuste grâce à une VM privée et dédiée.
Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Mosquitto MQTT cloud hosting de Stackhero !
Connecter plusieurs brokers MQTT permet un échange de données fluide entre différents emplacements.
Imaginez un serveur Mosquitto dans un entrepôt avec plusieurs appareils connectés. Vous pouvez connecter ce broker distant à une instance Stackhero (Mosquitto MQTT) en utilisant la fonctionnalité "bridge". Cette configuration permet aux appareils connectés à l'instance Stackhero et à ceux de l'entrepôt de communiquer comme s'ils étaient connectés au même broker.
Pour des usages avancés, vous pouvez personnaliser les topics à partager. Vous pouvez également ajouter des topics distants à un sous-topic comme "warehouse", où "warehouse/#" capturera tous vos appareils distants. Cela se fait en utilisant l'option
topicdansmosquitto.conf. Bien que ce guide ne couvre pas cette configuration avancée, vous pouvez trouver plus d'informations dans la documentation officielle de Mosquitto.
Configurer Mosquitto pour se connecter à un autre serveur (bridge)
Dans cet exemple, un serveur distant se connectera à une instance Stackhero en utilisant un utilisateur dédié avec un chiffrement TLS pour une sécurité maximale.
Tout d'abord, créez un nouvel utilisateur sur l'instance MQTT Stackhero. Appelons-le bridge-1, avec le mot de passe secretPassword.
Ensuite, sur le serveur Mosquitto distant, vous pouvez éditer le fichier de configuration mosquitto.conf (généralement situé dans /etc/mosquitto/mosquitto.conf) en ajoutant les lignes suivantes à la fin :
# TODO: remplacez "<XXXXXX>.stackhero-network.com" et "<PORT_TLS>" par les informations de votre instance Stackhero
connection <XXXXXX>.stackhero-network.com
address <XXXXXX>.stackhero-network.com:<PORT_TLS>
# TODO: remplacez "bridge-1" et "secretPassword" par les identifiants de l'utilisateur nouvellement créé
remote_clientid bridge-1
remote_username bridge-1
remote_password secretPassword
start_type automatic
try_private true
# Topics à partager, direction et QOS.
# Notez que "both" semble ne pas fonctionner pour une raison inconnue.
topic # out 2
topic # in 2
# Activer la connexion TLS pour chiffrer les données entre votre serveur Mosquitto distant et votre instance Stackhero.
bridge_insecure false
bridge_capath /etc/ssl/certs
Avant de redémarrer Mosquitto avec sa nouvelle configuration, assurez-vous que les certificats TLS existent sur votre serveur distant.
Vérifiez que le répertoire /etc/ssl/certs existe et contient des fichiers avec la commande :
ls /etc/ssl/certs
S'il existe et contient des fichiers, vous pouvez simplement redémarrer votre serveur Mosquitto.
S'il n'existe pas, vous pouvez envisager d'exécuter l'une de ces commandes :
-
Sur Ubuntu/Debian, vous pouvez exécuter :
sudo apt-get install ca-certificates -
Sur Alpine Linux, vous pouvez exécuter :
apk add ca-certificates
Alternativement, vous pouvez télécharger manuellement le certificat. Pour ce faire, téléchargez le certificat CA dans /etc/mosquitto/isrgrootx1.pem en utilisant la commande suivante :
wget https://letsencrypt.org/certs/isrgrootx1.pem -O /etc/mosquitto/isrgrootx1.pem
Ensuite, éditez le fichier mosquitto.conf pour remplacer bridge_capath /etc/ssl/certs par bridge_cafile /etc/mosquitto/isrgrootx1.pem.
Enfin, redémarrez votre serveur Mosquitto.
Pour plus d'informations sur la configuration des bridges, vous pouvez consulter la documentation officielle de Mosquitto.
Tester la configuration du bridge Mosquitto
Mosquitto ne fournit pas de journaux détaillés pour vérifier que votre bridge fonctionne.
La meilleure façon de s'assurer de son bon fonctionnement est de le tester directement.
Vous pouvez vous connecter à votre serveur distant et vous abonner au topic testBridge en utilisant un utilisateur existant (et son mot de passe) déclaré sur le serveur distant :
mosquitto_sub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -v
Dans un autre terminal, vous pouvez vous connecter à votre instance Mosquitto Stackhero en utilisant un utilisateur existant (et son mot de passe) déclaré sur votre instance Mosquitto Stackhero :
mosquitto_sub -h <XXXXXX>.stackhero-network.com -p <PORT_TLS> -u <user> -P <password> -t "testBridge" -v
Ouvrez un troisième terminal et envoyez un message de test en utilisant votre instance Stackhero (et un utilisateur correspondant) :
mosquitto_pub -h <XXXXXX>.stackhero-network.com -p <PORT_TLS> -u <user> -P <password> -t "testBridge" -m "Message from Stackhero broker"
Vous devriez voir le "Message from Stackhero broker" sur vos deux premiers terminaux.
Enfin, envoyez un message de test en utilisant votre instance Mosquitto distante :
mosquitto_pub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -m "Message from remote broker"
Félicitations ! Vous avez maintenant vos deux serveurs MQTT connectés de manière sécurisée, avec authentification et chiffrement !