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アドレスとポートを指定し疎通確認をしても接続が拒否される状況です。
デバイス及びコンテナのネットワーク設定など、確認すべき点などあればご教授いただけると幸いです。
以上、何卒よろしくお願いいたします。
コメント
akinori_h
返信ありがとうございます。
以下、回答となります。
> 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 :::*
その他、確認事項があればお教えください。
koga
アットマークテクノの古賀(休日モード)です。
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 ページ。
at_reika.yamazaki
2025年6月4日 19時56分
お世話になっております。山崎です。
すみません、状況について2点確認です。
1点目、Armadillo 内に Mosquitto(MQTT ブローカー) コンテナがあり、その中で Node-RED(Modbus TCP)を起動しているということで相違ないでしょうか?
2点目、「telnetを使用してIPアドレスとポートを指定し疎通確認をしても接続が拒否される状況です。」
とのことですが、どこからどこに向けて telnet コマンドを実行しているのでしょうか?ラズベリーパイから、Armadillo に向けて、ということでしょうか?
また、可能であればその時に実行したコマンドと、エラー内容をいただけますと何かわかるかもしれません。
以上、まずは確認になります。
どうぞよろしくお願いいたします。