Cloudflare 是全球著名的网络服务提供商,最出名的业务就是免费 CDN 业务。不过这篇文章可不是来给 Cloudflare 打广告的,而是说一下如何关闭 CloudFlare 的自动匹配 IPv6 这个问题。
最近一段时间里,本站时不时的就会出现 DNS 解析无响应的情况,浏览器打开页面直接白屏,多次强制刷新后才能解析出来,十分影响体验。于是各种排查,从宽带,浏览器和不同设备,结果问题依旧,最后把关注点放到了 Cloudflare 的解析问题上。
国内经过工信部为首的部门几次大力推广和政策要求,三大运营商的家用宽带基本都普及了 IPv6 地址,但问题就出在 Cloudflare 对 IPv6 的优先级上了。哪怕网站服务器端完全没配置 v6,但是只要访问用户有 v6 地址的, Cloudflare 一律会优先自动解析到他家 v6 节点上,理由是认为 IPv6 是未来趋势。这个理由是没错,然而 Cloudflare 的 v6 节点路径走向有问题,对于大陆地区的访问速度反而不如 v4。
ping 一下本站域名,可以发现默认都是返回 v6 节点地址:
在移动宽带下,延迟都突破了 300ms,实在是过于感人,而且对于移动会绕到欧洲去,CDN 直接从加速变成了反向减速。
IPv6 的选项位于 Cloudflare 后台的 Network 分类中,但默认是开启状态完全无法修改:
于是去网上查了一下,发现还只能通过 Linux 命令行来借助 API 来关闭这选项,摆明了就是故意恶心人的。
首先去到账户信息页面:https://dash.cloudflare.com/profile
点击 API Tokens 分类,然后点击 Global API Key 后面的 View,获取 Global API Key:
然后回到域名管理界面,Network 分类下的 IPv6 选项,点击这个选项右下角的 API 字样:
然后可以看到两个管理 API 链接,把第二个 Change IPv6 setting 的链接复制下来,也就是 PATCH 开头这一串:
接着到 Linux 命令行下执行以下命令,整个复制粘贴,修改其中信息为自己的,然后回车运行即可:
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/316dda2d84433db5a87fe44b940c119f/settings/ipv6" -H "X-Auth-Email: abcd@outlook.com" -H "X-Auth-Key: 723499305e50b162e69555c59bev3c25623a4" -H "Content-Type: application/json" --data '{ "value":"off"}'
其中 PATCH 开头的链接换成 IPv6 选项里获取的,abcd@outlook.com 替换为自己的 Cloudflare 账户名称,X-Auth-Key 后面替换成货到到的账户的 Global API Key。
运行后看到 success 后面写着 true 就是成功了:
现在刷新页面就可以看到 IPv6 选项变成了 off 状态:
等 DNS 解析彻底清除 v6 记录的话大概需要 10-30 分钟不等,然后 ping 一下域名,就会发现变回 ipv4 节点了:
注意的是这个操作选项只针对单个域名,如果你有多个域名在 Cloudflare ,那么就需要每个域名都获取对应的 API 操作一遍。