Home Assistant 内网穿透:frp、ngrok 远程访问与安全加固

发布时间:2026/10/1 22:40:18
Home Assistant 内网穿透:frp、ngrok 远程访问与安全加固 折腾智能家居这套东西久了你会发现一个绕不开的名字——Home Assistant。它是一个开源的智能家居中枢能把家里那些各自为政的设备拉进同一个面板用一套自动化规则串起来本地跑逻辑、断网也不慌。但真正把 HA 跑起来之后很多人会卡在同一个地方在家里局域网用得挺顺手人一出门就抓瞎想瞄一眼门口的摄像头、想远程把忘关的灯关掉结果在外网点不开。这时候「内网穿透」就登场了。这篇内容我打算把整条链路讲透HA 装在哪、怎么装内网穿透选什么方案、参数怎么配暴露到公网之后怎么做安全加固以及踩坑之后总结出来的排查思路。不管你是刚买树莓派的新手还是已经跑了一年 HA 想补上远程访问这块短板的老玩家应该都能从里面抄到能直接用的东西。1. 先想清楚HA 加内网穿透的整体方案怎么定1.1 Home Assistant 在家居场景里的真实定位Home Assistant下面统一简称 HA是一个开源的家庭自动化平台它最核心的价值在于「聚合」和「本地化」。聚合的意思是不管你用的是米家、涂鸦、Aqara、HomeKit、Modbus还是自己拿 ESP32、STM32 焊出来的传感器节点只要有人写了对应的集成IntegrationHA 就能把这些设备统一成一个个「实体」Entity在同一个面板上控制。本地化的意思是绝大部分自动化逻辑跑在你自己的硬件上路由器断网、厂商云服务出故障家里的灯该亮还是亮、该关还是关这一点和很多只能靠云端下发的方案有本质区别。也正因为逻辑都在本地HA 天生就是一个「内网服务」。它默认监听 8123 端口只在你家局域网里可访问。这个设计从安全角度是完全正确的但直接导致了一个体验上的断层你在沙发上能调温度在办公室就调不了。想要补上这段体验就得让外网能够安全地访问到你家里的这台机器而这正是内网穿透要解决的问题。1.2 内网穿透在智能家居链路里的真实位置很多人一听「内网穿透」就觉得是个高深的东西其实它的本质非常朴素你家宽带运营商给的是一个内网地址比如 100.64.x.x 或者 192.168.x.x外网根本找不到你家这台机器内网穿透做的事情就是找一台有公网地址的服务器做「中转站」让外网请求先到中转站再由中转站转交给你的 HA。整个过程对你家里的网络环境没有任何侵入性不需要改光猫、不需要求运营商装上客户端配几行参数就能跑。理解这一点之后方案选型就不难了。中转站由谁提供决定了你的成本、稳定性和可控程度。自己买台小服务器搭中转站自由度最高、长期成本最低但要自己维护用别人提供的现成服务省心、上手快但免费档通常有带宽和域名限制。这两条路我都走过后面会分别给配置。1.3 三种远程访问路线的取舍对比在动手之前先把可选路线摆到桌面上比一比避免装到一半发现方向不对推翻重来。方案是否需要公网 IP上手难度稳定性长期成本适合人群路由器端口映射必须要有公网 IP低高0宽带有公网 IP、有固定域名自建 frp 中转中转端需要中高服务器月租愿意折腾、追求可控第三方穿透服务不需要低中免费或按量付费想快速验证、临时调试官方云订阅不需要极低高按月订阅不想碰命令行的人端口映射这条路看着最省事但现在家用宽带能拿到真正公网 IP 的情况越来越少尤其是很多地区已经默认给的是运营商大内网地址你去问客服对方要么说不支持要么让你办专线成本直接翻几倍。所以在实际项目里frp 这类自建中转加第三方穿透服务兜底是更现实的选择。提示方案定了再动手别一边装 HA 一边改方案来回切换会把你原来的配置路径搞乱返工成本远高于前期多花二十分钟想清楚。2. 硬件与软件环境准备别在第一步就埋雷2.1 主机选型树莓派、迷你主机还是旧笔记本HA 官方主推的是 Home Assistant OSHAOS它对硬件的要求不算高但也不是随便一个设备就能长期跑。我按实际体验给个排序参考。树莓派 4B4GB 以上是最经典的入门选择功耗低、社区教程多缺点是 SD 卡容易坏长期跑建议换成 USB 固态或者 NVMe 扩展板我自己就遇到过 SD 卡写坏导致系统起不来的情况换固态之后稳定跑了一年多没出过事。迷你主机N100 那类低功耗 x86是我现在的主力推荐性能富余、接口多、能跑 Docker 生态价格也就比树莓派套装贵一点但稳定性完全不是一个量级。旧笔记本也能用自带电池相当于免费 UPS停电时还能撑一阵缺点是体积大、功耗高。至于 24 小时开着的 Windows 台式机我不太推荐作为长期方案系统更新、休眠策略都会影响 HA 的持续运行。2.2 三种安装方式的对比与选择HA 的安装方式大致分三类选错了后期会很别扭。安装方式系统占用插件支持维护难度推荐度HAOS 裸机刷写独占整机完整支持极低新手首选Docker 容器与其他服务共存部分受限中有 Linux 基础的人直接 pip 安装依赖系统环境基本没有高只建议开发调试HAOS 的好处是把系统、Supervisor、核心、插件全打包好了加个 ESPHome 或者 Node-RED 插件点两下就装完出问题还能从网页端一键恢复备份。Docker 方式的灵活性更高适合你已经有台 NAS 或者服务器在跑别的服务但要注意 Supervisor 相关的能力在纯 Docker 模式下是缺失的很多一键插件用不了。我一般建议第一次上手就直接刷 HAOS别一上来就追求「全都要」。2.3 网络环境盘点动手前先摸清家底这一步很多人跳过结果后面穿透怎么都连不上白白浪费一晚上。你需要搞清楚三件事家里的路由器管理地址和登录方式、HA 主机拿到的局域网 IP 是不是固定的、以及宽带到底有没有公网地址。局域网 IP 一定要在路由器里做 DHCP 静态绑定否则哪天地址从 192.168.1.50 变成 192.168.1.51你所有的穿透配置全部失效这种问题排查起来最耗神。查公网地址的方法很简单在 HA 主机的终端里执行下面这行看看返回的地址是不是运营商大内网段100.64.0.0/10 或者 10.x、172.16.x 这类。curl -s ifconfig.me如果返回的地址和你路由器 WAN 口显示的地址不一样基本可以确认你处在运营商 NAT 后面端口映射这条路就断了老老实实走内网穿透。注意家里如果有多层路由光猫拨号 路由器二次拨号一定要先理清谁是主路由HA 挂在哪一层穿透客户端要跑在哪台机器上这条链路画错了后面全是坑。3. Home Assistant 本地部署实操先把内网跑通3.1 系统刷写与首次启动以 HAOS 为例先去官网下载对应硬件的镜像。树莓派就下 .img.xzx86 迷你主机就下 .img 的通用版本。刷写工具在 Windows 上用 balenaEtcher 或者 Rufus 都行Linux 直接用 dd 命令。写完镜像之后把存储卡插回设备接上网线通电等个五到十分钟期间它会自己扩容分区、拉取最新版本。首次启动最省事的判断方式是看路由器后台有没有出现一个叫 homeassistant 的新设备记下它的 IP。然后在浏览器输入http://你记下的IP:8123看到欢迎界面就说明系统起来了。第一次会让你创建管理员账号密码一定要用强密码这是你整个智能家居系统的总钥匙别图省事用 123456后面暴露到公网之后这个密码就是最后一道防线。3.2 用 Docker 方式安装的完整命令如果你选的是 Docker 路线在 Linux 主机上先把 Docker 装好然后执行下面这套命令。注意--networkhost这一项在一些需要广播发现设备的场景下是必要的比如自动发现局域网里的 Chromecast 或者某些 Wi-Fi 设备。mkdir -p /opt/homeassistant docker run -d \ --name homeassistant \ --privileged \ --restartunless-stopped \ -e TZAsia/Shanghai \ -v /opt/homeassistant:/config \ --networkhost \ ghcr.io/home-assistant/home-assistant:stable跑起来之后同样访问 8123 端口。Docker 方式有个细节要注意/config目录一定要挂到宿主机上不然容器一重建你所有的自动化配置、账号、集成全部蒸发。我见过有人忘了挂载升级镜像之后哭都来不及这个坑真的不值得踩。3.3 基础配置与设备接入进入 HA 之后先在「设置 - 设备与服务」里把能自动发现的设备接进来。米家的东西可以通过 Xiaomi Miot Auto 这类集成接入需要你填小米账号建议专门建一个小号别用主账号。Zigbee 设备要配一个协调器比如 CC2652 或者 Sonoff 的棒子通过 ZHA 或者 Zigbee2MQTT 接入。自己 DIY 的 ESP32 传感器节点用 ESPHome 集成写好 YAML 直接 OTA 推送改一行参数就能生效比重新烧录舒服太多。接入完成之后建议先建几个基础的自动化验证链路比如「门磁打开后客厅灯亮 30%」这种最简单的确认整个系统从设备到自动化都正常。这一步做完你的 HA 在内网就完全可用了接下来才轮到穿透上场。顺序千万别反先在局域网里把功能调通再去搞远程访问否则出问题时你连是本机配置错了还是穿透断了都分不清。4. 内网穿透落地frp、ngrok 与商业服务实战4.1 frp 的工作模型与自建服务端思路frp 是国内用得最多的开源内网穿透工具模型很清晰服务端frps跑在有公网地址的机器上客户端frpc跑在你家里客户端主动连服务端建立长连接外网请求到达服务端后通过这条长连接转发回家里的 HA。它的优势是自己完全可控端口、域名、鉴权都在你手里不依赖任何第三方平台。服务端我一般放在一台按量付费的小型云主机上最低配就够用因为穿透本身不消耗多少 CPU瓶颈在带宽。选机型的时候主要看带宽和流量包2Mbps 左右的带宽跑 HA 的网页控制面板是够的但如果要流畅看摄像头视频流就明显吃紧那个场景建议单独走别的通道或者降码率。服务端装好之后放行防火墙的 7000 端口frp 控制端口和你要用的映射端口这点如果忘了客户端会一直报连接超时。4.2 frp 服务端与客户端配置实录先写服务端配置bind_port是控制通道端口token是客户端接入的凭证务必设一个复杂字符串不然别人扫到你的端口就能把流量挂进来。# frps.ini 服务端 [common] bind_port 7000 token 换成你自己的一长串随机字符 dashboard_port 7500 dashboard_user admin dashboard_pwd 换成另一个强密码 log_file /var/log/frps.log log_level info接着是客户端配置把本地 8123 映射到服务端的 18123 端口。这里remote_port随便挑一个不冲突的高位端口别用 80、443 这些容易被扫。# frpc.ini 客户端 [common] server_addr 你的服务器公网地址 server_port 7000 token 和服务端保持一致 [ha_web] type tcp local_ip 127.0.0.1 local_port 8123 remote_port 18123配置写完之后服务端先跑./frps -c frps.ini客户端再跑./frpc -c frpc.ini。两边都成功后浏览器访问http://服务器地址:18123就能看到 HA 的登录页了。生产环境建议用 systemd 做成开机自启的服务不然服务器一重启、家里一断电穿透就断了你还得手动去拉。4.3 ngrok 快速验证方案如果你只是想先验证一下穿透能不能通不想马上开服务器ngrok 是最快的。下载对应平台的二进制文件一条命令就能把本地 8123 暴露出去。ngrok http 8123执行之后终端会给你一个随机域名外网访问这个域名就能进 HA。免费档的域名每次重启都会变适合临时调试不适合长期挂着。另外免费档的连接数、带宽都有限制实际用起来延迟不太稳定网页控制够用实时视频就别指望了。我的习惯是拿它做「穿透链路是否通」的快速验证确认自己 HA 的配置没问题之后再切到自建的 frp 上做长期方案。4.4 第三方穿透服务与选择要点市面上还有一类现成的穿透服务像樱花内网穿透这类特点是注册即用、不用自己开服务器、有图形化配置界面。对完全不想碰命令行的人来说这条路确实更友好。选这类服务的时候我会重点看几个点是不是支持自定义域名或者固定域名免费档经常给你随机子域名每次变等于没固定入口、带宽和并发限制是多少、有没有提供 HTTPS 证书自动签发。还有一个容易被忽略的点是映射协议的支持范围。HA 的网页是 HTTP 服务但如果你还想同时把 RTSP 摄像头、MQTT 的 1883 端口一起穿出去就得确认服务商支持多条隧道、多端口映射。有些免费档只允许开一条隧道那就只能挑最关键的先上。用第三方服务的边界要自己守住只映射 HA 的网页端口其他内部服务一概不暴露减少攻击面。5. 安全加固与问题排查暴露公网后的必修课5.1 把 HA 挂到公网前必须做的几件事把家里的服务放到公网安全是第一优先级这里没有商量余地。第一件事是开启 HA 的双因素认证在用户资料里配置 TOTP手机装个验证器登录时多一步验证能挡掉绝大多数撞库尝试。第二步是创建独立账号给家人用的账号权限收窄不要所有人都用管理员账号。第三步是把configuration.yaml里的代理信任配置写好让 HA 正确识别客户端的真实来源地址否则日志里全是中转服务器的地址出问题根本查不出来。# configuration.yaml http: use_x_forwarded_for: true trusted_proxies: - 127.0.0.1 - 你的中转服务器地址第四件事别用默认端口。8123、18123 这种一眼就是 HA 的端口能换成随机高位端口就换减少被自动化扫描盯上的概率。还有一点穿透服务只用来访问自己拥有或已获授权的设备这个边界一定要守住。5.2 常见问题与排查速查表穿透这套链路涉及家里设备、宽带、服务器三段出问题时按下面这个表逐段排查比瞎试效率高得多。现象可能原因排查动作客户端连不上服务器服务器防火墙没放行控制端口检查安全组和本机 iptables能登录 HA 但很慢中转带宽不够看服务端带宽占用考虑升级外网打不开但内网正常映射端口写错或服务端没起本地 telnet 服务器端口测试登录后一直转圈代理头配置缺失检查 trusted_proxies 配置穿透隔几天就断客户端没做自启或断线重连配 systemd 加自动重启视频流卡顿严重带宽不足以承载视频降码率或单独走别的链路排查的时候有一个万能起手式先确认本地局域网能不能访问再确认客户端和服务端的长连接是否活着看 frp 的面板或者日志最后才怀疑映射配置。这三步能覆盖九成以上的问题顺序别乱。5.3 踩过的坑与独家经验第一个坑是设备 IP 漂移。我有一次路由器重启后 HA 主机拿了新地址frpc 配置里的local_ip还指向旧地址结果整个穿透静默失效日志里只有一行连接被拒绝找了大半天。后来我把 HA 主机在路由器里做了静态绑定这个问题就再没出现过强烈建议你也做。第二个坑是升级 HA 之后端口变了或者反向代理配置被覆盖。每次升级大版本之前先在 HA 里做一次完整备份把配置目录打包存到别的地方出问题几分钟就能回滚比你从头配一遍省太多时间。第三个坑是穿透暴露之后收到的扫描流量。HA 的日志里会突然冒出大量陌生 IP 的登录尝试这说明你的端口被扫到了。应对方式除了换端口和开双因素还可以在中转服务器上做一层 IP 白名单只允许你自己的常用网络访问虽然出差在外会麻烦一点但安全性提升非常明显。第四个经验是关于备份策略的。HA 的备份最好做三份本地一份、NAS 一份、加密后扔到云存储一份。智能家居系统的配置是长期积累出来的重建成本极高我就见过有人硬盘挂了之后所有自动化脚本全丢那种绝望感真的不想让你体验。6. 我个人在这套系统上的一些体会这套 HA 加内网穿透的组合我断断续续跑了两年多中间从树莓派换到迷你主机从 ngrok 换到自建 frp踩的坑大概能写满好几页。最大的体会是别把「能连上」当成终点。刚配通穿透那会儿特别兴奋恨不得所有服务全穿出去后来慢慢发现暴露得越多、维护成本越高、风险也越大最后又一个个收回来只留 HA 的网页端口。另一个体会是稳定比花哨重要得多。你的家人不会关心你的自动化有多少条他们只关心灯按一下会不会亮。所以穿透方案选最容易长期维护的那个配置写完就丢在那别天天改定期检查一下备份和证书有效期剩下的时间拿去享受生活。至于那些拿 STM32、ESP32 自己焊传感器节点的玩法可以慢慢折腾但请务必先保证核心链路HA 本体加远程访问足够稳再去玩那些加分项这个优先级千万别搞反。