今回の記事は、ローカルネットワーク内でMosquittoを使用しようとした時のメモです。
ローカルネットワーク内で複数のPCで接続しようとした時に接続できなかったので、それの原因と解決する方法についてです。
mosquittoとは?
mosquittoはMqttプロトコルを実装するオープンソースのメッセージブローカーのことです。
MqttプロトコルはIotデバイスなどで軽量で効率良く通信できるように利用されています。
以下からMosquittoをダウンロード出来ます。
前提条件
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
ローカルオンリーモードを変更するための設定ファイルを書き換える
原因はローカルオンリーモードで起動していることだと判明したので、
次に設定ファイルを書き換えてローカルオンリーモードで起動しないようにしていきます。
設定ファイルは下記にあります。
$sudo nano /etc/mosquitto/mosquitto.conf
1行目ではクライアント側が接続する(外部からアクセスするため)ポート番号を追加しています。
上記ではとりあえずデフォルトと同様の1883とします。
2行目の「allow_anonymous true」はmosquittoに接続する場合の認証方法に関する設定です。
mosquitto認証方法について
以前のバージョンでは認証なしの接続がデフォルトで可能でしたが、
mosquitto2.0以降では、クライアントが接続する前に明示的に認証オプションを選択する必要があります。
設定ファイルを変更後にMosquittoブローカーを起動することでモードを変更して起動することができます。
起動する時のコマンドに注意して!!(ここでハマりました)
先ほど、mosquitto設定ファイルに追記するところまで完了しました。
次にmosquittoを起動する方法についてです。
起動する時のコマンドに注意してください。
誤った起動コマンドで起動すると先ほど用意した設定ファイルが参照されずに起動されます。
方法1:systemctlコマンドを利用
$sudo systemctl start mosquitto
※これを使った場合、起動はしますが先ほど用意した設定ファイルが参照されません。
方法2:serviceコマンドを使用
$sudo service mosquitto start
こっちを使ってください。こちらで起動すると設定ファイルが参照されます。