惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
P
Proofpoint News Feed
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
美团技术团队
D
Docker
博客园 - Franky
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

张洪Heo

OpenClaw 接管你的油猴脚本:让 AI 直接读改网页脚本,不用再复制粘贴 为 iPhone Duo 做设计:苹果官方设计原则全解读 看到了淘宝闪购的AI评论,引发了我的思考 如何在网页插入 livephoto ?实况照片 PVT 在线生成、动态JPG生成工具与嵌入工具 MacBook不进入休眠全新邪修:十几块钱的绿联HDMI欺骗器 OpenClaw 2.0:稳定性提升不少,我还迁移了我的记忆系统 将你的 HeoID 卡片添加到 Apple 钱包 智谱codingplan耐用程度分析:只用 GLM-5.3-Flash 够不够用? BrowserSkill上手:让AI接入浏览器,还能录制动作教它学习 我与我的 OpenClaw 凉透了焦虑和解了 ntfsmac 上手:不关 SIP 让 Mac 读写 NTFS 和 ext 硬盘 个人小项目vibecoding方案推荐:opencode spark 1.2 和 zcode 分享一下博客的全新聚合搜索 给DeepSeek-V4-Flash借一双眼睛:ZCode视觉子Agent方案 Mole Mac 上手:界面精美,优秀好用的Mac清理工具 Agentation 油猴脚本:让AI指哪改哪,配合 Claude Code 的开发神器 洪绘压图网页版上线,这下可以随时随地在线压缩图片了 分享一下我最近制作的一些AI音乐,以及解决唱歌错字和音质的一些小技巧 洪绘敲木鱼支持“竹知了”模式了,可以自定义音效的电子竹知了App 洪绘烧纸:一个网页在线电子烧纸,电子祭祀工具 WebMCP适配教程:为浏览器AI预备好,让网页向 AI 提供工具,本博客已支持 报错回顾:给OpenClaw添加错误行为记忆机制,让自己写的skill不断成长 腾讯miora上手:设计师又又又失业的一集? Mac 合盖不休眠:用 pmset 彻底禁止系统睡眠 如何用 OpenClaw 配置早报晚报,科技新闻信源、微博热搜获取 给 SearXNG 接入豆包搜索,解决 OpenClaw 信源难题 OpenClaw记忆系统升级:从memory-core到memory-lancedb-pro的迁移与配置 screenpipe:开源本地的 AI 记忆引擎,让电脑更懂你 混元hy3模型上手:腾讯送了云函数个人版6个月,怎么才能用上 给OpenClaw加上rm删除保护:防止AI误删你的整个电脑
软路由内网穿透访问方案全链路教程:从 ZeroTier 到 Nginx 再...
张洪Heo · 2026-08-28 · via 张洪Heo

软路由内网穿透访问方案全链路教程:从 ZeroTier 到 Nginx 再到 certd 证书管理摘要图

这篇文章介绍了软路由内网访问的完整配置方案,覆盖了从ZeroTier 组网DNSPod 域名解析iStore Nginx 反向代理certd 通配符证书管理的全链路。文章记录了家庭服务(Home Assistant、SearXNG、Alist、Emby 等)如何通过一个统一域名实现 HTTPS 访问,重点分享了证书部署踩坑经验,包括 iStore Nginx 的 SSL 自动生成覆盖证书问题、配置文件路径要求、私钥权限设置,以及 Home Assistant WebSocket 转发头的注意事项。

家里跑了好几个服务,Home Assistant、SearXNG、Alist、Emby,还有签到之类的杂七杂八。每个服务一个端口,手机上记端口记到崩溃。

以前我用 HeoSafe 拦截方案做访问控制,检测到流量直接弹身份认证。能用,但本质上还是请求到了之后再拦,配置维护比较重,算不上好的解决方式。

后来想通了,干脆把链路整清楚:ZeroTier 组网 + DNS 域名解析 + iStore Nginx 反代 + certd 证书管理,一套走通。

硬件和系统

R5S 软路由刷的 iStoreOS,基于 OpenWrt。Nginx 通过 iStore 应用商店直接装,不是 Docker。这个很重要,因为 iStore 装的 Nginx 有自己一套 UCI 配置,和传统手动装的不一样。

装完之后 Nginx 自动接管 80/443,uHTTPd 原来的 LuCI 也被接管了,不用额外折腾。

nginx安装

ZeroTier 解决的是跨网络访问问题。装完客户端加入同一个网络,设备之间就像在同一个局域网里。

R5S 上 ZeroTier 分配的内网 IP 是 10.225.17.77。手机、电脑、iPad 加入同一个网络后都能直接访问这个 IP。

但 IP 记不住,所以需要 DNS。

DNS 解析

域名 zhheo.com 托管在腾讯云 DNSPod,直接在 DNSPod 加 A 记录:

1
2
3
4
5
6
s.zhheo.com        → 10.225.17.77
heohass.zhheo.com → 10.225.17.77
heodisk.zhheo.com → 10.225.17.77
emby.zhheo.com → 10.225.17.77
qiandao.zhheo.com → 10.225.17.77
certd.zhheo.com → 10.225.17.77

这里的 IP 是 ZeroTier 内网 IP,不是公网 IP。所以这些域名只有加入 ZeroTier 网络的设备才能访问,公网打不通。这反而是个安全优势。

Nginx 反向代理

Nginx 装好之后,配一个反代配置文件就行。我放在 /etc/nginx/conf.d/zhheo-services.conf,iStore 的 Nginx 会自动加载这个目录下的 .conf 文件。

每个域名对应一个后端端口:

1
2
3
4
5
6
s.zhheo.com        → 127.0.0.1:19080   # SearXNG
heohass.zhheo.com → 127.0.0.1:8123 # Home Assistant
heodisk.zhheo.com → 127.0.0.1:5244 # Alist
emby.zhheo.com → 127.0.0.1:18080 # Emby
qiandao.zhheo.com → 127.0.0.1:8923 # 签到
certd.zhheo.com → 127.0.0.1:12281 # certd

配置模板大概是这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443 ssl;
server_name heohass.zhheo.com;
ssl_certificate /etc/nginx/conf.d/wildcard.zhheo.com.crt;
ssl_certificate_key /etc/nginx/conf.d/wildcard.zhheo.com.key;

location / {
proxy_pass http://127.0.0.1:8123;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
}
}

Home Assistant 需要 WebSocket 支持,所以加了 UpgradeConnection 头。其他服务一般不需要,但加上也没坏处。

改完配置后:

1
nginx -t -c /etc/nginx/uci.conf && nginx -s reload -c /etc/nginx/uci.conf

iStore 的 Nginx 必须用 -c /etc/nginx/uci.conf,直接 nginx -t 会报找不到文件。

certd 证书管理

裸 HTTP 能用,但手机浏览器会弹不安全提示。所以用 certd 管理通配符证书。

certd 也是 Docker 部署在 R5S 上的,自动申请和续期证书。部署方式选的是「主机-部署证书到 SSH 主机」,直接把证书文件写到 R5S 宿主机:

添加步骤

1
2
/etc/nginx/conf.d/wildcard.zhheo.com.crt
/etc/nginx/conf.d/wildcard.zhheo.com.key

部署完成后 Nginx 不会自动读取新证书,必须手动 reload:

1
nginx -t -c /etc/nginx/uci.conf && nginx -s reload -c /etc/nginx/uci.conf

这里踩了个坑:iStore 的 Nginx UCI 配置里有个选项叫 uci_manage_ssl,默认值是 self-signed。不关掉它,Nginx reload 时会自动生成自签名证书,覆盖掉你刚部署的通配符证书。解决方法:

1
2
uci delete nginx._lan.uci_manage_ssl
uci commit nginx

删掉这个选项之后,Nginx 就不会自动搞证书了。

另外私钥权限设成 600

1
chmod 600 /etc/nginx/conf.d/wildcard.zhheo.com.key

完整链路

1
2
3
4
5
6
7
手机/电脑/iPad
↓ ZeroTier 组网
R5S 软路由(10.225.17.77)
↓ DNS 域名解析
Nginx 反向代理(80/443)
↓ 按域名分发
各服务后端端口

体验上就是:加入 ZeroTier 网络后,手机浏览器直接输入 https://heohass.zhheo.com,无警告、无拦截,直接到 Home Assistant。

比之前 HeoSafe 的方案清爽多了。

踩坑记录

  1. iStore Nginx 的 nginx -t 要加 -c /etc/nginx/uci.conf,否则直接报错。
  2. uci_manage_ssl='self-signed' 会覆盖证书文件,部署正式证书前必须删掉。
  3. Nginx 不会自动重新读取证书,部署后必须 reload。
  4. Home Assistant 的 X-Forwarded-* 头会导致 400,其他服务的转发头不要随便加到 HA 的 vhost 上。
  5. DNSPod 刷新有延迟,刚改完记录可能要等几分钟才能查到。
  6. Nginx reload 要用 nginx -s reload -c /etc/nginx/uci.conf,用 /etc/init.d/nginx reload 可能触发 iStore 的 SSL 自动生成逻辑。

相关地址

头像背景Guli形象

张洪Heo

分享设计与科技生活

本文使用AI辅助创作,采用 CC BY-NC-ND 4.0 协议,转载请注明出处。