内容提要
作者通过ZeroTier组网、DNS域名解析、iStore Nginx反向代理及certd证书管理,构建了一套家庭服务访问方案。各服务通过域名映射至内网IP,Nginx按域名分发至后端端口,实现无警告、无拦截的安全访问。文中详述配置步骤、踩坑记录及优化体验,替代了原有HeoSafe拦截方案。
延伸解读
内网穿透的安全边界
该方案利用ZeroTier组网,将域名解析到内网IP,而非公网IP。这意味着只有加入ZeroTier网络的设备才能访问这些服务,公网无法直接访问,从而形成一道天然的安全屏障。相比传统的端口映射或公网暴露,这种方式显著降低了被扫描和攻击的风险,适合对安全性有较高要求的家庭或小型办公场景。
iStore Nginx 的配置陷阱
iStoreOS 安装的 Nginx 使用 UCI 配置体系,与传统手动安装的 Nginx 不同。测试配置需使用 `nginx -t -c /etc/nginx/uci.conf`,reload 同理。此外,UCI 中的 `uci_manage_ssl` 选项默认会生成自签名证书,覆盖用户部署的正式证书,必须删除该选项。这些细节若不注意,会导致证书管理失效或配置报错。
证书自动续期的落地
certd 负责自动申请和续期通配符证书,并通过 SSH 部署到宿主机。但 Nginx 不会自动加载新证书,需要手动 reload。同时,证书私钥权限需设为 600 以确保安全。该流程实现了证书的自动化管理,减少了手动维护成本,但需注意 reload 操作和权限设置,避免证书更新后服务未生效。
Q&A
如何通过ZeroTier实现内网穿透访问家庭服务?
在软路由和客户端设备上安装ZeroTier,加入同一个网络,设备之间就像在同一个局域网内。软路由会获得一个内网IP(如10.225.17.77),客户端可以直接访问该IP。
为什么使用ZeroTier内网IP解析域名而不是公网IP?
使用ZeroTier内网IP解析域名,只有加入ZeroTier网络的设备才能访问,公网无法访问,这增加了安全性,避免了服务暴露在公网。
iStoreOS上如何配置Nginx反向代理?
通过iStore应用商店安装Nginx,它会自动接管80/443端口。将配置文件放在/etc/nginx/conf.d/目录下,每个域名对应一个后端端口,配置server块,设置ssl证书和proxy_pass。
使用certd管理证书时,如何避免Nginx自动生成自签名证书覆盖正式证书?
需要删除Nginx UCI配置中的uci_manage_ssl选项,执行`uci delete nginx._lan.uci_manage_ssl`和`uci commit nginx`,这样Nginx reload时就不会自动生成自签名证书。
Nginx配置修改后如何正确重载?
使用命令`nginx -t -c /etc/nginx/uci.conf && nginx -s reload -c /etc/nginx/uci.conf`,必须指定-c参数,否则会报错。不要使用/etc/init.d/nginx reload,可能触发SSL自动生成逻辑。
Home Assistant反向代理时需要注意什么?
需要支持WebSocket,在Nginx配置中添加Upgrade和Connection头。另外,不要给Home Assistant的vhost添加X-Forwarded-*头,否则会导致400错误。
整个内网穿透访问方案的链路是怎样的?
手机/电脑/iPad通过ZeroTier组网连接到R5S软路由(10.225.17.77),然后通过DNS域名解析,Nginx反向代理根据域名分发到各服务后端端口,实现无警告、无拦截的安全访问。