使用 Cloudflare CDN 实现 IPv4 访问纯 IPV6 资源
本文最后更新于 2023年9月18日 上午
使用 Cloudflare CDN 实现 IPv4 访问纯 IPV6 资源
1 什么是 CDN
全称:Content Delivery Network 或 Content Ddistribute Network,即内容分发网络,顾名思义,它是一个分布式节点网络(也称为边缘位置服务器),它有助于根据用户的位置,内容源服务器和边缘服务器向最终用户的地点传送内容(网页、视频、图像等)。CDN 节点具有缓存内容的缓存功能,并且可以从地理上靠近最终用户的位置向用户提供内容。CDN 节点由 CDN 提供商部署在多个地理位置,并且可以跨越多个 ISP(因特网服务提供商)网络。
简单来说,它是一个边缘位置服务器,再简单点,它就是一个服务器,用来干什么,用来传递(中转)内容。也就是说我们在访问源站的过程中,实质上是先访问了 CDN 中的边缘服务器,然后由它向源站请求内容后再由它向我们传送了响应内容。
如果无法理解,那也没关系,看完本文内容,会用即可。
2 为什么选择 Cloudflare(简称“CF”)
我们先说一下 Cloudflare 开启 CDN 后最大的缺点:慢!如果使用 Cloudflare 提供的默认边缘节点,有可能会让你的访问速度变得奇慢无比,因为 Cloudflare 的服务器大部分在境外,所以国内访问这些境外的边缘节点的速度你自然懂的。
但是为什么我们还是选择 Cloudflare 呢?有这几个让人无法拒绝的理由:
- 提供了免费的 DNS 解析和 CDN 代理,DNS 支持泛解析;
- CDN 支持 IPv 4 和 IPv 6 双栈流量的互相转换;
- 可以使用第三方开源的 Cloudflare 边缘节点 IP 优选脚本,通过 host 劫持来提高访问速度;
- 启用 CDN 后,我们可以隐藏真实 IP 地址,提高个人网络安全;
- 国内的 CDN 收费,并且需要绑定实名备案的云服务器,部分 CDN 不支持 IPv 6 回源(腾讯云默认 CDN 不支持,需要购买额外的 ECDN 支持 IPv 6 的回源);
其实仅凭第 5 点就薄纱国内的 CDN 服务了。CF 速度慢可以通过付费和优选 IP 解决,既然都要付费,那为什么不付给更良心的 CF 呢?
3 将域名托管至 CF
前文中,我们在腾讯云购买了域名,并使用 dnspod 进行域名解析。那我们在使用 CF 前,首先要做的就是将域名托管到 CF。CF 使用需要注册账号,这一步就不做过多赘述了,网站支持简体中文,我相信按照说明注册账号应该都能顺利完成。
在注册完成后,我们点击主页中的“添加站点”按钮,导入我们购买的域名:
这里我们选择免费计划即可,如果有额外需求的,可以按需选择付费计划:
完成到这一步时,我们已经完成了托管过程中在 CF 的界面所有操作,接下来我们去腾讯云的控制台,修改域名的名称服务器:
进入我的域名界面:
在“修改 DNS 服务器”界面中,完成名称服务器的修改:
4 开启 CDN
在域名托管的过程中,CF 会自动将原有的域名解析记录导入,我们进入 CF 的域名详情页面,选择左侧的 DNS 选项,打开当前域名的 DNS 解析记录界面:
可以看到我这边已经添加了几条解析记录,下面我们从零开始介绍,如何添加解析记录并开启代理。
手动添加一条 DNS 泛解析记录,并关闭代理:
本地尝试 Ping 域名,确认 DNS 解析生效:
可以看到 CF 的 DNS 解析已经生效了,域名被正确解析到了我们填写的 IP 上。
修改 DNS 解析记录,开启 CDN 代理:
再次尝试 Ping 域名,观察其返回的 IP 是否已经更新为代理的边缘节点 IP:
关闭本地电脑的 IPv 6 网络,重新 Ping 域名,观察是否能正常 Ping 通,且返回的 IP 为 IPv 4 地址:
修改 OpenWrt 中的 DDNS 信息:
需要先在 CF 的个人资料中获取一个 API Key,用于更新 DNS 解析记录:
然后再去 OpenWrt 的“动态 DNS”插件中添加/修改 DDNS 服务配置信息:
注意:当开启 CDN 代理时,这个插件可能会有 “warn” 级别日志,因为它默认使用了 nslookup 获取域名指向的 IP,在开启代理后 nslookup 获取到的是 CF 边缘节点的 IP 地址,和我们真实的 IP 地址并不相同,并且会获取到多个 IP 导致脚本执行过程中有一步骤 expand_ipv 6 会报错。但是这两个问题是没有什么关系的,唯一的影响就是每次检查 IP 的时候,都会强制更新一次 DNS 解析记录,即使真实的 IP 没有发生变化。
经过以上 6 步,我们已经成功给域名套上了 CDN,所有对域名的请求将通过 CF 的边缘节点进行分发和返回,并且我们可以看到,当本地的 IPv 6 网络被关闭时,CF 自动给我们分配了 IPv 4 的边缘节点,实现了无 IPv 6 网络环境下对 IPv 6 源站的访问。
5 Cloudflare IP 优选
在上面开启 CDN 代理的操作步骤中,第 2 步未开启代理时,单次 ping 的响应时间是 15 ms,而第 4、5 步中 ping 的响应时间则直接上涨到了 200 ms,可见 CF 开启 CDN 代理,对我们访问的速度影响还是比较大的。因此我们需要对 CDN 边缘节点的接入 IP 进行优选。
此处推荐一个第三方开源的 IP 优选脚本:XIU2/CloudflareSpeedTest。详细的使用方法和文档在其 github 主页中都有详细介绍,本文就不再赘述了。
6 Cloudflare 开启 CDN 后的局限性
是否只要套用的 CDN,就万事大吉了呢?实则不然,Cloudflare CDN 仅仅能代理 HTTP 和 HTTPS 流量,而我们实际使用过程中,往往还有不同的协议流量,例如 SSH 访问服务器后台(不建议将 SSH 服务暴露到公网)、微软的 RDP(mstsc)等,无法通过被代理的域名进行访问。
解决办法倒也不算麻烦,只要单独为特殊的流量设置独立子域名,并关闭代理即可。比如添加一个用于微软 RDP(mstsc)的子域名解析记录:rdp. YourDomain. Com,并指定对应的 IP 地址。同时在添加一个 rdp.yourDomain.com
的 DDNS 服务即可。但是这种方式由于没有 CDN 的代理,也就意味着将直接访问 IPv 6 地址,当处于无 IPv 6 能力的环境下时,将不可访问。
当然 Cloudflare 提供了更安全的付费服务 Cloudflare Spectrum 来解决这个问题
对于 HTTP 和 HTTPS 流量的代理,也存在一定的局限性。由于国内无法使用标准的 80 和 443 端口,因此我们不得不使用非标准端口来进行 HTTP (s) 通信。而 Cloudflare 支持转发的端口存在限制,仅支持以下端口的转发:
1 |
|
因此势必需要设置端口转发,将 CF 端口的流量转发到部署的服务指定的端口。
参考
- 开启 Cloudflare CDN 代理,实现 IPv4 to IPv6 转换_cloudflare ipv6_橙橙橙橙辰的博客-CSDN博客
- Cloudflare DNS 官方文档
- Cloudflare spectrum 官方文档
- Cloudflare API 官方文档
- 《家里只有 IPv6 公网地址,怎么操作才能使其他 IPv4 网络也访问到?》
- XIU2/CloudflareSpeedTest
- 利用cloudflare让ipv4与ipv6互通|cdn|ipv4|ipv6_新浪新闻 (sina.com.cn)
- 基于 Cloudflare DNS API 部署 IPv6 DDNS - 知乎 (zhihu.com)
- 利用cloudflare让ipv4与ipv6互通_NAS存储_什么值得买 (smzdm.com)
- 如何给你的网站套上Cloudflare(以阿里云为例)_Bottle的博客-CSDN博客
- Cloudflare 入门教程:使用 Cloudflare 免费 CDN 加速 & 保护自己的网站 - 知乎 (zhihu.com)
- GitHub - XIU2/CloudflareSpeedTest: 🌩「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP !当然也支持其他 CDN / 网站 IP ~