问题:服务不能暴露公网

客户的主机不能连外网,服务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 进行通信。

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。