Mosquitto: Bridges

Comment connecter des serveurs Mosquitto entre eux (bridge)

👋 Bienvenue sur la documentation de Stackhero !

Stackhero vous propose un environnement Mosquitto MQTT cloud entièrement managé, pensé pour la fiabilité et la flexibilité :

  • Débit illimité pour les messages et transferts de données, afin que vos workflows ne rencontrent jamais de limites artificielles.
  • Authentification illimitée de vos appareils via votre propre API externe, pour un onboarding et une gestion des accès simplifiés.
  • ACLs avancées pour un contrôle précis des topics, des utilisateurs et des actions.
  • Un nom de domaine personnalisé avec HTTPS intégré pour des endpoints sécurisés et à votre image (par exemple : https://mqtt.votre-entreprise.com).
  • Mises à jour sans effort : appliquez les améliorations ou correctifs de sécurité en un clic.
  • Performance constante et sécurité renforcée, chaque instance fonctionnant sur une infrastructure privée et dédiée.

Accélérez vos projets IoT et réduisez la charge opérationnelle. Vous pouvez disposer d'une instance Mosquitto MQTT cloud hosting sécurisée et prête pour la production en seulement quelques minutes.

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 topic dans mosquitto.conf. Ce guide ne couvre pas cette configuration avancée, mais vous trouverez plus d'informations dans la documentation officielle de Mosquitto.

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.

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 !