Home Assistant使用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(为了之后设置路径时方便)。命令举例如下

tar -xzvf frp_0.58.0_linux_amd64.tar.gz
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,示例内容如下

# 客户端连接端口,自由配置
bindPort = 7000

# 秘钥,使得客户端需配置相同参数才可连接到公网服务器,防止被滥用,可不设置
auth.token = "12345678"

# 允许客户端绑定的远程端口,同样为了防止服务被滥用,可不设置
allowPorts = [
    { single = 8123 }
]

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

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

./frps -c frps.toml

(二)内网服务器配置

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

# 公网服务器ip
serverAddr = "x.x.x.x"
# server端的bindPort
serverPort = 7000
# 需要跟服务器秘钥一样,才可以连接至服务器
auth.token = "12345678"

[[proxies]]
name = "Home Assistant"
type = "tcp"
# 被代理的本地服务端口
localPort = 8123
# 映射到公网服务器哪个端口,需要在server端allowPorts范围内
remotePort = 8123

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

./frpc -c frpc.toml

(三)访问者访问

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


2、http方式(推荐)

(一)公网服务器配置

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

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

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

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

./frps -c frps_HASS.toml

(二)内网服务器配置

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

# 公网服务器ip
serverAddr = "x.x.x.x"
# server端的bindPort
serverPort = 7000
# 需要跟服务器秘钥一样,才可以连接至服务器
auth.token = "12345678"

[[proxies]]
name = "HomeAssistant"
type = "http"
# localIP不设置默认为127.0.0.1
# 被代理的本地服务端口
localPort = 8123
# 自定义域名,设置为公网服务器ip,这样访问者就不用配置hosts了
customdomains = ["x.x.x.x"]
# 访问者访问服务时需要输入的用户名密码,可不设置
httpUser = "admin"
httpPassword = "admin"

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

./frpc -c frpc.toml

(三)Home Assistant配置

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

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 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文件,输入以下内容,并将其中路径等信息替换为自己实际的路径

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = 你的frps路径 -c 你的.toml文件路径

[Install]
WantedBy = multi-user.target

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

sudo systemctl enable frps.service

执行以下命令开启服务

sudo systemctl start frps.service

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

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值