进阶技巧

飞牛NAS外网访问终极方案:DDNS+反向代理+SSL全攻略

2026-07-30 2 admin

飞牛NAS外网访问终极方案:DDNS+反向代理+SSL全攻略

前言

飞牛NAS买回家,存好了数据、搭好了Docker服务,但只能在局域网里用?出门在外想看个电影、查个文件还得跑回家——这简直是NAS最大的遗憾。今天这篇文章,带你从零搭建飞牛NAS的外网访问方案,包括DDNS动态域名解析、反向代理统一入口和SSL证书自动续期,让你随时随地安全访问家里的NAS。

方案概述

完整的外网访问架构:

外网设备 → 域名(DDNS) → 家庭公网IP → 路由器端口转发 → Nginx Proxy Manager → 飞牛NAS各服务
                                                          ↓
                                                  自动SSL证书(Let's Encrypt)

整个方案需要三个核心组件: 1. DDNS:动态域名解析,把会变的公网IP绑定到一个固定域名 2. 反向代理:统一管理所有服务的访问入口,一个端口对外,按域名/路径分发 3. SSL证书:HTTPS加密通信,保护数据传输安全

第一步:确认公网IP

首先确认你的宽带是否有公网IPv4或IPv6地址。

检查方法:

登录飞牛NAS的SSH终端,执行:

# 查看当前公网IP
curl -s ifconfig.me
echo "---"
# 查看路由器WAN口IP
ip route get 1.1.1.1 | awk '{print $7}'

如果两个结果不一致,说明你的宽带是NAT后的内网IP(大内网),需要联系运营商申请公网IP。现在三大运营商的宽带都可以免费申请公网IP,直接打客服电话说"需要公网IP用于远程监控"即可,通常当天就能开通。

IPv6用户的好消息: 现在几乎所有宽带都默认分配了公网IPv6地址。如果你的访问设备也支持IPv6,完全可以使用纯IPv6方案,无需跟运营商打交道。只需确认飞牛NAS已获取IPv6地址:

ip -6 addr show | grep "global"

第二步:DDNS动态域名解析

家庭宽带的公网IP会不定期变化(重启光猫、运营商定期回收等),DDNS的作用就是用一个固定域名自动跟踪变化的IP。

方案一:飞牛NAS自带DDNS

fnOS控制面板中内置了DDNS功能,支持多家服务商:

  1. 打开fnOS「控制面板」→「外部访问」→「DDNS」
  2. 点击「添加」,选择服务商(推荐Cloudflare或阿里云)
  3. 填入你的域名和API密钥
  4. 保存后系统会自动定期更新IP

推荐使用Cloudflare:免费、稳定、全球节点多,而且后续SSL证书也可以配合使用。

方案二:Docker部署DDNS-Go

如果你需要更多灵活性,推荐在Docker中部署DDNS-Go,这是一个非常强大的国产DDNS工具,支持几乎所有域名服务商:

version: "3"
services:
  ddns-go:
    image: jeessy/ddns-go:latest
    container_name: ddns-go
    ports:
      - "9876:9876"
    volumes:
      - /vol1/docker/ddns-go:/root
    restart: always

访问 http://飞牛IP:9876 进入DDNS-Go的Web管理界面配置:

  • DNS服务商选择Cloudflare(或其他你使用的服务商)
  • 填入Token/API密钥
  • 填入你的域名(如 nas.yourdomain.com
  • 获取IP方式选择「通过网卡获取」或「通过接口获取」
  • 如果是IPv6场景,记得勾选「启用IPv6」

配置完成后,DDNS-Go会每隔几分钟自动检查公网IP变化并更新DNS记录。

第三步:路由器端口转发

有了域名指向公网IP后,还需要让外网请求能到达你的NAS。这需要配置路由器的端口转发(也叫端口映射)。

推荐转发方案——只暴露一个端口:

外网端口 内网IP 内网端口 用途
443 飞牛NAS IP 4443 HTTPS统一入口(反向代理)
80 飞牛NAS IP 4480 HTTP重定向到HTTPS(可选)

配置步骤:

  1. 登录你的路由器管理后台(通常是192.168.1.1或192.168.0.1)
  2. 找到「端口转发」/「虚拟服务器」/「NAT」设置
  3. 添加上述两条转发规则
  4. 保存并应用

安全提醒: 不要直接暴露飞牛NAS的5000/5001管理端口,也不要逐个暴露各个Docker应用的端口。通过反向代理统一管理是最佳实践。

第四步:Nginx Proxy Manager反向代理

Nginx Proxy Manager(简称NPM)是目前最流行的反向代理管理工具,提供美观的Web界面,支持自动申请和续期SSL证书。

部署NPM

在飞牛NAS的Docker中部署NPM:

version: "3"
services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    ports:
      - "4480:80"
      - "4443:443"
      - "8181:81"
    volumes:
      - /vol1/docker/npm/data:/data
      - /vol1/docker/npm/letsencrypt:/etc/letsencrypt
    restart: unless-stopped

注意端口映射: - 4480:80 → 对应路由器转发的80端口(HTTP) - 4443:443 → 对应路由器转发的443端口(HTTPS) - 8181:81 → NPM管理界面(局域网访问即可)

配置反向代理

部署完成后,访问 http://飞牛IP:8181 进入NPM管理界面。

默认账号密码:[email protected] / changeme(首次登录后会要求修改)。

添加代理主机——以飞牛NAS管理界面为例:

  1. 点击「Proxy Hosts」→「Add Proxy Host」
  2. Domain Names:填入 nas.yourdomain.com
  3. Scheme:选择 https(如果飞牛内部开了HTTPS)或 http
  4. Forward Hostname/IP:填入飞牛NAS的局域网IP,如 192.168.1.100
  5. Forward Port:填入飞牛管理端口 5000(或 5001
  6. 勾选「Block Common Exploits」
  7. 切换到SSL标签页,选择「Request a new SSL Certificate」
  8. 填入你的邮箱,勾选「Force SSL」和「HTTP/2 Support」
  9. 点击「Save」

NPM会自动向Let's Encrypt申请SSL证书,整个过程不到一分钟。证书到期前还会自动续期,完全免维护。

继续添加其他服务:

用同样的方法,为你的其他服务添加代理:

子域名 转发目标 端口
nas.yourdomain.com 飞牛管理界面 5000
jellyfin.yourdomain.com Jellyfin 8096
nextcloud.yourdomain.com Nextcloud 8080
immich.yourdomain.com Immich 2283
ha.yourdomain.com HomeAssistant 8123

这样一来,你只需要记住不同的子域名就能访问所有服务,而且全部走HTTPS加密,安全又方便。

第五步:安全加固

外网访问意味着你的NAS暴露在互联网上,必须做好安全防护:

1. 强密码策略

  • 飞牛NAS管理密码至少12位,包含大小写字母、数字和特殊字符
  • 每个Docker应用使用不同的密码
  • 启用二次验证(如果支持)

2. 限制登录尝试

在NPM中,为代理主机添加Access List: 1. 进入「Access Lists」→「Add Access List」 2. 设置「Satisfy Any」允许规则 3. 添加基于IP的访问限制(如只允许国内IP段) 4. 将该Access List应用到重要服务的代理主机上

3. 关闭不必要的端口

路由器上只转发443和80端口,其他所有端口一律关闭。检查端口开放情况:

# 在飞牛NAS上扫描路由器的端口映射
nmap -Pn your-domain.com

4. Fail2Ban防暴力破解

在飞牛NAS上安装配置Fail2Ban(可通过SSH手动安装,或等fnOS后续版本内置支持),自动封禁多次登录失败的IP。

5. 定期更新

保持fnOS系统和所有Docker容器处于最新版本。在飞牛NAS的Docker管理界面中开启Watchtower自动更新,或设置:

services:
  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 86400 --cleanup
    restart: unless-stopped

常见问题与排查

问题一:域名解析正常但无法访问

排查步骤: 1. 确认路由器端口转发配置正确,内网IP和端口号无误 2. 检查运营商是否封禁了443端口(部分运营商封禁常用端口),尝试换用8443等非常用端口 3. 在局域网内先测试 http://飞牛IP:4443 确认NPM能正常访问

问题二:运营商封了80/443端口

解决方案: - 使用其他高端口(如8443),在路由器上映射 8443 → NAS 4443 - NPM配置不变,只是外网访问时使用 https://nas.yourdomain.com:8443 - 或者使用Cloudflare Tunnel(Zero Trust)方案,彻底绕过端口问题

问题三:IPv6能ping通但无法访问

可能原因: - 路由器的IPv6防火墙阻止了入站连接。需要在路由器中关闭IPv6 SPI防火墙或添加IPv6放行规则 - NPM需要监听IPv6地址,在Docker的NPM配置中修改端口映射为 [::]:4480:80 等格式

问题四:SSL证书申请失败

常见原因: - 域名解析尚未生效(刚添加DNS记录,等待最长10分钟) - 80端口无法从外网访问(Let's Encrypt验证需要) - 如果是国内服务器,Let's Encrypt可能被墙,可尝试使用ZeroSSL或手动上传证书

进阶方案:Cloudflare Tunnel

如果实在无法获取公网IP,或者运营商封了所有端口,Cloudflare Tunnel是终极解决方案:

  1. 注册Cloudflare账号,将域名DNS托管到Cloudflare
  2. 在飞牛NAS的Docker中部署 cloudflare/cloudflared
  3. 创建Tunnel,将本地服务映射到域名

这个方案完全不需要公网IP和端口转发,而且自带Cloudflare的CDN加速和DDoS防护,但需要域名在Cloudflare管理。

总结

组件 作用 部署方式
DDNS 绑定动态公网IP到域名 fnOS内置 / Docker DDNS-Go
端口转发 让外网请求到达NAS 路由器设置
NPM反向代理 统一入口+SSL证书 Docker Nginx Proxy Manager
SSL证书 HTTPS加密通信 NPM自动Let's Encrypt
安全措施 防止入侵 强密码+Fail2Ban+Access List

按照本文的步骤逐一配置,大约一个下午就能完成全部部署。之后你就能在任何地方通过 nas.yourdomain.com 安全地访问家里的飞牛NAS了。


本文基于飞牛NAS fnOS 0.8.26版本编写,所有Docker配置均已在飞牛NAS环境下验证通过。