仓库源文站点原文


layout: post title: 提高Cloudflare站点在中国的体验

tags: [Cloudflare, 加速]

从此,Cloudflare不再是减速CDN了<!--more-->

起因

众所周知,因为很多人用Cloudflare当作梯子中转之类的原因,中国对Cloudflare网络的速度会有很大程度的劣化,所以在上面的网站访问速度也会非常烂。最近我发现了一个不错的办法可以在一定程度上避免这个问题,所以今天就来说一说。

普通用户的解决方法

对于网站的访问者来说,使用CloudflareSpeedTest这个工具就挺不错的,它能检测到当前网络连哪个IP是最好的。因为Cloudflare网络用的是Anycast,无论从哪个IP进入都可以,所以用这个检测出来的IP直接改Hosts访问就能解决访问网站慢的问题。
不过有些地区可能是服务商主动对Cloudflare的IP段进行限速,那这样有可能测试出来没有可以使用的节点,那么还有一种方法,网络上有些可能是企业之类的人会反代Cloudflare的网站用于解决在国内访问慢的问题,并且没有对host头做限制,那么这些第三方的节点同样也可以作为访问Cloudflare网站的方法。具体怎么找到这样的IP有一个仓库每天都会扫描全网去找像这样的节点。
当然这些节点也不是所有的IP从中国连接速度都很好,这时候可以把这个仓库的所有IP收集起来然后再丢给CloudflareSpeedTest去测试,具体我写了个简单的脚本来处理:

git clone https://github.com/ip-scanner/cloudflare.git
cat cloudflare/*.txt > proxy.txt
./CloudflareST -allip -sl 0.1 -f proxy.txt -n 500

这样获得的第三方IP就基本上不会被限速,里面甚至有可能有通过IPLC或者IEPL的节点,包括拿来当梯子中转速度都几乎可以跑满带宽,另外还有一个优点是这样Cloudflare获得的IP就是第三方节点的IP,可以起到匿名的作用。

对于站长的解决方法

上面的方法相当于是用户自己去解决访问的问题,但是操作可能还是会有点复杂,所以对于网站站长来说不可能去期待访客通过这种方法来提高访问自己网站的速度。不过Cloudflare网站接入只能通过NS方式接入,这样接入的话域名解析的IP就是自动分配的,没办法自己设定解析,也就不能选择更合适的IP,另外之前用CF Partner通过CNAME接入的方法基本上都全死光了,那现在应该怎么办呢?后来我搜了一下,Cloudflare原来已经提供了官方通过CNAME接入的方法(应该是新加的功能),除了要绑信用卡之外就没别的要求了。
在使用这个功能之前,必须先有2个域名,一个是不重要的域名,通过NS方式接入Cloudflare,另一个是主要使用的域名,可以接到Cloudflare上,也可以接到别的NS服务商上。然后在那个不重要的域名中先设定好源站的解析,可以解析到“@”或者随便一个二级域名也可以,并且打开代理。然后点开SSL/TLS->自定义主机名,第一次使用需要绑定信用卡或者PayPal,好像是因为它是个什么预付费的项目,免费100个CNAME,超过100个每个0.1USD。打开以后在回退源中输入刚刚设置好解析的那个域名,当回退源状态显示有效后就可以添加自定义主机名了。这里添加的主机名就是主要使用的域名,输入后根据提示在主域名上设定好TXT记录,完成后只要看到刚刚设定的主机名后面跟了两个有效就可以了。
这样准备工作就做完了,现在只要把主域名的解析设定到Cloudflare网络的任意节点,它就会自动连接到不重要的域名所解析的IP上。至于怎么获得优秀的IP,就可以像普通用户那样操作了,获得优秀的IP以后我们就可以设定一个A记录解析过去。
不过这里需要注意一些地方,如果使用的优选IP是Cloudflare官方的IP,那基本上也不会有什么问题,只是这个IP可能有些地区还是会访问缓慢,毕竟它也算是在重点关注对象中。如果是选择第三方节点IP,大多数情况速度都能保障,但是有个很大的问题就是那些节点的主人如果发现了你在使用他们的节点,他们是可以很轻易的进行中间人攻击的,毕竟域名都解析过去了,整个SSL证书也很简单,为了能避免这个问题一定要开启“证书透明度监视”保证能在第一时间避免有人进行中间人攻击。另外还有一个问题就是既然第三方IP可以匿名,那么网站也没办法获取到用户的真实IP地址了,像Cloudflare一些根据IP的防火墙也会无法生效,像WAF中的速率限制规则是万万不能开的,开了很大可能网站就访问不了了。还有就是DDoS是可以击垮第三方节点的,可能会使网站的可用性下降。所以如果对速度没有特别在意的情况下还是解析到官方IP上更好一些。
所以为了避免节点可能会用不了的情况,我有个想法(因为我没有大陆地区的服务器所以只是设想),之前我用过一个可以给Cloudflare设定DDNS的脚本,叫cloudflare-api-v4-ddns,原本它是去请求获取本机IP的API设定解析的,那么如果把上面优选IP的结果输入到这个脚本中,放到国内的服务器上,每天自动执行一次,那这样我的网站不就会一直使用最优秀的IP了嘛,可惜我没有国内的服务器,改起来还要费点事就算了吧。

感想

有了很多辅助的工具,能让Cloudflare不再成为减速CDN,那它岂不是可以吊打国内其他CDN厂商了😆,果然还是良心厂商啊。