当前位置:   article > 正文

Home Assistant使用frp将服务暴露至公网_homeasistant frp

homeasistant frp

 b站链接(只录了配置http方式的步骤):【使用frp实现在家外访问HomeAssistant】

目录

〇、物品清单

1、一台公网服务器

2、frp软件

一、基础配置

1、tcp方式

(一)公网服务器配置

(二)内网服务器配置

(三)访问者访问

2、http方式(推荐)

(一)公网服务器配置

(二)内网服务器配置

(三)Home Assistant配置

(四)访问者访问

二、 设置开机自启


〇、物品清单

1、一台公网服务器

我使用的是阿里云99计划的服务器,该活动2026年3月31日前有效(每年可以99元价格续费一年,刚刚购买即可进行续费)。

或者不准备公网服务器,使用公共的frp服务,如果选择此方法,请使用所选frp网站的教程进行搭建,本教程可能不适用。

2、frp软件

首先从github上下载frp,链接https://github.com/fatedier/frp/releases

根据自己的操作系统+系统架构选择合适的版本,在linux上,使用“uname -m”命令可以查看自己的系统架构,例如我的阿里云服务器(Alibaba Cloud Linux)运行结果是x86_64,那么我需要下载含linux_amd64字样的包;我的树莓派(Debian 12)运行结果是aarch64,那么我需要下载含linux_arm64字样的包。

一、基础配置

我这里有两种部署方式可选择,一种是使用tcp的方式进行连接,一种是使用http的方式进行连接。

使用tcp方式进行连接的好处是配置、维护起来比较简单,因为server端口是公共的,客户端的配置可以共存在一个配置文件里,这样有什么变动的话维护一个就好。

使用http方式进行连接的好处是可以便捷地设置公网用户访问口令,也就是说想访问Home Assistant登录页首先要过一次frp的认证,个人认为安全性较高,因此我实际采用的此方式。其实http方式本来也可以所有服务写在同一个配置文件里,但是这样的话需要靠不同的url对服务进行区分了,用户访问这些url时需要配置hosts,而手机并不能方便地配置hosts,如果想要使用IP+端口的形式访问的话,意味着同一个server端口只能容纳一个使用公网ip作为url的服务,这样的话想要暴露多个服务,就要配置多个服务端配置文件、多个客户端配置文件了,因此我说它不方便,实际上暴露的服务数量少、变动不频繁的话不方便的这一点可以忽略不计。

frp官方文档链接https://gofrp.org/zh-cn/docs/

 将下载好的frp压缩包上传到对应的设备上,解压压缩包,并将生成的文件夹名称命名为frp(为了之后设置路径时方便)。命令举例如下

  1. tar -xzvf frp_0.58.0_linux_amd64.tar.gz
  2. mv frp_0.58.0_linux_amd64 frp

 进入frp目录,里面有frps、frps.toml、frpc、frpc.toml,其中,公网服务器上需要配置frps.toml、运行frps;内网服务器上需要配置frpc.toml、运行frpc。

1、tcp方式

(一)公网服务器配置

编辑frps.toml,示例内容如下

  1. # 客户端连接端口,自由配置
  2. bindPort = 7000
  3. # 秘钥,使得客户端需配置相同参数才可连接到公网服务器,防止被滥用,可不设置
  4. auth.token = "12345678"
  5. # 允许客户端绑定的远程端口,同样为了防止服务被滥用,可不设置
  6. allowPorts = [
  7. { single = 8123 }
  8. ]

 其中,bindPort和allowPorts所列出的端口需要在公网服务器的防火墙/安全组策略中开放,这样访问者和客户端才能连接到服务端。

在frp文件夹内使用如下命令临时运行server端

./frps -c frps.toml

(二)内网服务器配置

编辑frpc.toml, 示例内容如下

  1. # 公网服务器ip
  2. serverAddr = "x.x.x.x"
  3. # server端的bindPort
  4. serverPort = 7000
  5. # 需要跟服务器秘钥一样,才可以连接至服务器
  6. auth.token = "12345678"
  7. [[proxies]]
  8. name = "Home Assistant"
  9. type = "tcp"
  10. # 被代理的本地服务端口
  11. localPort = 8123
  12. # 映射到公网服务器哪个端口,需要在server端allowPorts范围内
  13. remotePort = 8123

 在frp文件夹内使用如下命令临时运行client端

./frpc -c frpc.toml

(三)访问者访问

在公网服务器frps、内网服务器frpc都在运行的情况下,访问公网服务器ip:端口即可, 例如192.168.1.1:8123


2、http方式(推荐)

(一)公网服务器配置

在frp文件夹下新建frps_HASS.toml,输入下方内容

  1. # 客户端连接端口,自由配置
  2. bindPort = 7000
  3. # 访问者访问的端口,自由配置
  4. vhostHTTPPort = 8123
  5. # 秘钥,使得客户端需配置相同参数才可连接到公网服务器,防止被滥用,可不设置
  6. auth.token = "12345678"

 其中,bindPort和vhostHTTPPort所列出的端口需要在公网服务器的防火墙/安全组策略中开放,这样访问者和客户端才能连接到服务端。

在frp文件夹内使用如下命令临时运行server端

./frps -c frps_HASS.toml

(二)内网服务器配置

在frp文件夹下新建frpc_HASS.toml,输入下方内容

  1. # 公网服务器ip
  2. serverAddr = "x.x.x.x"
  3. # server端的bindPort
  4. serverPort = 7000
  5. # 需要跟服务器秘钥一样,才可以连接至服务器
  6. auth.token = "12345678"
  7. [[proxies]]
  8. name = "HomeAssistant"
  9. type = "http"
  10. # localIP不设置默认为127.0.0.1
  11. # 被代理的本地服务端口
  12. localPort = 8123
  13. # 自定义域名,设置为公网服务器ip,这样访问者就不用配置hosts了
  14. customdomains = ["x.x.x.x"]
  15. # 访问者访问服务时需要输入的用户名密码,可不设置
  16. httpUser = "admin"
  17. httpPassword = "admin"

 在frp文件夹内使用如下命令临时运行client端

./frpc -c frpc.toml

(三)Home Assistant配置

编辑configuration.yaml(或许在/usr/share/hassio/homeassistant下,或者使用Studio Code Server加载项进行配置),新增如下内容,然后重启HomeAssistant

  1. http:
  2. use_x_forwarded_for: true
  3. trusted_proxies:
  4. - 127.0.0.1

(四)访问者访问

在公网服务器frps、内网服务器frpc都在运行的情况下,访问公网服务器ip:端口即可, 例如192.168.1.1:8123,随后需要输入设置的访问者用户名密码才可访问目标网页。

二、 设置开机自启

本部分来自于frp文档https://gofrp.org/zh-cn/docs/setup/systemd/

以下内容为服务端配置,客户端配置类似,请读者自行完成。

首先在/etc/systemd/system目录下创建service文件,例如frps.service

sudo touch /etc/systemd/system/frps.service

 编辑刚刚创建的frps.service文件,输入以下内容,并将其中路径等信息替换为自己实际的路径

  1. [Unit]
  2. # 服务名称,可自定义
  3. Description = frp server
  4. After = network.target syslog.target
  5. Wants = network.target
  6. [Service]
  7. Type = simple
  8. # 启动frps的命令,需修改为您的frps的安装路径
  9. ExecStart = 你的frps路径 -c 你的.toml文件路径
  10. [Install]
  11. WantedBy = multi-user.target

 执行以下命令设置开启自启动

sudo systemctl enable frps.service

执行以下命令开启服务

sudo systemctl start frps.service

 重启、停止服务,只需要将上方命令的start替换为restart或stop即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/857176
推荐阅读
  

闽ICP备14008679号