关联主题::
同级:: 2025-09-01_星期一
下一级::

背景

本地网络只有公网IPV6,通过DDNS直连速度是最快的,确定是无法使用公网ipv4访问;
可以使用cf Tunnel,cf双栈等技术实现域名访问nas走ipv4,但是肯定没有直连ipv6的速度快。

所以也就有了A域名直连ipv6,B域名走ipv4访问家庭服务的方案。
只需要记住一个C域名地址就好了,访问C域名地址,会根据你的网络情况,自动选择使用ipv6 or ipv4

我的想法是,使用Cloudflare Worker来实现,根据客户端的 IP类型(IPv4 或 IPv6)来做跳转或代理。
cf Worker也可以绑定自定义域名,并实现优选ip快速访问。Cloudflare给pages和Worker优选域名

具体操作👇🏻

完全可以通过 Cloudflare Worker 来实现你想的“同一入口访问,自动选择 IPv6直连或 IPv4代理”。原理就是 Worker 根据客户端的 IP类型(IPv4 或 IPv6)来做跳转或代理。


1️⃣ 域名结构

  • nas.example.com → 入口域名(绑定 Worker)
  • nas-ipv6.example.com → AAAA 记录直连 NAS IPv6(DNS only)
  • nas-ipv4.example.com → A 记录 + Cloudflare Proxy(IPv4访问 NAS)

2️⃣ Worker 逻辑

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})
 
async function handleRequest(request) {
  // 获取客户端 IP
  const clientIP = request.headers.get('CF-Connecting-IP')
  
  // 简单判断 IPv6
  const isIPv6 = clientIP && clientIP.includes(':')
  
  const targetUrl = isIPv6 
      ? 'https://nas-ipv6.example.com'  // IPv6直连
      : 'https://nas-ipv4.example.com'  // IPv4通过CF代理
  
  // 返回 302 跳转
  return Response.redirect(targetUrl, 302)
}

工作原理:

  1. 用户访问 nas.example.com
  2. Worker 检测请求的 客户端 IP 类型
  3. 根据 IP 类型跳转到不同子域名
    • IPv6 → 直连 NAS
    • IPv4 → Cloudflare Proxy

3️⃣ 优点

  • 同一入口访问,用户不用记不同子域名
  • IPv6直连 + IPv4访问 都能支持
  • 可以后续加缓存、重写路径、HTTPS 强制等规则

4️⃣ 注意事项

  • Worker 的跳转会产生一次 HTTP 302,如果想更平滑,可以写 反向代理 Worker,把内容直接返回,而不是跳转

  • IPv6直连子域名必须是 DNS only AAAA

  • IPv4子域名必须开启 Cloudflare Proxy

  • 唯一缺点就是,无法仅适用一个域名搞定。