在LINUX设备上利用Shell脚本进行Cloudflare CDN自选节点

目前主流的梯子方案主要有以下这些:

  • GOAGENT,GAE,最早出现的方案,利用Google App Engine每日2G的流量以及谷歌几乎无限的IP库搭梯子,现在已经失效;
  • SS/SSR,原本是SS作者自用的程序,后来因为某些原因开源,由于包特征过于明显,开出来没几天就会被爆破;
  • V2ray,近几年出现的新方案,VMESS协议比SS协议隐蔽的多,但流量一大就会TCP阻断
  • V2+WS+TLS,隐蔽性最高,成本最高,配置复杂,但是速度最快
  • Cloudflare Workers,财大气粗的CF提供的云函数服务,每日10000请求
  • 小众代理,例如Brook,torjan等
  • VPN服务,L2TP、PPTP适用于Windows Phone系列等没有系统级VPN API的设备

而网络方案又分为这几种:

  • 直连,就如字面意思,直连适合的是CN2 GIA线路(中国电信的顶级线路),AS9929(联通的顶级线路),CMI(移动的顶级线路)等等,无视所有晚高峰(18:00-3:00),当然了,如果不是以上线路,晚高峰期间就会疯狂丢包、降速等等,BBR也救不回来。
  • 中转,什么意思呢,比如A地是美国线路,B地是上海BGP线路,你在江苏南京,上海BGP到美国的速度肯定比你直连快,因此需要中转一下,一般中转用的是GOST+WS方案。
  • 拿AZURE来打比方,AZ的流量死贵,800G100刀,但是如果有商家提供AZ HK的中转的话,从中转走流量是AZ内网,这样就省了不少流量费了。
  • 多说一句,中转的流程是你——中转服务器的接受端口——中转服务器的转发端口——落地服务器的接受端口——落地服务器的请求端口这个流程,我就是没搞清楚这个导致配置了半天。
  • CDN加速,原理和中转类似,由于V2是通过HTTPS网站伪装的,因此可以让WS请求走CDN流量,也就是说,上面中转配置的过程服务商都帮你配置好了,不用再自己费劲了
  • 目前CDN海外免费的就两家Cloudflare以及Amazon Cloudfront,Cloudflont只建议和EC2/Lightsail一起用,因为Cloudflont虽然前1TB免费,但是上传是要钱的!如果是AWS的机器,走AWS内网也可以省不少钱。

所以,结合上面所述,Cloudflare的方案其实在价格和速度方面是最优的,但是又有个问题了,CF有时候会被TCP阻断,或者开的特别慢,结果绕了一圈又回到GAE时代了,IP自选

新的问题又来了,CF的IP自选又有问题出现了,怎么选呢?

目前CF自选有3种方案:

  • 利用CloudFlare Partner面板自选,此方法对2020年之前未绑定域名已经失效
  • 利用CloudFlare SaaS绑定下级域名,此方法需要两个域名、信用卡,并且单个域名下面只能再绑定另外一个域名
  • 利用CloudFlare Pages绑定CNAME,无需信用卡,每天限额10000请求

我想了半天,最后发现:

我为什么一定要让域名解析全部生效呢?我又不做站,只要确保自己选到的是最好的IP不就行了?


废话到此为止,进入正题:

介绍一下CloudflareSpeedTest项目,这个项目目前是用于CF测速的最优项目

解析需要准备另外一个域名进行动态IP解析

比如你的伪装站是a.com

移动宽带解析站就可以是yidong.a.com

然后V2只要把地址换一下就行了

脚本的工作流程是:检查并测试上一次的结果——如果达到要求就退出——未达到要求调用CloudflareSpeedTest进行测速——选出最优IP——利用CF域名API提交解析

下载二进制文件,注意,华硕系的架构是Arm

Shell代码如下:

#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
cd /jffs/.koolshare/CloudflareST ####脚本目录,华硕系放在这个位置比较好 
./CloudflareST -f "ddnsip.txt" -o "check.txt" -url https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.1/src.tar.gz ####测试URL,推荐自建
CHECK=$(awk -F "\"*,\"*" 'NR ==2 {print $6}' check.txt)
if [[ "${CHECK}" > 5 ]]; then ####测试结果,最低5MB/S
echo "自选IP正常,不用更换"
exit 0
fi
./CloudflareST -o "result_hosts.txt" -url https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.1/src.tar.gz
BESTIP=$(sed -n "2,1p" result_hosts.txt | awk -F, '{print $1}')
echo $BESTIP > ddnsip.txt
if [[ -z "${BESTIP}" ]]; then
echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."
exit 0
fi
zoneid="" ##### Cloudflare's Zone ID
proxied="false"                 ##### 是否使用Cloudflare小云朵,此项目不需要开启
ttl=1 ##### 120-7200 秒或 1=自动
cloudflare_api_token=""               ##### Cloudflare bearer Token 请勿暴露自己token
dns_record=""              ####你的域名
dns_record_id=""            ####域名记录的ID 
always_cf(){
update=$(curl --retry 20 --connect-timeout 2 -X PUT "https://api.cloudflare.com/client/v4/zones/$zoneid/dns_records/$dns_record_id" \ ####重试次数,20次
-H "Authorization: Bearer $cloudflare_api_token" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$dns_record\",\"content\":\"$BESTIP\",\"ttl\":$ttl,\"proxied\":$proxied}")
result=$(echo "$update" | grep '"success":false')
if [[ "$result" != "" ]] || [[ -z $update ]]; then
echo -e "==> $dns_record FAILED:\n$update"
always_cf
else
echo "==> $dns_record 的CloudFlare自选IP已同步为: $BESTIP"
fi
}
always_cf

所谓的ZoneID就是你打开面板后看到的ID,在图里,叫做区域ID

由于安全起见,脚本里使用的是V4-api,因此要点下方的获取API令牌获取密钥,配置过程很简单,就不多说了

DNS Record ID需要自行在API里面获取,具体参考CloudFlare的官方文档,文档里的认证方式是Auth Key,改成Bearer密钥即可

复制脚本能够运行后,写入contrab文件:

/usr/sbin/cru a cf_dns"* 1 * * * * /bin/sh /koolshare/scripts/cf_dns.sh"    ####一个小时检测一次,更改数值到你想要的值即可 大功告成! 移动直接起飞,专享线路,暴打机场!
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据