Mosquitto: ブリッジ

Mosquittoサーバーを接続する方法(ブリッジ)

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供する、すぐに使えるMosquitto MQTTクラウドソリューションを提供しています。

  • 無制限のメッセージ交換と転送。
  • 外部APIを介したデバイスの無制限認証。
  • トピック、ユーザー、アクションに対する高度なACL
  • HTTPSで保護されたカスタマイズ可能なドメイン名(例:https://mqtt.your-company.com)。
  • ワンクリックで簡単に更新
  • プライベートで専用のVMによる最適なパフォーマンスと強力なセキュリティ

時間を節約し、生活を簡素化:StackheroのMosquitto MQTTクラウドホスティングソリューションを試すのに5分しかかかりません!

複数のMQTTブローカーを接続することで、異なる場所間でのデータ交換がシームレスに行えます。

倉庫に複数のデバイスが接続されたMosquittoサーバーがあると想像してください。このリモートブローカーをStackheroインスタンス(Mosquitto MQTT)に「ブリッジ」機能を使って接続できます。この設定により、Stackheroインスタンスに接続されたデバイスと倉庫のデバイスが、同じブローカーに接続されているかのように通信できます。

高度な使用法として、共有するトピックをカスタマイズできます。また、「warehouse」などのサブトピックにリモートトピックを追加することも可能です。「warehouse/#」はすべてのリモートデバイスをキャッチします。これはmosquitto.conftopicオプションを使用して実現されます。このガイドではこの高度な設定をカバーしませんが、詳細は公式Mosquittoドキュメントで確認できます。

この例では、リモートサーバーが専用ユーザーとTLS暗号化を使用してStackheroインスタンスに接続します。

まず、Stackhero MQTTインスタンスに新しいユーザーを作成します。これをbridge-1と呼び、パスワードをsecretPasswordとします。

次に、リモートMosquittoサーバーで、mosquitto.conf設定ファイル(通常は/etc/mosquitto/mosquitto.confにあります)を編集し、次の行を末尾に追加します。

# TODO: "<XXXXXX>.stackhero-network.com"と"<PORT_TLS>"をStackheroインスタンス情報に置き換えてください
connection <XXXXXX>.stackhero-network.com
address <XXXXXX>.stackhero-network.com:<PORT_TLS>

# TODO: "bridge-1"と"secretPassword"を新しく作成したユーザーの資格情報に置き換えてください
remote_clientid bridge-1
remote_username bridge-1
remote_password secretPassword

start_type automatic
try_private true

# 共有するトピック、方向、QOS。
"both"は不明な理由で機能しないようです。
topic # out 2
topic # in 2

# リモートMosquittoサーバーとStackheroインスタンス間のデータを暗号化するためにTLS接続を有効にします。
bridge_insecure false
bridge_capath /etc/ssl/certs

新しい設定でMosquittoを再起動する前に、リモートサーバーにTLS証明書が存在することを確認してください。

/etc/ssl/certsディレクトリが存在し、ファイルが含まれているかを次のコマンドで確認します。

ls /etc/ssl/certs

存在し、ファイルが含まれている場合は、Mosquittoサーバーを再起動するだけです。

存在しない場合は、次のコマンドのいずれかを実行することを検討してください。

  • Ubuntu/Debianでは、次を実行できます。

    sudo apt-get install ca-certificates
    
  • Alpine Linuxでは、次を実行できます。

    apk add ca-certificates
    

または、手動で証明書をダウンロードすることもできます。これを行うには、次のコマンドを使用してCA証明書を/etc/mosquitto/isrgrootx1.pemにダウンロードします。

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

次に、mosquitto.confファイルを編集してbridge_capath /etc/ssl/certsbridge_cafile /etc/mosquitto/isrgrootx1.pemに置き換えます。

最後に、Mosquittoサーバーを再起動します。

ブリッジ設定の詳細については、公式Mosquittoドキュメントを参照してください。

Mosquittoはブリッジが機能していることを確認するための詳細なログを提供しません。

その機能を確認する最良の方法は、直接テストすることです。

リモートサーバーに接続し、リモートサーバーに宣言された既存のユーザー(およびパスワード)を使用してtestBridgeトピックにサブスクライブできます。

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

別のターミナルで、Stackhero Mosquittoインスタンスに接続し、Stackhero Mosquittoインスタンスに宣言された既存のユーザー(およびパスワード)を使用します。

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

3つ目のターミナルを開き、Stackheroインスタンス(および対応するユーザー)を使用してテストメッセージを送信します。

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

最初の2つのターミナルに「Message from Stackhero broker」が表示されるはずです。

最後に、リモートMosquittoインスタンスを使用してテストメッセージを送信します。

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

おめでとうございます!これで、2つのMQTTサーバーが認証と暗号化を伴って安全に接続されました!