代码学习极客

返回 · 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 的 httphttps 类型代理,便于在服务器端用 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_nameproxy_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 端口即可复用同一套架构。