MQTT不适用于全局IP

时间:2018-04-17 10:41:34

标签: linux debian port mqtt

一般信息:

  • IP:1.2.3.4
  • 服务器:Raspian Stretch(Debian 9)
  • 在服务器上运行带有2个网站的apache2。
  • mosquitto用户:user
  • moquittto密码:psw

我在我的服务器上安装了mosquitto并设置了用户和密码。 当我在localhost中使用它时,我没有问题:

mosquitto_pub -h localhost -p 1883 -t topic -u "user" -P "psw" -m "new message"
mosquitto_sub -h localhost -p 1883 -t topic -u "user" -P "psw"

我毫无问题地收到new message

不幸的是,如果我使用我的公共IP,它就不再有用了:

mosquitto_pub -h 1.2.3.4 -p 1883 -t topic -u "user" -P "psw" -m "new message"
mosquitto_sub -h 1.2.3.4 -p 1883 -t topic -u "user" -P "psw"

几秒钟后,订阅者和发布者都会打印此错误:Error: Connection timed out

我可以想象就像一个封闭的端口,但我不知道如何解锁它。

我尝试了这个,但没有改变任何事情:sudo iptables -A INPUT -p tcp -m tcp --dport 1883 -j ACCEPT

这些是我的配置文件:

/etc/mosquitto/conf.d/default.conf

allow_anonymous false
password_file /etc/mosquitto/passwd
listener 1883

/etc/mosquitto/mosquitto.conf

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

1 个答案:

答案 0 :(得分:1)

我认为您使用的IP实际上并不是1.2.3.4 - 如果您不拥有它并且未将其列为private / internal IP,请不要在内部使用它。

同样,如果您不拥有它,请不要尝试在外部/在互联网上使用它。

如果你是消费者NAT路由器的后面,并使用路由器的外部IP地址,那么有几个潜在的问题:

  1. 大多数消费者路由器不支持hairpin NAT - 即:您无法通过路由器后面的外部IP访问服务(即使您已正确设置端口转发)。
    • 要测试一下,请尝试从朋友家或通过其他互联网连接(例如:您的手机)进行连接。
    • 解决方案是直接连接到内部服务器。如果您很幸运,您的路由器可以配置为处理发夹,或者您可以升级您的路由器。
  2. 您可能需要在路由器上设置port forwarding,以便端口1883上的传入连接在内部转发到您的服务器。