背景
很多 NAS 玩家都遇到了一个问题:家庭宽带只有公网 IPv6,没有公网 IPv4。这导致在外网通过 IPv4 访问家中的 NAS 会很麻烦。
之前受到论坛帖子的启发,我尝试了 Cloudflare Tunnel,但免费版的线路速度不理想。于是,我找到了一个替代方案:结合使用 Cloudflare Worker 和 FNOS 自带的 FN Connect 中继服务。
这个方案可以实现以下目标:
- 统一访问入口:所有用户都通过同一个域名访问 NAS。
- IPv6 访客:直接连接到家庭宽带的 IPv6 地址,实现全速访问。(重定向到 NAS 的公网 IPv6 地址(DDNS域名)。)
- IPv4 访客:自动通过 FNOS 官方中继服务器访问,保证兼容性。(重定向到 FNOS 的官方中继服务器地址。)
- 成本:免费。
- 从而实现 IPv6 直连、IPv4 中继的智能分流。
准备工作 (Prerequisites)
在开始之前,请确保你已经完成以下设置:
- Cloudflare 域名:拥有一个托管在 Cloudflare 的域名。
- IPv6 配置:
- FNOS 已开启 IPv6。
- 路由器已设置好端口转发(公网 80/443 -> NAS 80/443)。
- DDNS:
- FNOS 已开启 DDNS (例如使用 DDNS-GO)。
- 你的域名 (
yourdomain.com
) 和一个子域名 (www.yourdomain.com
) 都已通过 DDNS 解析到你的公网 IPv6 地址。
- 反向代理:
- 已在 NAS 上部署 Nginx Proxy Manager (NPM) 或其他反代工具。
- 已成功配置 SSL 证书,可以通过
https://www.yourdomain.com
访问 FNOS。
核心要求:在进行下一步之前,请确保你的 IPv6 直连已经是完整、可用且带有 SSL 加密的状态。
拥有一个由Cloudflare托管的域名 (例如 yourdomain.com)。
FNOS已开启IPv6,并且您已经在路由器上设置好了端口转发 (公网的443端口转发到NAS的443端口,80端口转发到NAS的80端口)。
FNOS已开启DDNS,例如使用DDNS-GO,将您的根域名(yourdomain.com)和www子域名(www.yourdomain.com)都动态解析到您家宽带的公网IPv6地址(www子域名做CNAME解析到根域名也是可以的)。
(最关键!) 您已经在NAS上,通过Docker或其他方式,部署好了Nginx Proxy Manager (NPM) 或其他反向代理工具。 并且,您已经成功配置了它,实现了可以通过 https://www.yourdomain.com 这样带SSL安全证书的域名,来访问您FNOS的Web服务。
一句话总结:请确保您的IPv6直连访问已经是完美的、带SSL加密的状态。 如果这一步还没完成,请先在论坛里搜索相关教程。
操作步骤
1. 配置 Cloudflare DNS
我们需要在 Cloudflare DNS 中添加一条“诱饵”记录来触发 Worker 脚本。
- 登录 Cloudflare,进入你的域名 DNS 设置。
- 添加一条新的
AAAA
记录:
- 类型 (Type):
AAAA
- 名称 (Name):
nas
(或其他你喜欢的名字,这将是你的统一访问入口)
- IPv6 地址 (Content):
100::
(这是一个特殊的保留地址,照填即可)
- 代理状态 (Proxy status): 已代理 (橙色云朵)
- TTL: 自动

这条记录本身不会指向任何地方,但它能确保所有访问 nas.yourdomain.com
的流量都经过 Cloudflare,从而让我们的 Worker 脚本有机会执行。
2. 创建并配置 Cloudflare Worker
这是整个方案的核心。
-
在 Cloudflare 主菜单,进入 Workers路由。

-
点击 创建应用程序 -> 创建 Worker。

-
直接点击 部署,然后 编辑代码。

-
删除编辑器里的所有默认代码,粘贴以下脚本(选择从hello word开始,点击开始使用后直接创建work,,随后在右上角就能看到编辑代码这个内容):
export default {
async fetch(request, env, ctx) {
// --- 用户配置 ---
// 1. IPv6 目标地址 (你配置好 SSL 的反代域名)
const IPV6_TARGET = "https://www.yourdomain.com";
// 2. IPv4 目标地址 (FNOS 官方中继)
const IPV4_LOGIN_TARGET = "https://你的FNConnectID.fnos.net"; // 用于 App 登录和管理
const IPV4_SHARE_TARGET = "https://s.fnnas.net"; // 用于文件分享
// --- 核心逻辑 (无需修改) ---
const url = new URL(request.url);
const clientIP = request.headers.get("CF-Connecting-IP");
const originalPathAndQuery = url.pathname + url.search;
// 判断是否为 IPv6 访客
if (clientIP && clientIP.includes(":")) {
return Response.redirect(IPV6_TARGET + originalPathAndQuery, 302);
}
// IPv4 访客:判断是否为分享链接
if (url.pathname.startsWith('/s/')) {
return Response.redirect(IPV4_SHARE_TARGET + originalPathAndQuery, 302);
} else {
return Response.redirect(IPV4_LOGIN_TARGET + originalPathAndQuery, 302);
}
},
};
重要: 请务必将脚本中的 yourdomain.com
和 你的FNConnectID
替换为你自己的真实信息。
- 点击 保存并部署。
3. 绑定 Worker 路由
让 Worker 在我们设定的 nas
子域名上生效。
- 在 Worker 的管理页面,点击 触发器 (Triggers) 标签页。
- 在 路由 (Routes) 部分,点击 添加路由 (Add route)。
- 点击 添加路由。
4. (可选) 统一 FNOS 分享链接
为了让体验更统一,可以修改 FNOS 的默认分享链接。
- 登录 FNOS 后台。
- 进入 远程访问 -> 外链分享 -> 设置。
- 选择 自定义链接,填入你的统一入口地址:
https://nas.yourdomain.com
。
- 点击 确认。
完成
现在,你可以将 https://nas.yourdomain.com
作为你的唯一入口地址了。
- IPv6 用户: 享受直连速度,共享的文件也会通过ipv6直接访问你的域名。
- IPv4 用户: 通过官方中继稳定访问,共享文件通过飞牛的中间访问(可购买飞牛服务提高中继速度)。
希望这个教程对你有帮助。如果有任何问题,欢迎在下面留言讨论。