系统实践

家庭 NAS 远程访问:从 FRP 旧方案到更安全的选择

这篇文章从 2017 年的群晖 FRP 实践出发,重新梳理 2026 年家庭 NAS 远程访问的选择、安全边界和 FRP 配置思路。

· 约 6 分钟阅读 · 更新于 2026年7月16日 · 近 30 天 10 次浏览

原文章使用的 FRP 内网穿透示意封面

本文最初发布于 2017 年,记录了我用 FRP 访问群晖 DS416play 的过程。旧文累计超过 11 万次阅读。2026 年重写时,我保留了真实实践和问题判断,但不再照搬 FRP 0.12、INI 配置、裸露管理端口和 nohup 命令。

先决定是否真的需要暴露 NAS

远程访问 NAS 的第一目标不应该是“从公网打开管理界面”,而应该是用尽可能小的暴露面完成具体任务。

可以先按这个顺序考虑:

  1. 只给自己的设备访问:优先考虑组网型方案,让设备像在同一局域网中通信。
  2. 需要临时分享文件:优先使用带有效期、权限和审计能力的分享机制。
  3. 必须发布某个 Web 服务:使用 HTTPS、独立域名、强认证和反向代理,不直接暴露 DSM 管理端口。
  4. 确实需要自建中转:再考虑 FRP,并接受 VPS 带宽、流量、安全维护和故障处理成本。

2017 年方案为什么不应原样复用

旧文章使用 FRP 0.12,通过公网服务器中转 NAS 的 22、80 和 5000 端口,再用 Nginx 隐藏 8080。这个思路在当时解决了无公网 IP 的现实问题,但现在有几个明显风险:

  • FRP 已从旧 INI 走向 TOML、YAML 或 JSON,INI 虽仍兼容但不再推荐。
  • NAS 管理界面和 SSH 不应该默认暴露到公网。
  • Token、Dashboard 密码不能直接写进公开示例或仓库。
  • nohup 只能让进程留在后台,不能提供可靠的重启、日志和故障恢复。
  • 中转视频和大文件会消耗 VPS 的上下行带宽与流量。

仍然选择 FRP 时的最小安全框架

当前 FRP 服务端配置使用 frps.toml。下面只展示结构,不提供可直接复制到生产的域名、密钥或管理端口:

# frps.toml
bindPort = 7000
auth.tokenSource.type = "file"
auth.tokenSource.file.path = "/etc/frp/server_token"

客户端使用相同 Token 文件,并只转发真正需要的内部服务:

# frpc.toml
serverAddr = "你的公网服务器"
serverPort = 7000
auth.tokenSource.type = "file"
auth.tokenSource.file.path = "/etc/frp/client_token"

[[proxies]]
name = "nas-web"
type = "tcp"
localIP = "192.168.1.10"
localPort = 443
remotePort = 你的受控端口

Token 文件权限至少应限制为运行 FRP 的用户可读:

sudo chmod 600 /etc/frp/server_token
sudo chmod 600 /etc/frp/client_token

FRP 官方文档目前支持 Token 和 OIDC;从 0.64.0 起可以从文件读取 Token,避免把凭据硬编码在配置中。

后台运行要交给服务管理器

Linux 服务器应使用 systemd 或其他服务管理器,而不是 nohup。它们负责开机启动、失败重启、依赖顺序和日志。

[Unit]
Description=frp server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=frp
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=on-failure
RestartSec=5s
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

启用前先验证配置和文件路径,再执行:

sudo systemctl daemon-reload
sudo systemctl enable --now frps
sudo systemctl status frps
sudo journalctl -u frps -n 100 --no-pager

群晖 DSM 的启动任务应通过“控制面板 → 任务计划”管理,但不要再把程序放入 DSM 的系统默认目录。系统升级可能覆盖这些路径;更稳妥的做法是使用独立目录、普通运行用户和明确日志。

反向代理不是安全边界

用 Nginx 把 域名:8080 变成标准的 443 地址,只是改善入口,并不会自动让服务安全。至少还要做到:

  • 全程 HTTPS,证书自动续期。
  • Dashboard 仅绑定本机或管理网络。
  • 防火墙只开放必要端口。
  • NAS 管理账号启用多因素认证,禁用弱密码和默认账号。
  • 对公网服务设置访问控制、速率限制和日志审计。
  • 定期升级 FRP、反向代理和 NAS 系统。

我的结论

2017 年我选择 FRP,是因为它第一次配置就成功,也确实解决了外网访问群晖的问题。今天重新看这套方案,FRP 依然有价值,但它不应该成为“把整个家庭网络搬到公网”的快捷方式。

先缩小需求,再选择工具;先建立安全边界,再追求访问方便。这比隐藏一个端口更重要。

参考:FRP 官方的安装说明认证文档