问题:服务不能暴露公网
客户的主机不能连外网,服务MQTT服务部署在内网。记做:p1 (computer 1)堡垒机(跳板机)可以连外网,内网IP 和 MQTT服务在同一个网段。记做:p2 (computer 2)对他人而言,直接连 公网的 服务和端口,即可 和 p1 通信。
1. 跳板机 安装Nginx
去官网下载Nginx配置 监听的端口,可参考如下文档,不看也行
https://blog.csdn.net/qq_41113081/article/details/120713419
就是简单的改下配置文件,如下
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的端口
开启 花生壳的自定义 映射。
3. 课外 mqtt服务端搭建
也可以自己搭建一个 mqtt服务器。使用软件为:mosquitto,参考文档。
https://blog.csdn.net/zlbdmm/article/details/125297796
修改:配置文件 mosquitto.conf
listener 7788allow_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 进行通信。
推荐文章
发表评论