在Linux中搭建Mosquitto MQTT协议消息服务端并结合内网穿透工具实现公网访问

文章目录

    • 前言
    • [1. Linux 搭建 Mosquitto](#1. Linux 搭建 Mosquitto)
    • [2. Linux 安装Cpolar](#2. Linux 安装Cpolar)
    • [3. 创建MQTT服务公网连接地址](#3. 创建MQTT服务公网连接地址)
    • [4. 客户端远程连接MQTT服务](#4. 客户端远程连接MQTT服务)
    • [5. 代码调用MQTT服务](#5. 代码调用MQTT服务)
    • [6. 固定连接TCP公网地址](#6. 固定连接TCP公网地址)
    • [7. 固定地址连接测试](#7. 固定地址连接测试)

前言

Mosquitto是一个开源的消息代理,它实现了MQTT协议版本3.1和3.1.1。它可以在不同的平台上运行,包括Windows、Linux、macOS等。mosquitto可以用于物联网、传感器、移动应用程序等场景,提供了一种轻量级的、可靠的、基于发布/订阅模式的消息传递机制。

MQTT协议远程访问的好处在于它可以实现跨网络的远程通信,使得设备可以在不同的地方进行控制和监控。同时,MQTT协议具有轻量级、高效、可靠等特点,可以在低带宽、不稳定网络环境下稳定运行。此外,MQTT协议还支持多种编程语言和平台,方便开发者进行二次开发和集成

下面介绍在Linux 中搭建Mosquitto MQTT协议消息服务端,并结合Cpolar 内网穿透工具实现远程连接!

1. Linux 搭建 Mosquitto

本例在centos 7系统,使用yum 一键安装:

shell 复制代码
yum install mosquitto -y

安装完成后,下面是一些操作Mosquitto服务命令

shell 复制代码
sudo systemctl start mosquitto     # 启动 Mosquitto 服务
sudo systemctl stop mosquitto      # 停止 Mosquitto 服务
sudo systemctl restart mosquitto   # 重新启动 Mosquitto 服务
sudo systemctl status mosquitto    #检查服务器状态

执行启动命令后,输入查看状态,我们可以看到服务已经运行成功了,本地安装成功了,下面安装cpolar工具,穿透Mosquitto 服务的本地1883端口,实现远程访问连接.

2. Linux 安装Cpolar

上面我们安装成功了Mosquitto MQTT服务器,下面我们在Linux安装cpolar内网穿透工具,通过cpolar 转发本地端口映射的公网地址,我们可以很容易实现远程访问,而无需自己注册域名购买云服务器.下面是安装cpolar步骤

cpolar官网地址: https://www.cpolar.com

  • 使用一键脚本安装命令
shell 复制代码
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 向系统添加服务
shell 复制代码
sudo systemctl enable cpolar
  • 启动cpolar服务
shell 复制代码
sudo systemctl start cpolar

cpolar安装成功后,在外部浏览器上访问Linux 的9200端口即:【http://局域网ip:9200】,使用cpolar账号登录,登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可

3. 创建MQTT服务公网连接地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理------创建隧道:

  • 隧道名称:可自定义,注意不要与已有的隧道名称重复
  • 协议:tcp
  • 本地地址:1883 (本地默认端口)
  • 域名类型:临时随机TCP端口
  • 地区:选择China VIP

点击创建

然后打开左侧在线隧道列表,查看刚刚创建隧道后生成的tcp地址,这个地址就是公网连接地址,我们可以在任意设备上使用该地址进行连接

4. 客户端远程连接MQTT服务

上面在cpolar中创建了 公网地址,下面我们使用MQTT客户端工具mqttfx进行远程连接测试,如果没有该客户端,可以进入官方下载:https://softblade.de/en/download-2/,下载后安装打开,点击设置图标

通过cpolar公网地址进行连接,Address值为公网地址,Port 值为公网地址后面对应的端口号,输入完点击应用

然后回到主界面,点击connect,灯变为绿色,表示连接成功

我们可以测试,是否可以发布消息和订阅,首先在Subscribe订阅界面填写一个topic 订阅ID,然后点击按钮Subscribe,开始订阅

然后在Publish 发布界面,输入同样的topic ID,然后输入需要发布的消息,点击按钮Publish

回到Subscribe订阅界面,我们可以看到,成功订阅到了该条信息

5. 代码调用MQTT服务

同样 我们在代码层面进行连接,以Java 为例,导入相关包

shell 复制代码
  <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.1.0</version>
        </dependency>

然后使用Cpolar 公网地址进行连接,输入ClientID,向同一个topic进行发布消息,当然,这边测试,地址是写在内部,如生产环境,建议将地址进行外部配置,有助于方便后续修改

程序运行后,我们可以看到,在客户端Subscribe 界面工具上,看到了我们代码中发布的消息数据,也是可以连接测试成功

6. 固定连接TCP公网地址

要注意的是,以上步骤使用的是随机临时tcp端口地址,所生成的公网地址为随机临时地址,该公网地址24小时内会随机变化。我们接下来为其配置固定的TCP端口地址,该地址不会变化,设置后将无需每天重复修改地址。

配置固定tcp端口地址需要将cpolar升级到专业版套餐或以上。

保留一个固定tcp地址,登录cpolar官网,点击左侧的预留,找到保留的tcp地址,我们来为我的世界保留一个固定tcp地址:

  • 地区:选择China
  • 描述:即备注,可自定义

点击保留

地址保留成功后,系统会生成相应的固定公网地址,将其复制下来

打开cpolar web ui管理界面,点击左侧仪表盘的隧道管理------隧道列表,找到我们上面创建的TCP隧道,点击右侧的编辑

修改隧道信息,将保留成功的固定tcp地址配置到隧道中

  • 端口类型:修改为固定tcp端口
  • 预留的tcp地址:填写官网保留成功的地址,

点击更新

隧道更新成功后,点击左侧仪表盘的状态------在线隧道列表,可以看到公网地址已经更新成为了固定TCP地址。

7. 固定地址连接测试

固定好了地址后,程序中修改成我们固定的TCP地址进行连接,当然,这边测试,地址是写在内部,如生产环境,建议将地址进行外部配置,有助于方便后续修改

可以看到接收订阅到了发送的消息,一个永久不变的固定地址就设置好了

相关推荐
用户97183563346615 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪16 小时前
linux 拷贝文件或目录到指定的位置
linux
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
小宇宙Zz1 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智1 天前
ARP代理--工作原理
运维·网络·arp·arp代理