(萌新折腾笔记)网络畅行系列——利用CloudFlare实现域名的双网访问
CloudFlare与双栈技术简介及杂谈
对于普通用户,我们可以直接将 Cloudflare 称为域名解析商,这是我们最常用的功能,但DNS(域名系统)服务只是 Cloudflare 核心功能之一,除此它还提供了广泛的安全和性能优化服务,如 DDoS 防护、网站加速、SSL/TLS 加密等。
在当今的互联网环境中,IPv4地址资源逐渐枯竭,甚至很多多地区都进行了公网IP的回收,IPv6的推广和使用变得越来越重要。为了确保网站和服务能够在IPv4和IPv6网络中都能顺利访问,双栈技术应运而生。双栈技术是指在网络设备和应用程序中同时支持IPv4和IPv6协议的一种技术。通过双栈技术,设备可以在IPv4和IPv6网络中同时工作,从而确保在两种网络环境下都能正常访问服务。双栈技术的实现,可以简单理解为同时对一个域名进行IPv4和IPv6的地址解析。
本篇文章除了简单介绍如何使用CloudFlare的双栈访问功能之外,还将介绍CloudFlare提供的两项免费功能:“CDN代理”(也称作小黄云、橙云)和“Workers”(无服务器计算平台,通常直接称为Workers)。这些功能可以帮助大家实现网站在IPv4和IPv6网络中的自由切换。这两项免费功能也是我选择CloudFlare的主要原因。
CDN(内容分发网络)的作用是什么?开启CDN代理后,CloudFlare会利用DNS64和NAT64技术自动为我们生成或合成新的IPv4和IPv6地址。这样一来,我们的设备通过CDN代理实现了类似双栈解析的效果,即在只有IPv4网络的情况下也可以访问只有IPv6的网站,这特别适用于许多家庭只有IPv6公网的情况(这也是标题不写双栈而写双网的原因,实质上他并不属于双栈解析)。此外,CloudFlare会代理我们设备到主机之间的所有流量,并且整个过程都是加密通信,也确保了数据的安全性。
那么问题也来了,为什么CloudFlare在国内的应用并不广泛呢?答案是:因为它相对较慢。由于国际互联网政策和技术限制,国内的CDN节点分布和访问速度会受到一定影响。本文不会详细讨论如何优化访问速度,而是采用另一种方法来实现某种意义上的分流——即在能够直连时选择直连,无法直连时则通过CDN进行访问,从而尽可能减少卡顿和延迟。
准备工作
在开始配置之前,请确保你已经完成了以下准备工作:
-
拥有一个域名,可以使用免费域名,也可以在各大平台自行购买。只要确保该域名供应商支持 Cloudflare 解析即可(大多数供应商都支持);
-
注册并登录CloudFlare账号;
-
将你的域名托管到CloudFlare;
-
确保你的服务器/主机至少拥有公网IPv4或IPv6其中之一,如果没有,属于纯内网穿透范畴,本文不适用;
-
在你的服务器/主机上部署lucky,本文会提供Compose以方便部署,详细教程可以查看【新生指南-004】内网穿透1-使用Lucky实现ipv6动态解析+HTTPS访问NAS服务(喂奶级)
本文以自建的Alist网盘进行举例,后文将假设我的域名为二级域名“dynv6.com”,而Alist会使用到两个域名:
- 域名1为 “alist.dynv6.com”所使用的端口为默认的5244;
- 域名2为”alist1.dynv6.com“;且域名2我已经在lucky进行了反向代理,反代端口16666,并开启了TLS。(请注意,如果不开启TLS,那么域名1也可以加入反代)
配置步骤
1. 设置域名解析
- 登录CloudFlare控制面板。
- 选择你要配置的域名。
- 导航到“DNS”页面。
环境一:IPv4和IPv6都是公网,即双公网状态,那么只需要创建两条解析即可实现双栈
- 在DNS记录中添加一条A记录,指向你的IPv4地址。此为IPv4解析
- 在DNS记录中添加一条AAAA记录,指向你的IPv6地址。此为IPv6解析

- 如图所示,我们就完成了双公网下的双栈设置。等待几分钟后便可以使用 域名 + IP 的形式对该服务器上的Alist进行访问。(示例:alist.dynv6.com:5244)
环境二:只有一个协议的公网IP(如IPv6),那么我们就需要进行如下操作
- 与上面的操作类似,先为域名 alist.dynv6.com 添加指向IPv6公网地址的解析,然后点击启用小黄云后保存。这样我们就完成了IPv6环境的域名解析,并启用了来自CloudFlare的CDN代理(开启后需要等待一段时间)。

- 截至目前,我们已经可以通过域名加端口的形式访问服务器,但使用过程中发现速度很慢,即前文提到的卡慢情况。然而,在大多数情况下,我们的IPv6网络应该是通畅的,没有必要每次都承受这种卡慢。因此,我们将进行第二步操作。
2. 设置Origin规则
首先,将域名2(alist1.dynv6.com)也添加进我们的域名解析中,指向同样的IPv6公网地址(请注意这里不要打开小黄云)
接着,我们回到CloudFlare的域名界面,左侧侧边栏下方找到 规则--Origin 规则,点击创建规则。

来到规则页面,规则名称可以自定义,其他的按照图内进行修改即可,域名填写我们开了 小黄云(CDN代理)的域名。请务必不要填错。而后点击保存,启用即可!

3. 启用Workers
进入CloudFlare主界面,侧边栏找到分 Workers和Pages ,首次进入可能需要开通,选免费的开通即可。

开通完成后依次点击 创建 -- 创建Workers -- 部署 -- 编辑代码。此时我们会来到一个使用JavaScript 语言的代码编辑页面。



清空原有的代码并粘贴以下代码,我已尽可能的将主要内容进行注释说明。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// 获取并识别客户端的IP地址
const clientIp = request.headers.get('CF-Connecting-IP');
// 获取请求的主机名
const host = request.headers.get('Host');
// 定义主机名alist.dynv6.com的处理逻辑
if (host === 'alist.dynv6.com') {
// 检查IP地址是IPv6还是IPv4,我这边是有公网v6没有公网v4,所以需要v6直通v4走CDN代理,反之亦然
if (clientIp.includes(':')) { // IPv6 address
// 302重定向到有公网且没开CDN代理的地址alist1.dynv6.com:16666
const url = new URL(request.url);
// 下面这句url.protocol如果你反向代理没有开TLS就要加上,因为走的是http流量
// url.protocol = 'http:';
url.host = 'alist1.dynv6.com:16666';
return Response.redirect(url.toString(), 302);
} else { // IPv4 address
// 如果是IPv4则正常访问,此处正常访问就走了Origin规则
return fetch(request);
}
} else {
// 如果不是你监控的主机名alist.dynv6.com,则继续正常访问
return fetch(request);
}
}
如图所示

输入完成后点击部署。
接着来到域名界面,左侧侧边栏选择Workers路由

点击添加路由,路由名称写你开了小黄云的主机名加上/*,(此处是alist.dynv6.com/*), Workers选择我们刚刚用代码部署好的Workers,保存即可。

至此,我们所有的配置工作已经完成。
测试与验证
为了确保配置成功,我们可以使用以下两种方式结合来进行验证:
-
nslookup命令
- 分别使用nslookup命令来检测两个域名的DNS解析情况

- 浏览器访问
- 在地址栏直接输入我们Workers里监测的域名,进入页面后如果有跳转到直连域名即为成功。(这里地址栏就可以判断,就不放图展示了)
总结
综上,在本文中,我们简单探讨了如何利用CloudFlare的双栈访问功能,以及结合其免费提供的CDN代理和Workers服务实现网站在IPv4和IPv6网络中的无缝访问。通过设置域名解析、配置Origin规则以及编写简单的Workers脚本,不仅能够解决因网络协议不同而导致的访问问题,还能在一定程度上减少因CDN代理导致的高延迟低带宽。
尽管CloudFlare在国内的使用存在一定的局限性,但通过本文介绍的方法,用户可以根据自己的实际需求,灵活地选择直连或走CDN,从而获得更好的用户体验。
希望本文能为那些希望通过技术手段改善网站访问质量的用户提供有价值的参考。另外,Workers也还有多种特殊用法,有兴趣的可以去深入了解!!
温馨提示:本文内容较长,可能会导致读者感到困倦,建议在精神饱满时阅读。