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

 找回密码
 立即注册
查看: 24156|回复: 29

[进阶教程] HomeAssistant+frp+NGINX+HTTPS实现无端口加密远程访问

[复制链接]

3

主题

43

帖子

316

积分

论坛分享达人

积分
316
金钱
273
HASS币
0
发表于 2019-1-11 18:50:33 | 显示全部楼层 |阅读模式
本帖最后由 chychyy 于 2020-3-4 20:11 编辑

1. 背景


    使用https将本地的HomeAssistant服务转发到公网上,实现远程https和无端口访问。当然也可以转发任意其他服务。
    阿里云ECS Ubuntu 16.04  分配有公网IP <A.B.C.D>    //有公网IP的服务器均可
    本地树莓派在局域网内运行HomeAssistant <192.168.1.233:8123>
    网上教程比较杂乱。专门针对HomeAssistant的还没有。于是我尽可能详细的写一下。如果有问题可以回帖交流。

FRP介绍:
直白的说的话,
frp有服务端frps和客户端frpc。
服务端一般运行在有公网IP的机器上,如云服务器、VPS等。
frpc可以放在任意能联网的设备上面,但本身不必具有公网地址。比如树莓派、电脑等等。进行ssh、远程桌面等访问。一个服务端可以有多个客户端。
因为公网ip是在任何地方都可以访问的到的,
而且通过frp的服务,通过服务端又可以访问到任意的客户端。
这样就实现了你在任意能联网的设备上,通过访问公网ip,来访问任何运行了frpc客户端的设备。


                               
登录/注册后可看大图
2. 安装配置FRPS
    在ECS上执行:

cd ~
    mkdir software
    cd software
    wget [url=https://github.com/fatedier/frp/]https://github.com/fatedier/frp/[/url] ... _linux_amd64.tar.gz
    tar -xzvf frp_0.22.0_linux_amd64.tar.gz
    mv frp_0.22.0_linux_amd64.tar.gz frps
    cd frps
    nano frps.ini
    frps.ini 文件配置:
[common]
bind_addr = 0.0.0.0
bind_port = 7000
vhost_http_port = 7080
vhost_https_port = 7443
dashboard_port = 7500
dashboard_user = your_account
dashboard_pwd = your_pwd
authentication_timeout = 900
token = your_token
frps开机自动启动:(引用:FRP自启动

cd ~
    apt install supervisor
    cd /etc/supervisor/conf.d
    nano frps.conf
    frps.conf文件内容:
[program:frp]
command = /home/software/frps/frps -c /home/software/frps/frps.ini
autostart = true
# 重启supervisor
systemctl restart supervisor
# 查看supervisor运行状态
supervisorctl status   
3. 安装配置FRPC
    在本地运行HomeAssistant的树莓派上执行:

 cd ~
    mkdir software
    cd software
    wget [url=https://github.com/fatedier/frp/]https://github.com/fatedier/frp/[/url] ... _linux_amd64.tar.gz
    tar -xzvf frp_0.22.0_linux_amd64.tar.gz   
    mv frp_0.22.0_linux_amd64.tar.gz frpc
    cd frpc
    nano frpc.ini
frps.ini 文件配置:
[common]
server_addr = <A.B.C.D>
server_port = 7000
token = your_token
[homeassistant]
type = tcp
local_ip = 127.0.0.1
local_port = 8123
remote_port = 9000
custom_domains = your_website.com  //自己的域名,并且解析到ECS的公网IP
4. 安装配置NGINX
    在ECS上执行:

cd ~
    cd software
    apt update
    apt upgrade
    apt install nginx
    #NGINX开机启动
    systemctl enable nginx
    #NGINX的配置文件在/etc/nginx下
    cd /etc/nginx
    cd sites-enabled
    #新建一个配置文件,文件名可以为网站的域名
    touch your_website.com
    nano your_website.com
your_website.com文件的配置:
server {
    listen 80;
    server_name your_website.com;
    location / {
        rewrite ^ [url=https://your_website.com]https://your_website.com[/url]$request_uri? permanent;
    }
}
server {
    listen 443;
    server_name your_website.com;
    ssl on;
    ssl_certificate cert/your_website.com.pem;
    ssl_certificate_key cert/your_website.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
    ssl_prefer_server_ciphers on;
    proxy_set_header X-Forwarded-For $remote_addr;
    location /api/websocket {
        #端口写的和frpc.ini中一致
        proxy_pass [url=http://127.0.0.1:9000/api/websocket;]http://127.0.0.1:9000/api/websocket;[/url]
        proxy_read_timeout 60s;
        proxy_set_header Host $host;
        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-for $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'Upgrade';
    }
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_buffering off;
        proxy_pass [url=http://127.0.0.1:9000;]http://127.0.0.1:9000;[/url]
    }
}

   #检查NGINX配置文件是否正确
    nginx -t
    #加载NGINX配置文件
    nginx -s reload
5.访问https://your_website.com
微信截图_20190111190754.png

评分

参与人数 1金钱 +16 收起 理由
neroxps + 16

查看全部评分

回复

使用道具 举报

123

主题

4626

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16013
金钱
11302
HASS币
45
发表于 2019-1-11 18:54:26 | 显示全部楼层
谢谢楼主,技术流啊!
回复

使用道具 举报

15

主题

119

帖子

684

积分

高级会员

Rank: 4

积分
684
金钱
555
HASS币
50
发表于 2019-1-11 19:10:23 | 显示全部楼层
东西是好东西,可是我完全看不懂
回复

使用道具 举报

0

主题

44

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
金钱
224
HASS币
0
发表于 2019-1-11 19:50:19 | 显示全部楼层
顶一个,楼主技术流啊
回复

使用道具 举报

41

主题

521

帖子

2499

积分

金牌会员

Rank: 6Rank: 6

积分
2499
金钱
1973
HASS币
30
发表于 2019-1-11 22:19:45 | 显示全部楼层
frp+nginx的缺点是会把hass的所有来访ip都识别成127.0.0.1,这样会导致任何一个ip来访者尝试登陆错误达到极限,就会限制127.0.0.1登陆,导致自己也无法登陆
回复

使用道具 举报

8

主题

735

帖子

4264

积分

论坛元老

Rank: 8Rank: 8

积分
4264
金钱
3524
HASS币
40
QQ
发表于 2019-1-11 23:26:02 | 显示全部楼层
czweb 发表于 2019-1-11 22:19
frp+nginx的缺点是会把hass的所有来访ip都识别成127.0.0.1,这样会导致任何一个ip来访者尝试登陆错误达到极 ...

啥意思,按道理应该不会呀
回复

使用道具 举报

8

主题

863

帖子

5124

积分

论坛元老

Rank: 8Rank: 8

积分
5124
金钱
4261
HASS币
0
发表于 2019-1-11 23:36:45 | 显示全部楼层
学习分享,楼主666
回复

使用道具 举报

39

主题

750

帖子

4705

积分

论坛元老

Freddy.

Rank: 8Rank: 8

积分
4705
金钱
3930
HASS币
0

最佳新人卓越贡献

发表于 2019-1-12 08:48:59 | 显示全部楼层
论坛的链接解析真的恶心。。。。。
回复

使用道具 举报

4

主题

339

帖子

3198

积分

论坛元老

Rank: 8Rank: 8

积分
3198
金钱
2859
HASS币
0
发表于 2019-1-12 09:26:58 | 显示全部楼层
Aiden1 发表于 2019-1-11 23:26
啥意思,按道理应该不会呀

把ban去掉就不会了吧。。。
回复

使用道具 举报

8

主题

735

帖子

4264

积分

论坛元老

Rank: 8Rank: 8

积分
4264
金钱
3524
HASS币
40
QQ
发表于 2019-1-12 13:45:57 | 显示全部楼层
georgewu57 发表于 2019-1-12 09:26
把ban去掉就不会了吧。。。

什么ban?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-25 20:49 , Processed in 0.065461 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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