1C1G 环境下 Home Assistant 内网穿透与网络监控部署笔记

一、 架构设计与网络拓扑

本方案实现了公网安全访问本地香橙派(Orange Pi Zero 3)上运行的 Home Assistant(HA),并对网络流量和硬件资源进行了极限优化。

[外网访客] 
   │ (HTTPS 域名访问)
   ▼
[腾讯云服务器 (1C1G)]
   │ 1. Caddy (SSL 证书解密与反向代理)
   │ 2. FRPS (穿透服务端)
   ▼ (FRP 反向隧道穿透)
[家里香橙派 (Orange Pi Zero 3)]
   │ 1. FRPC (穿透客户端)
   │ 2. Home Assistant (容器运行在 host 网络模式)
   ▼ (UPnP 局域网协议)
[荣耀路由 3] (抓取实时下载/上传网速)

二、 腾讯云服务端配置 (1C1G 优化)

1. Caddyfile 配置

Caddy 负责处理公网 HTTPS 证书,并将流量无损转发给 FRPS。

zadg.baidaoya.site {
    # 启用 gzip 压缩,减少 1C1G 带宽外发压力
    encode gzip

    # 反向代理到 FRPS 绑定的 vhostHTTPPort 端口
    reverse_proxy 127.0.0.1:8080 {
        # 透传访客的真实公网 IP 供 HA 安全审计
        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-For {remote_host}
        header_up X-Forwarded-Proto {scheme}
    }
}

三、 边缘端香橙派与 Home Assistant 核心优化

由于宿主机仅有 1C1G 内存,必须切除 HA 所有无用组件,并严格限制数据库的写入频率和体积。

1. configuration.yaml 极限精简与纠错

去除了自带的 default_config:themes 主题扫描。在 host 网络模式下,由于流量是由本地 frpc 经由物理网卡投递,必须同时信任本地回环及香橙派自身的物理内网 IP。

# 1. 核心基础组件(完全替代 default_config,只保留轻量框架)
frontend: # 启用网页端 UI 界面
http: # 基础网络服务
  use_x_forwarded_for: true # 必须开启,用于读取 Caddy 传过来的真实公网 IP
  trusted_proxies:
    - 127.0.0.1      # 信任本地回环IPv4
    - ::1            # 信任本地回环IPv6
    - 192.168.10.90  # 信任香橙派自身的物理内网 IP(关键纠错点)

config: # 启用网页端里的“配置”菜单
person: # 基础人员管理
zone: # 基础区域管理

# 2. 自动化与脚本支持
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

# 3. 流量图表核心组件与数据库防爆控制(1C1G 机器生命线)
history: # 启用历史记录(看折线图必需)
recorder: # 控制数据写入,防止撑爆内存和云盘
  purge_keep_days: 1 # 历史数据严格只保留 1 天,过期自动粉碎
  commit_interval: 30 # 每 30 秒才向磁盘写入一次,极大减轻 I/O 压力
  exclude: # 排除不需要记录历史的域,节省空间
    domains:
      - automation
      - script
      - scene
      - zone

# 4. 第三方本地集成
hass_cozylife_local_pull:
  lang: zh
  ip:
    - "43.235.100.182"

2. frpc.toml 客户端配置

因为 HA 使用了 --net=host 模式且将服务绑定到了物理网卡上,localIP 必须指定为香橙派的物理局域网 IP。

[common]
server_addr = "你的腾讯云公网IP"
server_port = 7000 # 对应 frps 的 bind_port

[[zadg]]
type = "http"
local_ip = "192.168.10.90" # 对应香橙派物理内网 IP
local_port = 8123          # Home Assistant 默认端口
custom_domains = ["zadg.baidaoya.site"]

四、 核心业务落地:启用 UPnP 流量监控

  1. 环境依赖:由于 Podman 容器在香橙派上使用了 --net=host,具备在局域网内直接接收广播的能力。
  2. 集成添加路径
  3. 登录 HA 后台 $\rightarrow$ 设置 $\rightarrow$ 设备与服务。
  4. 正常情况下系统会自动识别到局域网内的荣耀路由 3 并弹出金黄色卡片。
  5. 若未弹出,点击右下角“添加集成”,搜索 UPnP/IGD 并提交。
  6. 数据呈现
  7. 成功后将获得 sensor.xxx_download_speed(下载网速)和 sensor.xxx_upload_speed(上传网速)实体。
  8. 在“概览”主页添加“网页图表 (History Graph)”卡片,勾选上述实体,即可生成 24 小时精准网速波动曲线。

五、 后期维护与防踩坑指南

1. 路由器 IP 静态绑定

由于 frpc.tomlconfiguration.yaml 中硬编码了 192.168.10.90,必须登录荣耀路由器后台(默认 192.168.10.1),将香橙派的 MAC 地址与 192.168.10.90 进行静态 IP 绑定,防止路由器重启后 IP 变动导致穿透失效。

2. 容器镜像无损更新步骤

  1. 进入 compose.yaml 所在目录,拉取最新镜像:

    podman-compose pull
    
  2. 重建并后台启动容器(Podman 会自动销毁旧容器并应用新镜像,挂载的配置文件不会丢失):

    podman-compose up -d
    
  3. 清理无用的旧镜像残余(1C1G 释放磁盘必做):

    podman image prune -f
    

3. 安全审计验证

断开手机 Wi-Fi,使用移动蜂窝网络通过域名访问 HA。登录后查看 设置 $\rightarrow$ 系统 $\rightarrow$ 日志。如果登录日志中显示的来源 IP 为手机的运营商公网 IP,而非 127.0.0.1192.168.10.90,说明全链路反向代理透传配置完美,HA 的防暴力破解机制可精确拦截外网攻击。

标签: none

添加新评论