Armadilloフォーラム

MQTTブローカーを介したLAN内の他のデバイスとの通信について

akinori_h

2025年6月4日 18時54分

==========
製品型番:AG6271
Debian/ABOSバージョン:3.20.3-at.6
カーネルバージョン:5.10.230-1-at
3G/LTE モジュール情報 (Debianのみ):
その他:
==========

いつもお世話になっております。
標記の件でご質問させてください。

現在、本機にてModbus TCPで取得したテレメトリをMQTTでパブリッシュ、
無線LAN内の他のデバイス(ラズパイ)でサブスクライブして利用したいと考えております。

本機にMosquittoコンテナを作成し、以下の通り.confファイルに記述後、
ラズベリーパイ側から本機のIPとポート番号:1883を指定し、ブローカーへの接続を試みているのですが接続に失敗します。

set_image docker.io/library/eclipse-mosquitto
add_ports 1883:1883
add_args --env=MQTT_USER=******
add_args --env=MQTT_PASSWORD=******
add_args --net=host

Modbus通信の処理はNode-Redで行っており、Node-Red側ではブローカーのホスト名をlocalhostに指定し接続が出来ています。

また、各デバイスは同一サブネット内に存在し、pingが通ることまでは確認できているのですが、
telnetを使用してIPアドレスとポートを指定し疎通確認をしても接続が拒否される状況です。

デバイス及びコンテナのネットワーク設定など、確認すべき点などあればご教授いただけると幸いです。

以上、何卒よろしくお願いいたします。

コメント

at_reika.yamazaki

2025年6月4日 19時56分

お世話になっております。山崎です。
すみません、状況について2点確認です。

1点目、Armadillo 内に Mosquitto(MQTT ブローカー) コンテナがあり、その中で Node-RED(Modbus TCP)を起動しているということで相違ないでしょうか?

2点目、「telnetを使用してIPアドレスとポートを指定し疎通確認をしても接続が拒否される状況です。」
とのことですが、どこからどこに向けて telnet コマンドを実行しているのでしょうか?ラズベリーパイから、Armadillo に向けて、ということでしょうか?
また、可能であればその時に実行したコマンドと、エラー内容をいただけますと何かわかるかもしれません。

以上、まずは確認になります。
どうぞよろしくお願いいたします。

返信ありがとうございます。
以下、回答となります。

> 1点目、Armadillo 内に Mosquitto(MQTT ブローカー) コンテナがあり、その中で Node-RED(Modbus TCP)を起動しているということで相違ないでしょうか?

構成についてはNode-RedとMosquittoそれぞれ別のコンテナで起動しており、
Node-Redコンテナ:パブリッシャー > Mosquittoコンテナ:ブローカー > ラズベリーパイ:サブスクライバーという構成になります。

> 2点目、「telnetを使用してIPアドレスとポートを指定し疎通確認をしても接続が拒否される状況です。」
> とのことですが、どこからどこに向けて telnet コマンドを実行しているのでしょうか?ラズベリーパイから、Armadillo に向けて、ということでしょうか?
> また、可能であればその時に実行したコマンドと、エラー内容をいただけますと何かわかるかもしれません。

ラズベリーパイからArmadillo に向けてコマンドを実行しています。

以下は実行時のコマンドと結果です。

pi@raspberrypi: ~ $ telnet 192.168.11.3 1883
Trying 192.168.11.3...
telnet: Unable to connect to remote host: 接続を拒否されました

追加でLAN内のPCから疎通確認した際のコマンドと結果になります。

PS C:\Users\ESDG> Test-NetConnection 192.168.11.3 -Port 1883
警告: TCP connect to (192.168.11.3 : 1883) failed
 
ComputerName           : 192.168.11.3
RemoteAddress          : 192.168.11.3
RemotePort             : 1883
InterfaceAlias         : Wi-Fi
SourceAddress          : 192.168.11.4
PingSucceeded          : True
PingReplyDetails (RTT) : 76 ms
TcpTestSucceeded       : False

補足でiptablesとnetstatコマンドの結果は以下の通りです。

armadillo:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
 
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
armadillo:~# netstat -antu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:1880            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:1883          0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:1883          127.0.0.1:58826         ESTABLISHED
tcp        0      0 127.0.0.1:58826         127.0.0.1:1883          ESTABLISHED
tcp        0      0 ::1:53                  :::*                    LISTEN
tcp        0      0 :::22                   :::*                    LISTEN
tcp        0      0 ::1:1883                :::*                    LISTEN
tcp        0      0 :::58080                :::*                    LISTEN
udp        0      0 0.0.0.0:33747           0.0.0.0:*
udp        0      0 0.0.0.0:5353            0.0.0.0:*
udp        0      0 127.0.0.1:53            0.0.0.0:*
udp        0      0 0.0.0.0:67              0.0.0.0:*
udp        0      0 192.168.11.3:68         192.168.11.1:67         ESTABLISHED
udp        0      0 :::58052                :::*
udp        0      0 :::5353                 :::*
udp        0      0 ::1:53                  :::*

その他、確認事項があればお教えください。

アットマークテクノの古賀(休日モード)です。

akinori_hさん:
>以下は実行時のコマンドと結果です。

netstat の実行結果を見ると、ポート 1883 に対する待ち受け(LISTEN)が、ループバックアドレス(127.0.0.1)に対してのみ行われていますね。
これが原因で、同一ホスト/マシン上のコンテナからしかポート 1883 に接続できないのだと思います。

armadillo:~# netstat -antu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:1880            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:1883          0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:1883          127.0.0.1:58826         ESTABLISHED
tcp        0      0 127.0.0.1:58826         127.0.0.1:1883          ESTABLISHED
...

>その他、確認事項があればお教えください。

Mosquitto コンテナ内に /mosquitto/config/mosquitto.conf があるか確認し、なければ作ったうえで、以下の行を追加してみると、どうなるでしょうか?

listener 1883 0.0.0.0

以下、参考ページです:

・How to Configure Mosquitto MQTT Broker in Docker
 https://cedalo.com/blog/mosquitto-docker-configuration-ultimate-guide/
 :Mosquitto の Pro エディションやサポートサービスを提供している Cedalo 社の Blog。

・mosquitto.conf man page
 https://mosquitto.org/man/mosquitto-conf-5.html

・Mosquitto man page
 https://mosquitto.org/man/mosquitto-8.html

・eclipse-mosquitto
 https://hub.docker.com/_/eclipse-mosquitto
 :お使いのコンテナイメージの DockerHub ページ。