外观
远程访问:别把 NAS 直接暴露到公网
完成后,你能在外面访问家里的 NAS,而公网上没有任何人能直接碰到它的管理入口。
先说结论
按推荐顺序:
- VPN。回家的路只留一条,NAS 上的所有服务都只在 VPN 内部可见。WireGuard 插件让路由器只需转发一个 UDP 端口,Tailscale 这类方案通常连端口都不用开。
- 反向代理加 HTTPS,只暴露具体的应用(Jellyfin、Immich 这类)。管理入口永远不放进去。
- 端口映射直接到服务。最后手段,要走下文的清单。
为什么不能直接映射
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 管理界面 |
| 22 | SSH |
| 139、445 | SMB |
| 2049、111 | NFS |
| 21 | FTP |
| 873 | rsync 服务 |
| 69、161 | TFTP、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、日志、限速)要单独处理。
做法三:端口映射(最后手段)
确实要做时,逐条核对:
- 只映射一个具体应用的端口,不是 OMV、SSH 或 SMB。
- 这个应用自己必须有 HTTPS 和强登录(长口令加两步验证)。
- 外部端口换成非默认值只能减少扫描噪音,不是安全措施。
- 关掉路由器的 UPnP 和 NAT-PMP。否则 NAS 上某个应用可以自己在路由器上开洞,你却不知道。
- 把映射写进下面这样的清单,定期核对:
| 外部端口 | 协议 | 转发到 | 用途 | 最后检查日期 |
|---|---|---|---|---|
| 51820(示例) | UDP | NAS 的 IP:51820 | WireGuard | 填日期 |
- 想好撤销方式:在路由器上删掉这一行即可,不依赖 NAS 上的任何操作。
- 有独立的备份和离线副本。被勒索时,在线的副本一起被加密。
检查结果
- 登录路由器,把端口映射表和 UPnP 映射列表导出或截图,逐行对照你的清单,没有不认识的条目。
- 关掉手机 Wi-Fi,用移动网络访问
http://<你的公网 IP>和https://<你的公网 IP>:OMV 的登录页应该打不开。公网 IP 可以在路由器的 WAN 状态页看到。 - 在 OMV 的 shell 里看哪些服务在监听所有地址(只读):
sh
# 在 OMV 的 shell 里,以 root 身份
ss -tulnp监听在 0.0.0.0 或 [::] 的,是潜在的暴露面。是否真的暴露,取决于路由器和防火墙,见防火墙规则。
- 用 VPN 的话:断开 VPN,从外面应当访问不了 NAS;连上后,用局域网地址可以访问。
常见问题
我没有公网 IP。 先确认是不是 CG-NAT。是的话,用 Tailscale 这类不依赖入站端口的方案;出站隧道类服务(例如 Cloudflare Tunnel)也能做到,本站不展开。
手机用流量连不上 WireGuard。 确认路由器转发的是 UDP,端口和插件里的一致,客户端配置里的 Endpoint 填的是你的公网地址或域名,并且没有被 CG-NAT 挡住。
家人想从外面访问共享文件。 不要把 SMB 放到公网。让他们连 VPN,或者用部署在反向代理后面、自带登录和 HTTPS 的网页类应用。
想从外面访问 OMV 的 Web 界面。 连上 VPN,用内网地址访问。
参考资料
- OMV 文档:SSH 中的 Remote WAN access。
- omv-extras wiki:新手指南 的 Final Installation Notes;WireGuard;Docker in OMV 8 中 Nginx Proxy Manager 的端口说明。