本帖最后由 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
|