什么可以阻止网络连接

什么可以阻止网络连接

我正在尝试使用 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 范围内:

通常只有 root 可以使用编号为 1023 或更少的端口,但由于 MQTT 默认端口号是 1883,所以这应该不是问题。

Fedora 特定:

Fedora 默认使用 SELinux,但这不应以此处适用的方式限制普通用户的交互会话。但是,如果您通过某些服务运行脚本(例如作为网络服务器 CGI 脚本或其他脚本),则可能会阻止您的脚本打开传出网络连接,除非将 SELinux 配置为允许这样做。

基本连接测试:

如果您安装了telnetnetcat ( nc),请使用以下命令测试连接:

telnet my.broker.com 1883

或者

nc -v my.broker.com 1883

分别。

如果您已经traceroute安装,请运行传输控制协议跟踪路由在您的应用程序需要的特定端口上(1883 是没有 SSL/TLS 的 MQTT 的默认值):

sudo traceroute -T -p 1883 my.broker.com

如果可以成功建立与代理的基本 TCP 连接,telnetnc都会明确告诉您这一点。

如果网络上的某些东西正在丢弃连接尝试,traceroute -T应该可以帮助您识别该东西。

相关内容