『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 10171|回复: 9

[进阶教程] 使用公共MQTT服务器进行HTTP内网穿透

[复制链接]

2

主题

47

帖子

348

积分

论坛技术达人

积分
348
金钱
301
HASS币
0
发表于 2018-4-5 19:16:33 | 显示全部楼层 |阅读模式
本帖最后由 fanthos 于 2018-5-4 11:26 编辑

使用公共(开放也可)服务器进行内网穿透,并支持多用户。只需要能够访问公共服务器就可以从任意地方访问内网的HTTP服务器。依赖:aiohttp,hbmqtt,pycryptodome
如希望使用HomeAssistant的REST API,可在能够访问HA的设备上或者HA主机内(192.168.1.100),修改配置client.py。
MQTT_SERVER = 'mqtt_server'
MQTT_USER = 'ha_user'
MQTT_PASS = 'client'
# MQTT服务器和用户名、密码

MSG_PASS = b'key in 16 bytes!'
# AES密钥,16个字节
API_HEADERS = { 'x-ha-access': 'test' }
# HTTP头,需要将test修改成密码
MQTT_TOPIC = 'httptest1'
# 当前用户ID
HTTP_PREFIX = 'http://127.0.0.1:8123/api/'
# HA的API地址

运行client.py。


在远程设备,比如另一个内网主机(192.168.2.100)中修改server.py。
MQTT_SERVER = 'mqtt_server'
MQTT_USER = 'ha_srv'
MQTT_PASS = 'server'

SERVER_PORT = 8180
# HTTP服务监听端口
CLIENT_TIMEOUT = 10
# 客户端超时(秒)

MSG_PASS_DICT = {
    'httptest1': b'key in 16 bytes!',
}
# 与每个用户对应的用户ID和密码

运行server.py。

访问 http://192.168.2.100:8180/httptest1/config 会转发到 http://192.168.1.100:8123/api/config

server.py支持多用户,并完整支持异步加解密,可以修改代码从数据库和密码文件读取用户列表。
可以在自己的主机上运行mosquitto服务,参考配置文件:
加入以下配置到/etc/mosquitto/mosquitto.conf
acl_file /etc/mosquitto/mqtt.aclpassword_file /etc/mosquitto/mqtt.pwd
connection_messages false
allow_anonymous false


/etc/mosquitto/mqtt.acl
user ha_user
topic read req/#
topic write resp/#
user ha_srv
topic read resp/#
topic write req/#


/etc/mosquitto/mqtt.pwd 可使用mosquitto_passwd进行配置:
ha_user:$6$2RzU7vmUu+6wKV8a$epYz7JGef/VfUonTqKe+EY+sBKPIoaV9QBeJ8apzjtNnoIYxgQ4d4wbjuXsR5igSlJ3hXKXcbRGC8ntcoQZ9vw==
ha_srv:$6$EJKkTDNBFcRulh+b$9oiixqTiiQX9TDtYAi30jQDD8eZgomE1ft5dVB6CVCXNZFHigI++WWhSfLz4iTBZKNmHikZomPq4YObViRU8tg==


源代码: https://github.com/fanthos/MqttHttpProxy

评分

参与人数 1金钱 +20 收起 理由
+ 20 经鉴定,楼主为大神。

查看全部评分

回复

使用道具 举报

123

主题

4659

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16367
金钱
11623
HASS币
45
发表于 2018-4-5 19:58:14 | 显示全部楼层
经鉴定,楼主为大神。
回复

使用道具 举报

9

主题

228

帖子

2050

积分

超级版主

Rank: 8Rank: 8

积分
2050
金钱
1797
HASS币
100

突出贡献

发表于 2018-4-5 20:22:58 | 显示全部楼层
流弊了,布丁布丁
回复

使用道具 举报

2

主题

47

帖子

348

积分

论坛技术达人

积分
348
金钱
301
HASS币
0
 楼主| 发表于 2018-4-5 20:24:39 | 显示全部楼层
本帖最后由 fanthos 于 2018-4-5 20:28 编辑

论坛提供的天猫绑定如果用的是REST API没有用websocket,这个可以帮助内网用户使用服务。配置mqtt建议设置req/#的publish权限保护,resp/#可以没有密码。

理论上任何支持MQTT客户端并支持AES-GCM或者类似加密算法的语言都可以替代服务器使用

回复

使用道具 举报

123

主题

4659

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16367
金钱
11623
HASS币
45
发表于 2018-4-5 21:00:04 | 显示全部楼层
fanthos 发表于 2018-4-5 20:24
论坛提供的天猫绑定如果用的是REST API没有用websocket,这个可以帮助内网用户使用服务。配置mqtt建议设置r ...

那好了,就缺一个MQTT服务器了
回复

使用道具 举报

0

主题

316

帖子

1732

积分

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1416
HASS币
0
发表于 2018-4-5 23:47:51 | 显示全部楼层
论坛越来越繁荣啦啦啦啦
回复

使用道具 举报

12

主题

545

帖子

2037

积分

金牌会员

Rank: 6Rank: 6

积分
2037
金钱
1492
HASS币
0
发表于 2018-4-6 11:46:21 | 显示全部楼层
Jones 发表于 2018-4-5 21:00
那好了,就缺一个MQTT服务器了

腾讯学生鸡,1月1元,你值 得拥有。
回复

使用道具 举报

10

主题

133

帖子

747

积分

高级会员

Rank: 4

积分
747
金钱
614
HASS币
0
发表于 2018-4-6 13:31:36 | 显示全部楼层
牛人,膜拜一下
回复

使用道具 举报

1

主题

81

帖子

575

积分

高级会员

Rank: 4

积分
575
金钱
494
HASS币
0
发表于 2018-4-6 14:34:11 | 显示全部楼层
厉害   没看懂
回复

使用道具 举报

2

主题

47

帖子

348

积分

论坛技术达人

积分
348
金钱
301
HASS币
0
 楼主| 发表于 2018-4-6 22:20:56 | 显示全部楼层
已更新MQTT服务器参考配置
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-9-20 09:00 , Processed in 0.057094 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表