飞牛NAS外网访问终极指南:DDNS+反向代理+Nginx Proxy Manager完整方案
为什么需要外网访问?
飞牛NAS作为家庭数据中心,最大的价值之一就是随时随地的访问能力。想象一下:你在公司突然需要一份合同扫描件,出差途中想翻看宝宝的照片,或者帮家人远程解决电脑问题——如果NAS只能在家里的局域网使用,这些便利就无从谈起。
本文将从零开始,带你搭建飞牛NAS的外网访问完整方案,涵盖 DDNS、端口转发、SSL证书和反向代理,无论你是否有公网 IP,都能找到适合自己的方案。
方案对比
| 方案 | 速度 | 安全性 | 难度 | 成本 | 适用场景 |
|---|---|---|---|---|---|
| 公网IP + DDNS + 端口转发 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | 域名费 | 有公网IPv4/6 |
| 公网IP + DDNS + 反向代理 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 域名费 | 多服务统一入口 |
| frp/ZeroTier 内网穿透 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 云服务器费 | 无公网IP |
| Tailscale 组网 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ | 免费 | 个人设备间互访 |
| Cloudflare Tunnel | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | 域名费 | 不想暴露端口 |
推荐优先尝试获取公网 IP;实在没有再考虑内网穿透方案。本文重点讲解公网IP + DDNS + Nginx Proxy Manager 反向代理这一最优方案。
前置条件检查
1. 确认是否有公网 IP
登录飞牛NAS,打开终端或SSH连接,执行:
# 查看 NAS 自身获取的 IP
ifconfig | grep inet
# 查看公网 IP
curl -s ip.sb
如果 curl ip.sb 返回的 IP 和路由器 WAN 口 IP 一致,说明你有公网 IP。通常电信和联通宽带有较大概率分配到公网 IPv4,移动宽带以 IPv6 为主。
2. 准备域名
推荐在以下平台购买域名(价格从几元到几十元不等): - 阿里云(万网) - 腾讯云(DNSPod) - Cloudflare(提供免费的 CDN 和 SSL,强烈推荐)
💡 建议:将域名 DNS 托管到 Cloudflare,本文将基于 Cloudflare 进行配置。
方案一:Cloudflare DDNS + Nginx Proxy Manager(推荐)
这是目前最优的外网访问方案:Cloudflare 提供免费的 CDN 加速和 SSL 证书,Nginx Proxy Manager(简称 NPM)提供可视化的反向代理管理。
第一步:在飞牛NAS上部署 Nginx Proxy Manager
NPM 通过 Docker 部署,新建 /vol1/docker/npm/ 目录,创建 docker-compose.yml:
version: "3.8"
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "81:81" # 管理界面
volumes:
- /vol1/docker/npm/data:/data
- /vol1/docker/npm/letsencrypt:/etc/letsencrypt
restart: unless-stopped
启动:
cd /vol1/docker/npm
docker compose up -d
访问 http://NAS_IP:81,默认账号 [email protected],密码 changeme。首次登录后务必修改邮箱和密码。
第二步:部署 Cloudflare DDNS 动态解析
家庭宽带的公网IP通常是动态变化的(每次拨号都可能改变)。我们需要一个 DDNS 服务来自动更新域名解析记录。
在 /vol1/docker/cloudflare-ddns/ 下创建 docker-compose.yml:
version: "3.8"
services:
cloudflare-ddns:
image: oznu/cloudflare-ddns:latest
container_name: cloudflare-ddns
environment:
- API_KEY=你的Cloudflare_Global_API_Key
- ZONE=你的域名 (如 fnzmw.cn)
- SUBDOMAIN=nas # 子域名,如 nas.fnzmw.cn
- PROXIED=true # 使用Cloudflare CDN代理
restart: unless-stopped
🔑 获取 API Key:登录 Cloudflare → 右上角头像 → "My Profile" → "API Tokens" → 查看 "Global API Key"
启动后,服务会每 5 分钟检查一次公网 IP 并自动更新 DNS 记录。你可以通过日志确认是否正常工作:
docker logs cloudflare-ddns
第三步:配置路由器端口转发
登录你的路由器管理界面,添加端口转发规则:
| 服务 | 外部端口 | 内部IP | 内部端口 | 协议 |
|---|---|---|---|---|
| HTTP | 80 | NAS_IP | 80 | TCP |
| HTTPS | 443 | NAS_IP | 443 | TCP |
⚠️ 如果你的 ISP 封锁了 80/443 端口(常见于家庭宽带),可以使用其他端口如 8080/8443,然后在 Cloudflare 的 Origin Rules 中配置端口重写。
第四步:配置 NPM 反向代理
- 打开 NPM 管理界面
http://NAS_IP:81 - 点击 "Proxy Hosts" → "Add Proxy Host"
- 配置各服务的反向代理:
以 Immich 为例:
| 字段 | 值 |
|---|---|
| Domain Names | photo.你的域名.com |
| Scheme | http |
| Forward Hostname/IP | NAS内网IP |
| Forward Port | 2283 |
| Cache Assets | ✅ |
| Block Common Exploits | ✅ |
| Websockets Support | ✅ |
切换到 SSL 标签页,选择 "Request a new SSL Certificate"(Let's Encrypt),填写你的邮箱,勾选 "Force SSL" 和 "HTTP/2 Support",点击 Save。
如果使用 Cloudflare,也可以在 Cloudflare 的 SSL/TLS 设置中开启 "Full (strict)" 模式,并在 Origin Server 页面生成 15 年有效期的源服务器证书,上传到 NPM 使用。
第五步:验证
- 在手机 4G/5G 网络下访问
https://photo.你的域名.com - 确认能够正常打开并有 SSL 小锁图标
- 检查 Cloudflare 控制面板的 DNS 记录是否已自动更新
方案二:无公网 IP 的替代方案
如果没有公网 IP,以下方案也能实现外网访问:
Tailscale(最简单)
飞牛NAS的 Docker 环境可以直接运行 Tailscale:
docker run -d \
--name tailscale \
-v /var/lib:/var/lib \
-v /dev/net/tun:/dev/net/tun \
--network host \
--cap-add=NET_ADMIN \
--cap-add=NET_RAW \
tailscale/tailscale
然后在任何安装了 Tailscale 的设备上都可以通过虚拟 IP 直接访问 NAS。
ZeroTier + 国内 Moon 服务器
如果你在国内使用,ZeroTier 默认的根服务器在国外延迟较高。建议搭建国内的 Moon 中继服务器降低延迟。飞牛NAS上部署 ZeroTier:
docker run -d \
--name zerotier \
--device=/dev/net/tun \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
-v /vol1/docker/zerotier:/var/lib/zerotier-one \
zerotier/zerotier:latest
加入你的网络:
docker exec zerotier zerotier-cli join 你的网络ID
安全加固建议
外网访问是把双刃剑,安全措施必须到位:
- 强密码:NAS 管理员密码至少 12 位,包含大小写字母、数字和符号
- 两步验证:飞牛NAS支持 TOTP 两步验证,务必开启
- IP 白名单:在 NPM 中可以设置 Access List,只允许国内 IP 访问管理后台
- 定期更新:保持 fnOS 和 Docker 镜像为最新版本
- SSH 密钥登录:禁用密码登录,使用 SSH Key
- Fail2ban:部署 fail2ban 防止暴力破解
- WAF 规则:Cloudflare 提供免费的 WAF 规则,可以拦截恶意请求
# 在飞牛NAS上部署 fail2ban(可选)
docker run -d \
--name fail2ban \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=NET_RAW \
-v /var/log:/var/log:ro \
crazymax/fail2ban:latest
总结
通过 Cloudflare DDNS + Nginx Proxy Manager + 反向代理的组合,飞牛NAS获得了: - ✅ 随时随地通过域名安全访问 - ✅ 所有服务一个端口(443),无需记端口号 - ✅ 免费的 SSL 证书,全站 HTTPS - ✅ Cloudflare CDN 加速和 DDoS 防护 - ✅ 可视化管理,告别手写 nginx 配置
这套方案不仅适用于飞牛NAS,任何自托管服务都可以用同样方式对外开放。投入一个域名的成本(每年几十元),换取全家所有服务的便捷访问和安全保障,性价比极高。
如果你在配置过程中遇到问题,欢迎在评论区留言交流!