Pythonを使用してmqtt接続を作成しようとしています。問題を再現する最も短いコードは次のとおりです。
import paho.mqtt.client as paho
client = paho.Client('myClient')
client.username_pw_set('user', 'password')
client.connect('my.broker.com')
最後の行で私は得る。
ConnectionRefusedError: [Errno 111] Connection refused
興味深いことに、サーバーは接続を拒否しませんでした。connect()
ロギングがあり、実際の要求前に接続が拒否されたようです。
Windowsコンピュータでスクリプトを試しましたが、Ubuntuでは正しく実行されていますが、Fedora 37(接続が拒否されました)があるコンピュータで実行する必要があります。いくつかの設定が間違っていると思いますが、基本的なLinuxの知識がありますが、どこで見つけることができるのかわかりません。私は両方のLinuxの現在の状態を知りません。どのような方法でも設定できますが、Windowsシステムのデフォルト設定は良好です。グーグルをしてみると次のような提案がありました。
- ローカルmqttブローカーの実行(リモートブローカーに接続する必要があるため不適切)
- ファイアウォールのルールを確認してください(他のコンピュータがプロキシに接続できるため、ネットワークにファイアウォールがないようです)。
- iptablesの確認(フィルタリングルールは表示されません)
私が確認できる他の提案はありますか?ソケットの作成にFedoraまたはLinux全体に制限はありますか?
答え1
Unix全体:
通常、ルートのみ1023以下のポート番号を使用できますが、MQTTデフォルトのポート番号は1883であるため問題はありません。
Fedora固有:
FedoraはデフォルトでSELinuxを使用しますが、ここに適用される方法で一般ユーザーの対話型セッションを制限しないでください。ただし、特定のサービス(たとえば、ネットワークサーバーのCGIスクリプトや他のスクリプト)を介してスクリプトを実行すると、SELinuxがそれを許可するように構成されていない限り、スクリプトが発信ネットワーク接続を開くことができない可能性があります。
基本的な接続テスト:
telnet
netcat( ) がインストールされている場合は、nc
次のコマンドを使用して接続をテストします。
telnet my.broker.com 1883
または
nc -v my.broker.com 1883
それぞれ。
traceroute
すでにインストールされている場合は、以下を実行してください。伝送制御プロトコル追跡パスアプリケーションに必要な特定のポートで(SSL / TLSなしのMQTTのデフォルト値は1883です):
sudo traceroute -T -p 1883 my.broker.com
プロキシへのデフォルトのTCP接続が正常に確立されたら、これを明示的にtelnet
通知nc
します。
ネットワークで接続試行が中断された場合は、traceroute -T
それを識別するのに役立ちます。