返回 · 2026-05-09T18:17:00+00:00
跨省 NAS 系统全栈实践:从本地存储到公网安全访问
本文介绍如何在家用 NAS(跨省、无公网 IP)场景下,通过腾讯云轻量应用服务器作为 frp 中继,配合 Nginx、免费 SSL 与国内备案,实现稳定、安全的远程访问。全文不涉及具体 IP、域名或密钥,仅提供可复用的架构与配置思路。
一、整体架构
flowchart LR
subgraph local [本地]
NAS[NAS 存储]
OpenWrt[OpenWrt frpc]
UPS[UPS]
end
subgraph cloud [腾讯云轻量]
frps[frps]
Nginx[Nginx+SSL]
end
NAS --> OpenWrt
OpenWrt -->|frp| frps
frps --> Nginx
Nginx --> Internet[互联网]
- 本地:NAS 提供存储与内网服务;外置 OpenWrt 软路由 单独运行 frpc,与 NAS 解耦;UPS 负责断电保护。
- 公网:腾讯云轻量应用服务器部署 frps(建议 200M 对等带宽),并部署 Nginx 做域名反向代理与 HTTPS。
- 对外:域名经 Nginx 路由到 frp 映射的本地服务,使用免费 SSL(文件验证批量部署)、国内 ICP 备案,并做好防火墙与关闭外网 SSH。
二、部分一:本地 NAS 硬件与软件
2.1 硬件选型建议
| 组件 | 规格示例 | 说明 |
|---|---|---|
| CPU | Intel i3-10100 | 低功耗、性能够用 |
| 系统/缓存盘 | 128GB SSD | 系统与热数据/缓存 |
| 数据盘 | 14TB HDD | 大容量存储 |
| 外置设备 | OpenWrt 软路由 | 独立运行 frpc,与 NAS 解耦 |
| 供电保护 | UPS | 断电保护与数据保险 |
- 将 frpc 放在 OpenWrt 上可统一出口、便于维护,NAS 只负责存储与内网服务。
- NAS 与 OpenWrt 建议均接入 UPS,断电时实现有序关机。
2.2 软件与 frpc 部署要点
- NAS 系统:可根据需求选择 FnOS、TrueNAS、OpenMediaVault 等。
- frpc:部署在 OpenWrt 软路由 上,配置
server_addr为腾讯云 frps 的公网地址或域名,server_port为 frps 的bindPort(如 7000),auth.token与 frps 保持一致。 - 代理类型:建议使用 frp 的 http 或 https 类型代理,便于在服务器端用 Nginx 按域名路由,且只需开放 80/443。
2.3 UPS 配置
- UPS 通过 USB 与 NAS/主机连接,在系统内启用 UPS 支持(如 NUT、厂商驱动),设置断电后自动关机或休眠,避免突然断电导致数据损坏。
三、部分二:腾讯云轻量应用服务器与 frps
3.1 选购与系统选择
- 产品:腾讯云轻量应用服务器,用于部署 frps 与 Nginx。
- 带宽:建议选择锐驰服务器,可提供 200M 对等高带宽,保证跨省访问体验。
- 地域:若需国内备案并使用 80/443,请选择大陆地域,并与备案主体一致。
- 镜像:推荐 Ubuntu 22.04 LTS 或 Debian,便于安装 frp、Nginx 与 acme.sh。
!!!注意以下所有步骤只做实例参考,最好按照你目前可以安装的最高稳定版,以保障系统稳定运行!!!
3.2 安装 frps
以 Linux x86_64 为例(其他架构请到 frp releases 选择对应包):
# 下载并解压(版本号请替换为实际最新版)
wget https://github.com/fatedier/frp/releases/download/v0.52.0/frp_0.52.0_linux_amd64.tar.gz
tar -xzf frp_0.52.0_linux_amd64.tar.gz
sudo mv frp_0.52.0_linux_amd64 /opt/frp
3.3 frps 配置示例(frps.toml)
在 /opt/frp/frps.toml 中配置(请自行替换 token,勿使用示例值):
bindPort = 7000
auth.token = "请设置高强度随机 token,与 frpc 一致"
# 可选:仪表盘仅建议内网或按需放行
webServer.addr = "0.0.0.0"
webServer.port = 7500
bindPort:frpc 连接端口,需在腾讯云轻量「防火墙」中放行。auth.token:与 frpc 完全一致,防止未授权连接。- 7500 为仪表盘端口,不建议对公网开放。
3.4 使用 systemd 管理 frps
创建服务文件 /etc/systemd/system/frps.service:
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
执行:
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps
3.5 轻量应用服务器防火墙(安全组)端口
在腾讯云轻量控制台「防火墙」中建议仅开放:
| 端口 | 协议 | 用途 |
|---|---|---|
| 7000 | TCP | frp 服务端 |
| 80 | TCP | HTTP(Nginx) |
| 443 | TCP | HTTPS(Nginx) |
不要对公网开放 22(SSH)、7500(frps 仪表盘)等,SSH 关闭外网访问将在第三部分说明。
四、部分三:Nginx、SSL、备案与安全
4.1 Nginx 与 frp 的配合方式
- frpc 使用 type = http(或 https)时,会在 frps 所在机器上监听一个本地端口(如 8080),对应一个或多个自定义域名。
- Nginx 在该服务器上按 域名 做反向代理,将
Host为某域名的请求转发到 frp 映射的本地端口,从而实现「一个公网 IP、多域名」访问不同内网服务。
4.2 安装 Nginx
以 Ubuntu/Debian 为例:
sudo apt update
sudo apt install -y nginx
sudo systemctl enable nginx
4.3 为 ACME 文件验证预留 location(申请证书前必做)
在要申请证书的 server 中预留验证路径,便于 Let's Encrypt 等使用 HTTP-01 文件验证:
server {
listen 80;
server_name your-domain.com;
root /var/www/html;
location /.well-known/acme-challenge/ {
default_type "text/plain";
alias /var/www/acme-challenge/;
}
location / {
return 301 https://$host$request_uri;
}
}
申请证书前创建目录:
sudo mkdir -p /var/www/acme-challenge
sudo chown -R www-data:www-data /var/www/acme-challenge
4.4 使用 acme.sh 通过文件验证批量申请免费 SSL
以下为通用步骤,不涉及具体域名或邮箱(使用时请替换为自有信息):
# 安装 acme.sh(以 root 或 sudo 安装到 /root/.acme.sh)
curl https://get.acme.sh | sh
source ~/.bashrc # 或重新登录
# 使用 standalone 时需临时关闭占用 80 的 Nginx;更推荐 webroot 方式
# 使用 webroot 与上面 Nginx 的 alias 对应
export ACME_CHALLENGE_DIR=/var/www/acme-challenge
acme.sh --issue -d your-domain.com -w /var/www/acme-challenge
# 多域名/多子域可多次 -d
acme.sh --issue -d your-domain.com -d www.your-domain.com -d nas.your-domain.com -w /var/www/acme-challenge
证书签发后,可安装到指定目录供 Nginx 使用:
# 安装到 /etc/ssl/your-domain(目录需事先创建)
sudo mkdir -p /etc/ssl/your-domain
sudo ~/.acme.sh/acme.sh --install-cert -d your-domain.com \
--key-file /etc/ssl/your-domain/privkey.pem \
--fullchain-file /etc/ssl/your-domain/fullchain.pem \
--reloadcmd "systemctl reload nginx"
acme.sh 会自动添加续期任务,实现免费证书的自动续期。
4.5 Nginx 反向代理示例(HTTPS + frp 本地端口)
将 your-domain.com 替换为你的域名,8080 替换为 frpc 在 frps 上映射的本地端口(在 frpc 配置中指定):
server {
listen 80;
server_name your-domain.com;
location /.well-known/acme-challenge/ {
alias /var/www/acme-challenge/;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/ssl/your-domain/fullchain.pem;
ssl_certificate_key /etc/ssl/your-domain/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
若有多个服务(多域名或多子域),复制上述 server 块并修改 server_name、proxy_pass 端口及证书路径即可。
4.6 域名与国内 ICP 备案
- 域名解析到大陆服务器并对外提供 80/443 服务时,需完成国内 ICP 备案(通常由云厂商代备案)。
- 备案主体、服务器地域、域名实名信息需一致;建议在备案通过后再正式开放 80/443,避免核查异常。
- 具体流程与所需材料请以腾讯云备案文档为准。
4.7 防火墙与「关闭外网 SSH」
系统内防火墙(ufw)示例:
sudo ufw default deny incoming
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 7000/tcp
# 不 allow 22,或仅允许内网/管理 IP
sudo ufw enable
关闭外网 SSH 的推荐做法:
- 在腾讯云轻量应用服务器控制台的「防火墙」中,删除对 22 端口的公网入站规则;或
- 在系统防火墙中仅允许内网或指定管理 IP 访问 22。
这样公网无法直接 SSH 到服务器,可显著降低暴力破解风险。日常维护可改为:
- 使用腾讯云控制台提供的 网页终端 登录,或
- 先通过 VPN/跳板机进入内网,再 SSH 到轻量服务器。
4.8 安全清单(自检)
- [ ] 防火墙/安全组仅开放 80、443、frps 端口(如 7000),不开放 22、7500 等
- [ ] 已关闭外网 SSH,仅通过控制台或内网访问
- [ ] SSL 证书已配置且 acme.sh 自动续期正常
- [ ] 域名已完成 ICP 备案(若使用大陆服务器)
- [ ] frps 与 frpc 的 auth.token 一致且为强随机值,系统与 Nginx 使用强密码或密钥
五、小结
本教程从本地 NAS 与 OpenWrt frpc 出发,到腾讯云轻量应用服务器上的 frps、Nginx、免费 SSL(文件验证批量部署)、国内备案,再到防火墙与关闭外网 SSH,形成一套可复用的「跨省 NAS 公网安全访问」方案。所有配置均使用占位符(如域名、端口、token、证书路径),读者只需按自身环境替换即可,且不涉及任何隐私信息,可直接用于社区分享与二次整理。
如你有不同的 NAS 系统或网络环境,只需在 frpc 中调整代理类型与端口,并在 Nginx 中对应修改 proxy_pass 端口即可复用同一套架构。