【Linux,RasberryPi】mosquitto 別PCから接続できない時の対応

PC設定・管理

今回の記事はローカルネットワーク内でMosquittoを使用しようとしたときのメモ書きです。

もう少し具体的内容はロールネットワーク内で複数のPCを接続しようとした時に接続できなかったので、それの原因と解決する方法についてです。

mosquittoとは?

mosquittoはMqttプロトコルを実装するオープンソースのメッセージブローカーのことです。
MqttプロトコルはIotデバイスなどで軽量で効率良く通信できるように利用されています。

以下からMosquittoをダウンロード出来ます。

Eclipse Mosquitto
Eclipse Mosquitto is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto is lightweigh...

前提条件

以下のような状況でのお話です。

Windows系PCがクライアント側、ラズベリーパイがブローカー(サーバー側)です。
例えば、ブローカーの起動、パブリック、サブスクライブすべてを1つのデバイス(ラズベリーパイやWindows)で複数のプロセスを立ち上げて動作させる場合には問題なく動作します。
しかし上記のようにWindows系PCからラズベリーパイへパブリックしたりパッシブしたりする場合にはうまく動作しませんでした。
その時の解決方法について今回はまとめます。

mosquittoブローカーがローカルオンリーモードで起動

まずは別PCから接続できなかった原因からです。
見出しにも上げていますが、Mosquittoブローカーを起動する時にローカルオンリーモードで起動していただのが原因です。

以下、mosquitto起動時のログから確認できます。
3行目に書いてますね、、、

1629960276: mosquitto version 2.0.11 starting
1629960276: Config loaded from /etc/mosquitto/mosquitto.conf.
1629960276: Starting in local only mode. Connections will only be possible from clients running on this machine.
1629960276: Create a configuration file which defines a listener to allow remote access.
1629960276: For more details see https://mosquitto.org/documentation/authentication-methods/
1629960276: Opening ipv4 listen socket on port 1883.
1629960276: Opening ipv6 listen socket on port 1883.
1629960276: mosquitto version 2.0.11 running
Check

ローカルオンリーモードとは?
ブローカーを起動しているPCからのデータしか処理出来ないモードのことです。

ローカルオンリーモードを変更のするために設定ファイルを書き換える

原因はローカルオンリーモードで起動していることだと判明したので、
次に設定ファイルを書き換えてローカルオンリーモードで起動しないようにしていきます。

設定ファイルは下記にあります。

$sudo nano /etc/mosquitto/mosquitto.conf

設定ファイルの一番下に以下の内容を追記

listener 1883
allow_anonymous true

1行目ではクライアント側が接続する(外部からアクセスするため)ポート番号を追加しています。
上記ではとりあえずデフォルトと同様の1883とします。
2行目の「allow_anonymous true」はmosquittoに接続する場合の認証方法に関する設定です。

mosquitto認証方法について

以前のバージョンでは認証なしの接続がデフォルトで可能でしたが、
mosquitto2.0以降では、クライアントが接続する前に明示的に認証オプションを選択する必要があります。

mosquitto認証方法

認証方法は現在3種類あります。
パスワードファイルによる認証
 ユーザー名とパスワードを管理するのは煩雑なので、これは接続するクライアントが少数の場合に適しています
プラグイン認証
 ユーザー名とパスワードよりも認証を詳細に制御したい場合に利用されたりする。(使ったことないのであまりわかっていません…
認証されていないアクセス(上記で利用)
 非認証でアクセスすることができます。

設定ファイルを変更後にMosquittoブローカーを起動することでモードを変更して起動することができます。

起動する時のコマンドに注意して!!(ここでハマりました)

先ほど、mosquitto設定ファイルに追記するところまで完了しました。
次にmosquittoを起動する方法についてです。
起動する時のコマンドに注意してください。
誤った起動コマンドで起動すると先ほど用意した設定ファイルが参照されずに起動されます。

方法1:systemctlコマンドを利用

$sudo systemctl start mosquitto

これを使った場合、起動はしますが先ほど用意した設定ファイルが参照されません。

方法2:serviceコマンドを使用

$sudo service mosquitto start

こっちを使ってください。こちらで起動すると設定ファイルが参照されます。

重要

起動するときはserviceコマンドを使ってください!!!
serviceコマンドを使うことで追記したmosquitto.confファイルが参照されます。
※systemctlコマンドを使用した場合は参照されませんのでご注意ください。

参考

Mosquitto broker "starting in local only mode"
Hey, I am currently trying to configure my Mosquitto broker running headless on a raspberry pi 4... When running mosquitto -v I always get as response, that it...

コメント

タイトルとURLをコピーしました