收起左侧

使用 Cloudflare Worker 实现 IPv4/IPv6 智能访问 NAS

0
回复
83
查看
[ 复制链接 ]

2

主题

2

回帖

0

牛值

江湖小虾

背景

很多 NAS 玩家都遇到了一个问题:家庭宽带只有公网 IPv6,没有公网 IPv4。这导致在外网通过 IPv4 访问家中的 NAS 会很麻烦。

之前受到论坛帖子的启发,我尝试了 Cloudflare Tunnel,但免费版的线路速度不理想。于是,我找到了一个替代方案:结合使用 Cloudflare Worker 和 FNOS 自带的 FN Connect 中继服务。

这个方案可以实现以下目标:

  • 统一访问入口:所有用户都通过同一个域名访问 NAS。
  • IPv6 访客:直接连接到家庭宽带的 IPv6 地址,实现全速访问。(重定向到 NAS 的公网 IPv6 地址(DDNS域名)。)
  • IPv4 访客:自动通过 FNOS 官方中继服务器访问,保证兼容性。(重定向到 FNOS 的官方中继服务器地址。)
  • 成本:免费。
  • 从而实现 IPv6 直连、IPv4 中继的智能分流。

准备工作 (Prerequisites)

在开始之前,请确保你已经完成以下设置:

  1. Cloudflare 域名:拥有一个托管在 Cloudflare 的域名。
  2. IPv6 配置
    • FNOS 已开启 IPv6。
    • 路由器已设置好端口转发(公网 80/443 -> NAS 80/443)。
  3. DDNS
    • FNOS 已开启 DDNS (例如使用 DDNS-GO)。
    • 你的域名 (yourdomain.com) 和一个子域名 (www.yourdomain.com) 都已通过 DDNS 解析到你的公网 IPv6 地址。
  4. 反向代理
    • 已在 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 脚本。

  1. 登录 Cloudflare,进入你的域名 DNS 设置。
  2. 添加一条新的 AAAA 记录:
    • 类型 (Type): AAAA
    • 名称 (Name): nas (或其他你喜欢的名字,这将是你的统一访问入口)
    • IPv6 地址 (Content): 100:: (这是一个特殊的保留地址,照填即可)
    • 代理状态 (Proxy status): 已代理 (橙色云朵)
    • TTL: 自动
      屏幕截图2025-07-27013436.png

这条记录本身不会指向任何地方,但它能确保所有访问 nas.yourdomain.com 的流量都经过 Cloudflare,从而让我们的 Worker 脚本有机会执行。

2. 创建并配置 Cloudflare Worker

这是整个方案的核心。

  1. 在 Cloudflare 主菜单,进入 Workers路由

    屏幕截图2025-07-27013503.png

  2. 点击 创建应用程序 -> 创建 Worker

    屏幕截图2025-07-27013550.png

  3. 直接点击 部署,然后 编辑代码

    屏幕截图2025-07-27013618.png

  4. 删除编辑器里的所有默认代码,粘贴以下脚本(选择从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 替换为你自己的真实信息。

  1. 点击 保存并部署

3. 绑定 Worker 路由

让 Worker 在我们设定的 nas 子域名上生效。

  1. 在 Worker 的管理页面,点击 触发器 (Triggers) 标签页。
  2. 路由 (Routes) 部分,点击 添加路由 (Add route)
    • 路由 (Route): nas.yourdomain.com/* (确保 nas 和你之前 DNS 设置的名称一致,/* 通配符必须有)

    • 区域 (Zone): 选择 yourdomain.com

      屏幕截图2025-07-27014208.png

  3. 点击 添加路由

4. (可选) 统一 FNOS 分享链接

为了让体验更统一,可以修改 FNOS 的默认分享链接。

  1. 登录 FNOS 后台。
  2. 进入 远程访问 -> 外链分享 -> 设置
  3. 选择 自定义链接,填入你的统一入口地址:https://nas.yourdomain.com
  4. 点击 确认

完成

现在,你可以将 https://nas.yourdomain.com 作为你的唯一入口地址了。

  • IPv6 用户: 享受直连速度,共享的文件也会通过ipv6直接访问你的域名。
  • IPv4 用户: 通过官方中继稳定访问,共享文件通过飞牛的中间访问(可购买飞牛服务提高中继速度)。

希望这个教程对你有帮助。如果有任何问题,欢迎在下面留言讨论。


收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则