跳转到内容

远程访问:别把 NAS 直接暴露到公网 ​

完成后,你能在外面访问家里的 NAS,而公网上没有任何人能直接碰到它的管理入口。

先说结论 ​

按推荐顺序:

  1. VPN。回家的路只留一条,NAS 上的所有服务都只在 VPN 内部可见。WireGuard 插件让路由器只需转发一个 UDP 端口,Tailscale 这类方案通常连端口都不用开。
  2. 反向代理加 HTTPS,只暴露具体的应用(Jellyfin、Immich 这类)。管理入口永远不放进去。
  3. 端口映射直接到服务。最后手段,要走下文的清单。

为什么不能直接映射 ​

OMV 的 wiki 在新手指南结尾写得很直白:按指南建好的共享权限是完全开放的,服务器不应该通过端口转发暴露到互联网,例如 80 或 443 端口。官方文档在 SSH 一章里对 WAN 访问也只给了应急建议:转发非 22 的端口、只用公钥、关闭密码登录、关闭 root 登录。

原因很简单:

  • Web 界面是 root 级别的管理入口,默认账号和默认密码是公开的。
  • SMB、NFS、rsync、FTP、TFTP、SNMP 都是为局域网设计的协议,FTP 和 TFTP 还是明文。
  • SSH 一上公网,就会被机器人持续扫描。
  • NAS 被攻破,丢的是数据、备份和进入内网的跳板,一次全丢。

把管理入口映射到公网,等于把管理员密码交给全网去猜

  • 影响范围:整台 NAS。攻破 Web 界面或 SSH,就能读写全部共享和备份,并把 NAS 当跳板进你的内网。
  • 前置条件:映射都在路由器上操作。动手前先记下路由器当前的端口映射表,并确认你会登录路由器删除映射。
  • 怎么回退:到路由器的端口映射(或「虚拟服务器」)页面删除对应条目,关掉 UPnP;然后在 NAS 上改密码,查 诊断 → 系统日志(Diagnostics → System Logs)里的 auth 日志,检查有没有陌生账号、计划任务和容器。

下面这些端口,不要映射到公网:

端口服务
80、443(或你改过的 Web 端口)OMV 管理界面
22SSH
139、445SMB
2049、111NFS
21FTP
873rsync 服务
69、161TFTP、SNMP
Docker、Portainer 等的管理端口,以及容器里的数据库和管理后台容器管理入口

做法一:VPN ​

连上 VPN 以后,手机和电脑就像在家里一样,用局域网地址访问 Web 界面、SMB 和 SSH,不需要给 NAS 开任何额外入口。

方案路由器上要做什么说明
WireGuard 插件转发一个 UDP 端口到 NAS(插件默认 51820/UDP)在 NAS 上建隧道和客户端,客户端扫二维码或导入配置。插件默认让客户端的所有流量走隧道(全隧道,可配置),见 WireGuard:自建 VPN 回家
Tailscale(容器)通常不用开端口靠 NAT 穿透组网,可以把整个内网通过子网路由共享出来,见 Tailscale 组网

前提和注意:

  • 路由器 WAN 口的地址如果是私网地址,或落在 100.64.0.0/10 里,说明你在运营商的 CG-NAT 后面,端口映射不生效,WireGuard 从外网连不进来。这种情况改用 Tailscale 这类方案。
  • 家宽的公网 IP 会变,需要动态域名(DDNS)来指向它。
  • 有公网 IPv6 时,NAS 的 IPv6 地址可能直接对外可达,OMV 的 Web 界面在启用 IPv6 时也会监听 IPv6 地址。防火墙要按 IPv6 单独检查,见 IPv6。

做法二:反向代理加 HTTPS ​

适合要让家人或朋友从外面访问 Jellyfin、Immich 这类应用。路由器只把 80 和 443 转发给一个反向代理容器(Nginx Proxy Manager、Caddy、Traefik),由它申请证书、按域名转发到具体应用。

  • OMV 自己默认占用 80 和 443,要先改端口让出来,见Web 界面安全,搭法见反向代理与 HTTPS。
  • 只代理应用,不代理 OMV 管理界面、SSH、Portainer 这类管理入口。
  • 每个应用自己要有强口令,能开 2FA 就开,并保持镜像更新,见更新与备份容器。
  • 代理挡在前面时,后端应用看到的来源 IP 是代理的 IP。依赖来源 IP 的功能(Fail2ban、日志、限速)要单独处理。

做法三:端口映射(最后手段) ​

确实要做时,逐条核对:

  1. 只映射一个具体应用的端口,不是 OMV、SSH 或 SMB。
  2. 这个应用自己必须有 HTTPS 和强登录(长口令加两步验证)。
  3. 外部端口换成非默认值只能减少扫描噪音,不是安全措施。
  4. 关掉路由器的 UPnP 和 NAT-PMP。否则 NAS 上某个应用可以自己在路由器上开洞,你却不知道。
  5. 把映射写进下面这样的清单,定期核对:
外部端口协议转发到用途最后检查日期
51820(示例)UDPNAS 的 IP:51820WireGuard填日期
  1. 想好撤销方式:在路由器上删掉这一行即可,不依赖 NAS 上的任何操作。
  2. 有独立的备份和离线副本。被勒索时,在线的副本一起被加密。

检查结果 ​

  1. 登录路由器,把端口映射表和 UPnP 映射列表导出或截图,逐行对照你的清单,没有不认识的条目。
  2. 关掉手机 Wi-Fi,用移动网络访问 http://<你的公网 IP> 和 https://<你的公网 IP>:OMV 的登录页应该打不开。公网 IP 可以在路由器的 WAN 状态页看到。
  3. 在 OMV 的 shell 里看哪些服务在监听所有地址(只读):
sh
# 在 OMV 的 shell 里,以 root 身份
ss -tulnp

监听在 0.0.0.0 或 [::] 的,是潜在的暴露面。是否真的暴露,取决于路由器和防火墙,见防火墙规则。

  1. 用 VPN 的话:断开 VPN,从外面应当访问不了 NAS;连上后,用局域网地址可以访问。

常见问题 ​

我没有公网 IP。 先确认是不是 CG-NAT。是的话,用 Tailscale 这类不依赖入站端口的方案;出站隧道类服务(例如 Cloudflare Tunnel)也能做到,本站不展开。

手机用流量连不上 WireGuard。 确认路由器转发的是 UDP,端口和插件里的一致,客户端配置里的 Endpoint 填的是你的公网地址或域名,并且没有被 CG-NAT 挡住。

家人想从外面访问共享文件。 不要把 SMB 放到公网。让他们连 VPN,或者用部署在反向代理后面、自带登录和 HTTPS 的网页类应用。

想从外面访问 OMV 的 Web 界面。 连上 VPN,用内网地址访问。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。