继上一篇 家庭流媒体解决方案 - Jellyfin:我🈶独特的使用方法 - zfsjlll 的自留地 折腾完流媒体后,我的 WinNAS 搬到了老家长期安置,由于网络环境以及运营商服务的变化。家宽从千兆变成了 300Mbps, 没有了动态的公网 IPv4,于是就需要重新设计远程访问方案。
(之前方案可看 Cloudflare CDN 开放端口 - zfsjlll 的自留地)
1. 需求场景与痛点剖析#
- 家庭 NAS 远程访问的典型困境:
- 动态公网 IP 的稳定性问题
- 运营商封锁 80/443 端口的尴尬
- HTTP 明文传输的安全隐患
模拟用户登录
请求URL:http://vulnerable-site.com/login
表单字段:username=admin&password=123456
Wireshark 抓包 Http 报文,导致隐私泄露
POST /login HTTP/1.1
Host: vulnerable-site.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
username=admin&password=123456
2. 技术方案全景图#
[用户浏览器] --HTTPS(443)--> [CDN节点] --HTTP(自定义端口)--> [反向代理服务器] --> [WinNAS服务]
- 关键技术组件说明:
- CDN 当然是选择赛博大善人 Cloudflare, 对个人站长非常友好,就是有一些技术门槛,都已经免费了,还要什么自行车(笑)
- 反向代理不使用常见的 Nginx/Caddy,最近 Lucky 在 NAS 圈特别火,可以实现:软硬路由公网神器,ipv6/ipv4 端口转发,反向代理,DDNS,WOL,ipv4 stun 内网穿透,cron,acme, 阿里云盘,ftp,webdav,filebrowser。功能完全够用,而且对小白及其友好,图形化界面操作,官网地址:Lucky
3. 实战部署步骤#
3.1 基础网络架构搭建
具体的部署教程可以上网搜索,这里只讲干货,全是进阶玩法。
- 动态域名解析方案(Lucky 工具在 Windows 服务的静默部署)
- 反向代理配置(依旧是 Lucky)
- 除了 DDNS 和反向代理模块,还有端口转发,远程网络唤醒,网络存储(WebDav,FTP 等协议的服务器实现,我已经部署了 Alist, 暂不需要)等超多实用功能可以探索,(类似于软路由 ALL IN ONE?我没部署过软路由,如有错误请指正)
3.2 CDN 层安全改造
- 端口隐身术:通过 CDN 的「页面规则」实现 URL 重定向(以 Cloudflare 为例):
- 创建规则实现:
*.yourdomain.com/*
→ 转发到http://nas.yourdomain.com:yourport$1
- 创建规则实现:


自定义筛选表达式,第一条规则选择通配符匹配所有子域名,有个性化需求再添加规则,如图中 jellyfin 服务不进行重定向,以避免 "CDN 降速"
最后给需要重定向的域名开启 "小云朵" 即可
- 开启 Always Use HTTPS 强制跳转
- SSL 证书自动化:
- 使用 acme 申请 Let's Encrypt 通配符证书
- 证书自动更新
- 如果申请证书失败,可能需要配置代理
3.3 攻击面收缩策略
-
IP 白名单强化:通过 CDN 防火墙限制源站访问(仅允许 CDN 节点 IP)
# Windows防火墙入站规则(管理员PowerShell) New-NetFirewallRule -DisplayName "Allow_CDN_IPs" -Direction Inbound -LocalPort 8765 -Protocol TCP -Action Allow -RemoteAddress 173.245.48.0/20,103.21.244.0/22
-
协议安全加固:
- 禁用 TLS 1.0/1.1
在 Lucky 中配置 TLS 最低版本限制为 TLS1.2 即可 - 配置 HSTS 头
- 禁用 TLS 1.0/1.1
反向代理模块添加响应头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
建议详细了解之后再配置 preload 选项,需要全部子域名都符合 HTTPS,而且一旦发现有子域名不符合 HTTPS(包含非公开访问的内部子域名),删除过程是非常缓慢而痛苦的。
4. 读者互动环节#
- 开放讨论:
"如果你有物理服务器资源,是否会改用 WireGuard 建立 VPN 隧道?为什么?"
5. 技术细节增强建议#
- 流量伪装技巧:在 CDN 配置中添加伪装的
/health-check
路径,返回虚假的 404 页面迷惑扫描器 - 应对 fofa 等扫描器的威胁:配置反向代理默认规则为 “关闭连接”,详细可参考:在 Windows 下使用 lucky 配置反向代理以实现较为安全的 WEB 访问 - 哔哩哔哩
