赞
踩
b站链接(只录了配置http方式的步骤):【使用frp实现在家外访问HomeAssistant】
目录
我使用的是阿里云99计划的服务器,该活动2026年3月31日前有效(每年可以99元价格续费一年,刚刚购买即可进行续费)。
或者不准备公网服务器,使用公共的frp服务,如果选择此方法,请使用所选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。
编辑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
在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
编辑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即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。