Mosquitto: Bridges
Comment connecter des serveurs Mosquitto entre eux (bridge)
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution Mosquitto MQTT cloud prête à l'emploi qui offre de nombreux avantages, notamment :
- Echanges et transferts de messages illimités.
- Authentification de périphériques illimités via une API externe.
- ACLs avancées sur les topics, les utilisateurs et les actions.
- Nom de domaine personnalisable sécurisé en HTTPS (par exemple, https://mqtt.votre-entreprise.com).
- Mises à jour simplifiées en un clic.
- Performance optimale et sécurité renforcée 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 sites.
Imaginez un serveur Mosquitto dans un entrepôt avec plusieurs appareils connectés. Vous pouvez relier ce broker distant à une instance Stackhero (Mosquitto MQTT) grâce à 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 reliés au même broker.
Pour des usages avancés, vous pouvez personnaliser les topics à partager. Il est aussi possible d'ajouter les topics distants sous un sous-topic comme "warehouse", où "warehouse/#" regroupera tous vos appareils distants. Cela se configure avec l'option
topicdansmosquitto.conf. Ce guide ne couvre pas cette configuration avancée, mais vous trouverez plus d'informations dans la documentation officielle de Mosquitto.
Configurer Mosquitto pour se connecter à un autre serveur (bridge)
Dans cet exemple, un serveur distant va se connecter à une instance Stackhero en utilisant un utilisateur dédié avec chiffrement TLS pour une sécurité maximale.
Commencez par créer un nouvel utilisateur sur l'instance MQTT Stackhero. Appelons-le bridge-1, avec le mot de passe secretPassword.
Ensuite, sur le serveur Mosquitto distant, éditez 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 du nouvel utilisateur
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
# Activez la connexion TLS pour chiffrer les échanges entre votre serveur Mosquitto distant et votre instance Stackhero.
bridge_insecure false
bridge_capath /etc/ssl/certs
Avant de redémarrer Mosquitto avec cette nouvelle configuration, vérifiez que les certificats TLS existent sur votre serveur distant.
Assurez-vous que le dossier /etc/ssl/certs existe et contient des fichiers avec la commande :
ls /etc/ssl/certs
Si le dossier existe et contient des fichiers, vous pouvez simplement redémarrer votre serveur Mosquitto.
Si ce n'est pas le cas, vous pouvez envisager d'exécuter l'une de ces commandes :
-
Sur Ubuntu/Debian, exécutez :
sudo apt-get install ca-certificates -
Sur Alpine Linux, exécutez :
apk add ca-certificates
Vous pouvez aussi télécharger le certificat manuellement. Pour cela, téléchargez le certificat CA dans /etc/mosquitto/isrgrootx1.pem avec la commande suivante :
wget https://letsencrypt.org/certs/isrgrootx1.pem -O /etc/mosquitto/isrgrootx1.pem
Ensuite, modifiez 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, consultez la documentation officielle de Mosquitto.
Tester la configuration du bridge Mosquitto
Mosquitto ne fournit pas de logs détaillés pour vérifier le fonctionnement du bridge.
La meilleure façon de s'assurer que tout fonctionne est de tester directement.
Connectez-vous à votre serveur distant et abonnez-vous au topic testBridge avec un utilisateur (et mot de passe) déjà déclaré sur le serveur distant :
mosquitto_sub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -v
Dans un autre terminal, connectez-vous à votre instance Mosquitto Stackhero avec un utilisateur (et mot de passe) déclaré sur votre instance 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 via 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" apparaître dans vos deux premiers terminaux.
Enfin, envoyez un message de test depuis votre instance Mosquitto distante :
mosquitto_pub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -m "Message from remote broker"
Félicitations ! Vos deux serveurs MQTT sont maintenant connectés de façon sécurisée, avec authentification et chiffrement !