在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地址进行连接,当然,这边测试,地址是写在内部,如生产环境,建议将地址进行外部配置,有助于方便后续修改

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

相关推荐
霍夫曼11 小时前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
2301_8107463111 小时前
CKA冲刺40天笔记 - day20-day21 SSL/TLS详解
运维·笔记·网络协议·kubernetes·ssl
❀͜͡傀儡师11 小时前
docker 部署 komari-monitor监控
运维·docker·容器·komari
物联网软硬件开发-轨物科技12 小时前
【轨物方案】软硬件一体赋能,开启矿山机械远程智慧运维新篇章
运维
月熊12 小时前
在root无法通过登录界面进去时,通过原本的普通用户qiujian如何把它修改为自己指定的用户名
linux·运维·服务器
大江东去浪淘尽千古风流人物12 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
打码人的日常分享13 小时前
智慧城市一网统管建设方案,新型城市整体建设方案(PPT)
大数据·运维·服务器·人工智能·信息可视化·智慧城市
赖small强13 小时前
【Linux驱动开发】NOR Flash 技术原理与 Linux 系统应用全解析
linux·驱动开发·nor flash·芯片内执行
风掣长空14 小时前
Google Test (gtest) 新手完全指南:从入门到精通
运维·服务器·网络
luback14 小时前
前端对Docker简单了解
运维·docker·容器