收起左侧

通过 Cloudflare 实现基于 IPv6 优先直连 + IPv4 自动代理 的访问方案

26
回复
4961
查看
  [ 复制链接 ]

4

主题

12

回帖

0

牛值

江湖小虾

2025-7-1 15:20:15 显示全部楼层 阅读模式

🎯 目标

实现一个智能访问策略:

外网访问你的服务(如 飞牛主页)时:

  • 如果访问者 有 IPv6,则直接通过你的内网公网 IPv6(不经 Cloudflare 中转)。
  • 如果访问者 只有 IPv4,则通过 Cloudflare Tunnel(Argo)转发至 飞牛内部服务,实现全球 IPv4 可访问。

且:地址栏统一使用域名c.***.top,用户无需知道你内部部署情况。

🧱 环境准备

项目 内容
物理机 已安装飞牛FNOS(飞牛安装op,后续实现同一个域名局域网登录飞牛)
公网 IPv6
公网 IPv4
Cloudflare 已托管 ***.top域名
子域名 c.***.top作为主入口,a.***.top为直连 IPv6 目标
本地 Web 服务 飞牛nas主页

🧩 总体流程概览
客户端(浏览器)
**
**─ 有 IPv4 → 请求 c.domain.top → Cloudflare Workers 脚本 → 原地 fetch (走 Cloudflare Tunnel)
**
**─ 有 IPv6 → 请求 c.domain.top → Workers 脚本判断 → 302 跳转到 a.domain.top → IPv6 直连访问你的设备

🔧 步骤详解

✅ 第一步:配置 Cloudflare Tunnel(Argo)

  1. 在飞牛 上安装并运行 cloudflared(我用的是docker)

    image.png

  2. 在cloudflare创建隧道并绑定服务:

    image.png

✅ 第二步:设置 DNS

记录 类型 目标
c.***.top 无记录(由 Cloudflare Tunnel 自动接管)
a.***.top AAAA 你飞牛的公网 IPv6 地址
a.***.top 灰色云关闭代理

说明:

  • a 是灰云,Cloudflare 不做代理,允许客户端直连 IPv6。

  • c 是由 Cloudflare Tunnel 接管的入口域名,最终访问的是你的 IPv4 内网服务。

    image.png

  • ✅ 第三步:编写并部署 Workers 脚本

1.打开 Cloudflare Dashboard → Workers → 创建一个 Worker。
创建workers示意图2.png

点击部署.png

点击编辑代码.png

2.脚本如下(chatgpt已经调试成功的版本,根据目标“IPv6 跳转、IPv4 原地 fetch”配置):

image.png

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const clientIP = request.headers.get('CF-Connecting-IP') || '';
  const isIPv6 = clientIP.includes(':');

  if (!isIPv6) {
    // IPv4 用户,直接访问原始请求,不重定向,不代理
    return fetch(request);
  }

  // IPv6 用户,构造重定向地址到 a.***.top(保持请求路径和参数不变)
  const originalURL = new URL(request.url);
  originalURL.hostname = 'a.***.top';

  // 返回 302 重定向响应
  return Response.redirect(originalURL.toString(), 302);
}

3 部署后,将 Worker 绑定到c.***.top,路径 /

image.png

image.png

第四步(可选):本地内网访问用域名直连

如果你希望在内网环境下访问c.***.top 时,不走公网而是走内网直连(如 192.168.0.156),可以:

  • 在 OpenWRT 的「DHCP/DNS → 自定义域名解析」中添加:

  • c.***.top------------192.168.0.156

    image.png

🎯 访问测试场景

网络环境 访问 c.***.top的效果
IPv4-only 走 Cloudflare Tunnel,访问成功
IPv6-only 被 302 重定向到 a.***.top,IPv6 直连
内网设备 可通过挟持 c.***.top → 192.168.0.156本地访问

🚨 注意事项与优化建议

✅ 地址栏变化是否正常?

  • 是的,用了 302 重定向,浏览器会切换地址栏为 a.***.top,这是标准行为。
  • 如果你希望地址栏保持不变,只能在 Worker 中用 fetch() 做反向代理,但这样会失去直连的高性能。

✅ 是否影响网速?

  • IPv6 直连最快。
  • IPv4 路径通过 Cloudflare Tunnel → 相比公网绕远,但速度仍然优秀。
  • 不建议为 “隐藏跳转” 牺牲直连性能,优先推荐你当前方式。

✅ 最终效果总结

类型 地址 功能
主访问入口 https://c.***.top 全球 IPv4/IPv6 用户统一入口
IPv6 直连 https://a.***.top 不经过 Cloudflare,直达 飞牛FNOS
IPv4 转发 c → Tunnel → 飞牛FNOS 无公网 IPv4 的完美替代方案

测试与验证

1.ipv4访问(显示公网连接)
ab164130f3b616c0d64f5bc95c039967.jpg

2.连上内网wifi访问(显示局域网连接)

4ef532203abf985479a80cb58ef816a0.jpg

3.ipv6访问(跳转到子域名a,因为我的飞牛没有ipv6公网地址,所以a域名DDNS到另一台有公网ipv6的op了)

e2ac573df8e0e4844acd451733b25ee1.jpg

说明步骤

  1. Cloudflare Tunnel 创建通道 c

    • 在飞牛FNOS设备上配置Cloudflare Tunnel,将内网服务映射到Cloudflare的c.***.top域名。
    • 确保隧道正常工作,c域名通过Cloudflare代理访问。
  2. 域名解析

    • a.***.top:AAAA记录指向飞牛FNOS设备的IPv6地址,开启Cloudflare代理(灰云),用于直连IPv6用户。
    • c.***.top:对应Cloudflare Tunnel,开启代理(橙云)。
  3. Cloudflare Workers脚本

    • 部署Workers,绑定c.***.top。
    • 脚本逻辑:
      • 如果访问者是IPv4,访问请求转发到 c.***.top,通过Cloudflare Tunnel代理访问飞牛FNOS内网。
      • 如果访问者是IPv6,直接返回 a.***.top(飞牛FNOS IPv6地址)进行直连访问。
  4. 内网DNS自定义挟持

    • 在家中路由器飞牛FNOS的Dnsmasq配置中,添加自定义挟持规则:
      • c.***.top 映射到内网IP(192.168.0.156)
    • 家里设备连接WiFi时,访问 c.***.top 会直接访问内网设备,绕过公网。

    总结

    • 公网IPv6用户:直接直连a.***.top的IPv6地址,绕过Cloudflare代理,速度快,延迟低。
    • 公网IPv4用户:通过Cloudflare代理访问c.***.top,利用Cloudflare Tunnel安全访问内网服务。
    • 内网用户(家中WiFi):通过自定义DNS挟持,直接访问内网IP,保证访问速度和稳定性。
收藏
送赞 11
分享

本帖子中包含更多资源

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

x
1

查看全部评分

4

主题

12

回帖

0

牛值

江湖小虾

2025-7-1 22:04:38 楼主 显示全部楼层
不知道飞牛私有云app 支不支持302重定向,现在没有ipv6,暂时测试不了

5

主题

258

回帖

0

牛值

小有名气

飞牛百度网盘玩家

2025-7-2 13:55:35 显示全部楼层

点赞,折腾不息

墨香染指尖,代码藏心间。飞牛江湖里,书生亦狂癫。

0

主题

28

回帖

0

牛值

fnOS系统内测组

2025-7-2 16:23:42 显示全部楼层
点赞,折腾不息

0

主题

1

回帖

0

牛值

江湖小虾

2025-7-3 10:46:41 显示全部楼层

请教一下,想在这个的基础上再加上lucky反向代理,可以实现吗。
因为我目前是用lucky反向代理,所以dns记录的是*,想要实现lucky反向代理+cloudflare ipv6直连 + ipv4自动代理,有没有什么办法。

4

主题

12

回帖

0

牛值

江湖小虾

2025-7-3 18:18:57 楼主 显示全部楼层
liyulive 发表于 2025-7-3 10:46
请教一下,想在这个的基础上再加上lucky反向代理,可以实现吗。
因为我目前是用lucky反向代理,所以dns记录 ...

如果你的ipv6网速们非常稳定可以看下这个教程,基于LUCK反代,实现实现IPv4+IPv6双栈访问

1

主题

4

回帖

0

牛值

江湖小虾

2025-7-3 18:29:45 显示全部楼层

小白第一步就不会,直接从cloudflare网站上操作是一样的吧

4

主题

12

回帖

0

牛值

江湖小虾

2025-7-3 20:43:41 楼主 显示全部楼层
齐xx 发表于 2025-7-3 18:29
小白第一步就不会,直接从cloudflare网站上操作是一样的吧

不是  第一步 先去cloud创建隧道  然后用token去飞牛dockers创建cloud  然后返回cloud绑定子域名,这个过程可以去搜一下,教程挺多的

2

主题

39

回帖

0

牛值

江湖小虾

2025-7-3 21:18:12 显示全部楼层

ipv4通过 Tunnel通道连接相比于通过stun内网穿透,经过cloudflare302重定向到域名的方法,连接速度上应该后者更具优势

1

主题

77

回帖

0

牛值

初出茅庐

2025-7-4 09:04:59 显示全部楼层

ipv6测试一直是失败的,但是能分配到ipv6地址,不知道怎么回事

是用这方法 重定向到ipv6地址不行吗?还是直接用ipv6地址就不能访问飞牛  详情 回复
2025-7-4 13:58

1

主题

14

回帖

0

牛值

江湖小虾

2025-7-4 16:06:45 显示全部楼层

家中上行40M左右,请问为什么下载速度只有20k左右,有办法吗?还没fn connect快cry

1

主题

35

回帖

1

牛值

fnOS系统内测组

2025-7-4 16:43:08 显示全部楼层
GET新技能,点赞收藏

0

主题

2

回帖

0

牛值

江湖小虾

2025-7-5 01:02:34 显示全部楼层

如果还有其他端口的使用需求,是不是得自己再手动设置c1、c2...域名,以及相对应的a1、a2...域名?

0

主题

28

回帖

0

牛值

fnOS系统内测组

2025-7-5 12:48:10 显示全部楼层

很给力,但是前面部分教程不够细,可以参考:无公网IP搭建Cloudflared免费隧道内网穿透,部署docker教程_NAS存储_教程

2

查看全部评分

4

主题

12

回帖

0

牛值

江湖小虾

2025-7-5 14:03:56 楼主 显示全部楼层
jareven 发表于 2025-7-5 01:02
如果还有其他端口的使用需求,是不是得自己再手动设置c1、c2...域名,以及相对应的a1、a2...域名?
...

比如5244新端口的话在tunnel创建新的子域名d绑定  然后创建新的worker绑定到d  然后302重定向到a:5244   统一访问ipv4直接走d  然后ipv6跳转到a:5244   相当于每一个端口都要一个新的tunnel绑定 然后创建一个新的worker  AAAA记录有一个应该就够了

1

主题

19

回帖

0

牛值

江湖小虾

2025-7-7 10:08:09 显示全部楼层

请教一下,我有IPV6,外网登录fnID直接自动转成ipv6直连,这种情况下 还需要cloudflare吗,或者说他fnid有什么优势没

0

主题

28

回帖

0

牛值

fnOS系统内测组

2025-7-7 13:21:17 显示全部楼层
simonnm 发表于 2025-7-7 10:08
请教一下,我有IPV6,外网登录fnID直接自动转成ipv6直连,这种情况下 还需要cloudflare吗,或者说他fnid有 ...

飞牛ID应用内访问docker等受到限制,用自己的域名不存在

9

主题

60

回帖

0

牛值

初出茅庐

2025-7-16 11:04:07 显示全部楼层

感谢楼主,跟着教程配置了下,目前情况是

IPV4网络下,输入c.***.fun可以正常访问

IPV6网络下,输入c.***.fun也可以正常访问,但没被重新定向a.***.fun的v6通道,还是v4

输入a.***.fun:5666可以正常访问

不知道是哪步出错了

脚本如下:

addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
const clientIP = request.headers.get('CF-Connecting-IP') || '';
const isIPv6 = clientIP.includes(':');

if (!isIPv6) {
// IPv4 用户,直接访问原始请求,不重定向,不代理
return fetch(request);
}

// IPv6 用户,构造重定向地址到 a..top(保持请求路径和参数不变)
const originalURL = new URL(request.url);
originalURL.hostname = 'a.as198855.fun:5666
';

// 返回 302 重定向响应
return Response.redirect(originalURL.toString(), 302);
}

你的worker有没有绑定你的子域名c,如果绑定了 你是用浏览器还是飞牛app访问的,如果是app可能是app不支持重定向,用浏览器试一下,我这也只是理想的一种方法,因为我的飞牛没有ipv6 所以具体我没有测试,  详情 回复
2025-7-16 13:30

4

主题

12

回帖

0

牛值

江湖小虾

2025-7-16 13:30:31 楼主 显示全部楼层
as198855 发表于 2025-7-16 11:04
感谢楼主,跟着教程配置了下,目前情况是
IPV4网络下,输入c.***.fun可以正常访问
IPV6网络下,输入c.***.f ...

你的worker有没有绑定你的子域名c,如果绑定了 你是用浏览器还是飞牛app访问的,如果是app可能是app不支持重定向,用浏览器试一下,我这也只是理想的一种方法,因为我的飞牛没有ipv6  所以具体我没有测试,
worker已经绑定子域名c了,用浏览器访问的。IPV4网络下a域名可以正常打开,IPV6网络下a域名有时能打开,有时打不开,就算打开了,也不会重定向。  详情 回复
2025-7-16 14:41

9

主题

60

回帖

0

牛值

初出茅庐

2025-7-16 14:41:41 显示全部楼层
qwerfdss 发表于 2025-7-16 13:30
你的worker有没有绑定你的子域名c,如果绑定了 你是用浏览器还是飞牛app访问的,如果是app可能是app不支 ...

worker已经绑定子域名c了,用浏览器访问的。IPV4网络下a域名可以正常打开,IPV6网络下a域名有时能打开,有时打不开,就算打开了,也不会重定向。
老哥,方便的话加个微信:Wjqcumt,我们探讨一下  详情 回复
2025-7-16 15:48

4

主题

12

回帖

0

牛值

江湖小虾

2025-7-16 15:48:57 楼主 显示全部楼层
as198855 发表于 2025-7-16 14:41
worker已经绑定子域名c了,用浏览器访问的。IPV4网络下a域名可以正常打开,IPV6网络下a域名有时能打开, ...

老哥,方便的话加个微信:Wjqcumt,我们探讨一下

0

主题

1

回帖

0

牛值

江湖小虾

2025-7-22 17:08:29 显示全部楼层
ipv6访问不到,ipv4访问c正常

2

主题

22

回帖

0

牛值

江湖小虾

2025-7-27 12:07:41 显示全部楼层

我还是用DDNS-GO比较简单,只需要在CF注册一个域名,然后去CF控制台生成一个Token给DDNS-GO使用即可,ipv4、ipv6都支持

20250727120414.png

本帖子中包含更多资源

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

x

2

主题

23

回帖

0

牛值

fnOS系统内测组

2025-7-27 16:59:57 显示全部楼层

6啊,这个会受cloudflare的包大小限制吗?

1

主题

19

回帖

0

牛值

fnOS系统内测组

2025-7-28 20:09:17 显示全部楼层

学习学习楼主。

3

主题

15

回帖

0

牛值

江湖小虾

2025-7-29 20:48:17 显示全部楼层

我修改了楼主的ipv4代理方式,大家可以看看我写的帖子。CF的隧道在大陆太慢了,慢到几乎是不可用的状态

4

主题

12

回帖

0

牛值

江湖小虾

2025-7-29 22:11:44 楼主 显示全部楼层
一蓑烟雨任 发表于 2025-7-29 20:48
我修改了楼主的ipv4代理方式,大家可以看看我写的帖子。CF的隧道在大陆太慢了,慢到几乎是不可用的状态
...

有时候确实太慢了 网页都打不开 有时候又可以直接跑满上行,我看有什么优选的方法,可以研究研究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则