飞牛NAS外网访问终极方案:DDNS+反向代理+SSL全攻略
飞牛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功能,支持多家服务商:
- 打开fnOS「控制面板」→「外部访问」→「DDNS」
- 点击「添加」,选择服务商(推荐Cloudflare或阿里云)
- 填入你的域名和API密钥
- 保存后系统会自动定期更新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(可选) |
配置步骤:
- 登录你的路由器管理后台(通常是192.168.1.1或192.168.0.1)
- 找到「端口转发」/「虚拟服务器」/「NAT」设置
- 添加上述两条转发规则
- 保存并应用
安全提醒: 不要直接暴露飞牛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管理界面为例:
- 点击「Proxy Hosts」→「Add Proxy Host」
- Domain Names:填入
nas.yourdomain.com - Scheme:选择
https(如果飞牛内部开了HTTPS)或http - Forward Hostname/IP:填入飞牛NAS的局域网IP,如
192.168.1.100 - Forward Port:填入飞牛管理端口
5000(或5001) - 勾选「Block Common Exploits」
- 切换到SSL标签页,选择「Request a new SSL Certificate」
- 填入你的邮箱,勾选「Force SSL」和「HTTP/2 Support」
- 点击「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是终极解决方案:
- 注册Cloudflare账号,将域名DNS托管到Cloudflare
- 在飞牛NAS的Docker中部署
cloudflare/cloudflared - 创建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环境下验证通过。