问题:服务不能暴露公网

  1. 客户的主机不能连外网,服务MQTT服务部署在内网。记做:p1 (computer 1)
  2. 堡垒机(跳板机)可以连外网,内网IP 和 MQTT服务在同一个网段。记做:p2 (computer 2)
  3. 对他人而言,直接连 公网的 服务和端口,即可 和 p1 通信。

1. 跳板机 安装Nginx

  • 去官网下载Nginx
  • 配置 监听的端口,可参考如下文档,不看也行


  • 就是简单的改下配置文件,如下
include tcp.conf;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
	
	#这个配置无用吧,这是http的
	server_tokens         off;
	}
  • 当前目录下 新建 tcp.conf
  • server 192.168.30.192:7788;
  • 配置:p1(有mqtt服务的主机) 的 IP 和 端口
  • 因为 访问到这台主机(p2)的 都要转发给 它
  • 注意 p1 要开通端口(我本地测试,直接关闭防火墙即可)
  • listen 7777;
  • 本机对外暴露的端口,7777。
  • 就是 别人访问 7777 端口,即可跳转到 192.168.30.192:7788
  • 启动Nginx 即可。
stream {
  upstream mqtttest {
   # 目标 redis server ip和host
    server 192.168.30.192:7788;
  }
  server {
   # 要监听的外部端口,比如你的域名是www.baidu.com,那么你本地连接redis的时候,host就填www.baidu.com,端口8899
    listen 7777;
    proxy_pass mqtttest;
  }
}

2. 安装 花生壳

  • 测试 ngrok 好像用不了 tcp 内网穿透,但花生壳可以。
  • 下载好后,实名认证,添加自定义映射(官网有教程)
  • 本机IP 就是设置 自己主机(p2)的IP,端口设置为 7777
  • 让 外网能访问到 自己的7777端口。
  • 因为没有花钱,外网的 域名和端口如下
  • 注意点:协议一定选 TCP,因为mqtt底层依然是 TCP
6g8231567p.zicp.fun:5748

192.168.30.36 本机p2的IP
7777  本机p2的端口
  • 开启 花生壳的自定义 映射。

centos 7搭建mqtt服务器 mqtt服务器搭建在内网_nginx

3. 课外 mqtt服务端搭建

  • 也可以自己搭建一个 mqtt服务器。
  • 使用软件为:mosquitto,参考文档。


  • 修改:配置文件 mosquitto.conf
  • listener 7788
  • allow_anonymous true
  • 就不要密码了
  • 在管理工具->服务,中找到Mosquitto Broker,启动mosquitto服务
  • 使用 CMD窗口进行订阅
  • 没用用户名密码,去掉这些参数即可。
  • -v 进行订阅

mosquitto_sub.exe -h 127.0.0.1 -p 7788 -u admin -P 123456 -v -t sensor

  • 使用 CMD 窗口进行发布
  • -t进行发布 -m是消息内容

mosquitto_pub.exe -h 127.0.0.1 -p 7788 -u admin -P 123456 -t sensor -m “消息测试”

  • 最后使用 MQTTX 进行测试
  • 点击“New Connection”按钮,则出现新建连接对话框,根据MQTT服务器的信息,输入对应的参数
  • 如果想订阅一个主题,则点击“New Subscription”按钮,则出现新建订阅对话框
  • 订阅上面的:t sensor 即可。

4. MQTTX 进行测试

  • 点击链接,名称随便起
  • 服务器地址为:
  • mqtt:// 默认的
  • 6g8231567p.zicp.fun (就是上面 花生壳 对外访问的地址)
  • 端口为:57482,花生壳 提供的
  • 点击链接,链接成功后,即可给 p1 主机发送 消息。
  • 同理 添加了 订阅后,即可收到 消息。
  • 使用 p1 cmd 窗口,发送 mqtt消息。
  • 这个 依然能收到 内网的消息。

5. 总结

  • 客户主机 p1
  • 跳板机 p2
  • 安装 花生壳
  • 安装 nginx
  • 对外用户
  • 访问流程:
  • 对外用户访问——>花生壳——>Nginx——>客户主机
  • Nginx 暴露 7777端口,供花生壳 访问
  • 访问了 7777 端口,Nginx 转发到 p1 的 IP 和 端口
  • 实现了:只需要给 对外用户一个,花生壳 的 域名和端口
  • 他 即可连接到 mqtt服务,能接受 和 发送 消息。
  • 对外用户:直接能 和 p1 进行通信。

centos 7搭建mqtt服务器 mqtt服务器搭建在内网_mqtt服务搭建_02


centos 7搭建mqtt服务器 mqtt服务器搭建在内网_nginx_03