进阶技巧

飞牛NAS外网访问终极指南:DDNS+反向代理+Nginx Proxy Manager完整方案

2026-07-30 3 admin

为什么需要外网访问?

飞牛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 反向代理

  1. 打开 NPM 管理界面 http://NAS_IP:81
  2. 点击 "Proxy Hosts" → "Add Proxy Host"
  3. 配置各服务的反向代理:

以 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

安全加固建议

外网访问是把双刃剑,安全措施必须到位:

  1. 强密码:NAS 管理员密码至少 12 位,包含大小写字母、数字和符号
  2. 两步验证:飞牛NAS支持 TOTP 两步验证,务必开启
  3. IP 白名单:在 NPM 中可以设置 Access List,只允许国内 IP 访问管理后台
  4. 定期更新:保持 fnOS 和 Docker 镜像为最新版本
  5. SSH 密钥登录:禁用密码登录,使用 SSH Key
  6. Fail2ban:部署 fail2ban 防止暴力破解
  7. 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,任何自托管服务都可以用同样方式对外开放。投入一个域名的成本(每年几十元),换取全家所有服务的便捷访问和安全保障,性价比极高。

如果你在配置过程中遇到问题,欢迎在评论区留言交流!