Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[分享]弄了个Cloudflare加速的脚本 #1679

Open
qwerttvv opened this issue Feb 21, 2024 · 27 comments
Open

[分享]弄了个Cloudflare加速的脚本 #1679

qwerttvv opened this issue Feb 21, 2024 · 27 comments

Comments

@qwerttvv
Copy link

qwerttvv commented Feb 21, 2024

#!/bin/sh
set -eo pipefail

# 下载Cloudflare的IP地址列表
wget -O /usr/cfipv4.txt https://www.cloudflare-cn.com/ips-v4/
wget -O /usr/cfipv6.txt https://www.cloudflare-cn.com/ips-v6/

# 运行CDN速度测试,-n 222的线程数根据你设备性能调整
/usr/cdnspeedtest -dd -o /usr/1.cfipv4.txt -f /usr/cfipv4.txt -n 222
/usr/cdnspeedtest -dd -o /usr/1.cfipv6.txt -f /usr/cfipv6.txt -n 222
/usr/cdnspeedtest -dd -o /usr/2.cfipv4.txt -f /usr/cfipv4.txt -n 222
/usr/cdnspeedtest -dd -o /usr/2.cfipv6.txt -f /usr/cfipv6.txt -n 222
/usr/cdnspeedtest -dd -o /usr/3.cfipv4.txt -f /usr/cfipv4.txt -n 222
/usr/cdnspeedtest -dd -o /usr/3.cfipv6.txt -f /usr/cfipv6.txt -n 222
/usr/cdnspeedtest -dd -o /usr/4.cfipv4.txt -f /usr/cfipv4.txt -n 222
/usr/cdnspeedtest -dd -o /usr/4.cfipv6.txt -f /usr/cfipv6.txt -n 222

# 结果合并去重
awk -F, 'FNR > 1 && FNR <= 33 {print $1}' /usr/1.cfipv4.txt /usr/2.cfipv4.txt /usr/3.cfipv4.txt /usr/4.cfipv4.txt | sort -u > /usr/good.cfipv4.txt

awk -F, 'FNR > 1 && FNR <= 33 {print $1}' /usr/1.cfipv6.txt /usr/2.cfipv6.txt /usr/3.cfipv6.txt /usr/4.cfipv6.txt | sort -u > /usr/good.cfipv6.txt

# 对合并去重的结果重新测试
/usr/cdnspeedtest -o /usr/done.cfipv4.txt -f /usr/good.cfipv4.txt -n 100 -url=https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.3/src.tar.gz -sl 0.01 -dn 22
/usr/cdnspeedtest -o /usr/done.cfipv6.txt -f /usr/good.cfipv6.txt -n 100 -url=https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.3/src.tar.gz -sl 0.01 -dn 22

# 从done.cfipv4.txt文件中提取前16个IP地址
ips=$(awk -F, 'NR>1 && NR<18 {print $1}' /usr/done.cfipv4.txt | tr '\n' ',' | sed 's/,$//')

# 检查custom.conf文件中是否存在这两行命令
if grep -q "ip-set -name cloudflare-ipv4 -file /usr/cfipv4.txt" /etc/smartdns/custom.conf && grep -q "ip-rules ip-set:cloudflare-ipv4 -ip-alias" /etc/smartdns/custom.conf; then
    # 如果存在,替换IP地址
    sed -i "/ip-rules ip-set:cloudflare-ipv4 -ip-alias/c\ip-rules ip-set:cloudflare-ipv4 -ip-alias $ips" /etc/smartdns/custom.conf
else
    # 如果不存在,添加命令
	echo "" >> /etc/smartdns/custom.conf
	echo "" >> /etc/smartdns/custom.conf
	echo "#cloudflare ip-alias" >> /etc/smartdns/custom.conf
    echo "ip-set -name cloudflare-ipv4 -file /usr/cfipv4.txt" >> /etc/smartdns/custom.conf
    echo "ip-rules ip-set:cloudflare-ipv4 -ip-alias $ips" >> /etc/smartdns/custom.conf
fi

# 从done.cfipv6.txt文件中提取前16个IP地址
ips=$(awk -F, 'NR>1 && NR<18 {print $1}' /usr/done.cfipv6.txt | tr '\n' ',' | sed 's/,$//')

# 检查custom.conf文件中是否存在这两行命令
if grep -q "ip-set -name cloudflare-ipv6 -file /usr/cfipv6.txt" /etc/smartdns/custom.conf && grep -q "ip-rules ip-set:cloudflare-ipv6 -ip-alias" /etc/smartdns/custom.conf; then
    # 如果存在,替换IP地址
    sed -i "/ip-rules ip-set:cloudflare-ipv6 -ip-alias/c\ip-rules ip-set:cloudflare-ipv6 -ip-alias $ips" /etc/smartdns/custom.conf
else
    # 如果不存在,添加命令
	echo "" >> /etc/smartdns/custom.conf
    echo "ip-set -name cloudflare-ipv6 -file /usr/cfipv6.txt" >> /etc/smartdns/custom.conf
    echo "ip-rules ip-set:cloudflare-ipv6 -ip-alias $ips" >> /etc/smartdns/custom.conf
	echo "" >> /etc/smartdns/custom.conf
fi

# 清理文件
cd /usr/
rm 1.cfipv4.txt 2.cfipv4.txt 3.cfipv4.txt 4.cfipv4.txt 1.cfipv6.txt 2.cfipv6.txt 3.cfipv6.txt 4.cfipv6.txt good.cfipv4.txt good.cfipv6.txt

# 重启smartdns
/etc/init.d/smartdns restart

存成cloudflare.sh到usr目录,从 https://github.com/immortalwrt-collections/openwrt-cdnspeedtest/releases 下载你对应cpu的ipk直接解bin文件到usr目录,或者用原版,改应用程序名字,或者在链接中ipk直接装,改应用的位置。
再去弄个定时任务

50 4 * * * /bin/sh /usr/Cloudflare.sh

行了,每天4点50开始执行,替换20最快的ipv4和ipv6,smartdns开缓存和测速的话默认在20个里面选8个。222线程的话大概半个小时完成全过程

@qwerttvv
Copy link
Author

另外谁知道aws官方有没有公布自己的ip地址啊

@qwerttvv
Copy link
Author

qwerttvv commented Feb 21, 2024

呃,,那个,,,我还没实地测呢啊,应该是没问题,等我回去我就试试,有问题我再改

@PikuZheng
Copy link
Contributor

根据 https://github.com/XIU2/CloudflareSpeedTest 的讨论,cf 的免费 ip 池和付费 ip 池是不一样的,用一个 ip 来替代 cf 公布的所有 ip,可能有网络不通的风险。
另外速度快的一般是104段,抽风概率很大

@qwerttvv
Copy link
Author

cf 的免费 ip 池和付费 ip 池是不一样的,用一个 ip 来替代 cf 公布的所有 ip,可能有网络不通的风险。

我擦 那https://www.cloudflare-cn.com/ips-v4和https://www.cloudflare-cn.com/ips-v6包含了免费和收费,然后免费和收费的数据是隔离的,互相没有对方的数据或者单独一方没有另一方的?

@qwerttvv
Copy link
Author

@PikuZheng
Copy link
Contributor

那这个测速的玩意儿没意义了啊

可以选举出固定的一个ip 把免费池映射过去,参考 #1062 。付费池正常查询是三个 ip,测速排序后基本没什么问题

那gcore和aws cloudfront呢?

aws 和 cloudfront 在我这是部分数据中心通部分数据中心墙。我是靠edns来优化到离我vps线路近的数据中心

@qwerttvv
Copy link
Author

ip-alias功能上线最初不就是cf这个需求吗,那本来免费版的,测速匹配到付费服务器,然后服务器就没这个数据?这不闹着玩儿呢么?

@PikuZheng
Copy link
Contributor

PikuZheng commented Feb 21, 2024

ip-alias功能上线最初不就是cf这个需求吗,那本来免费版的,测速匹配到付费服务器,然后服务器就没这个数据?这不闹着玩儿呢么?

免费的两个ip怎么测速也是在免费池中啊

@qwerttvv
Copy link
Author

https://www.cloudflare-cn.com/ips-v4/

例如这个,这是免费的?还是免费收费全部?

@PikuZheng
Copy link
Contributor

应该是全部
刚搜索了一下,我上面说的免费池收费池不对。应该是全部ip地址段中,有几个段是仅供付费用户使用的,有几个段是自有业务保留。用一个ip映射全部ip段应该是可行的。仅当个别付费用户指定了特定的ip段时才会不通(一般是地区限制

@qwerttvv
Copy link
Author

ip-alias功能上线最初不就是cf这个需求吗,那本来免费版的,测速匹配到付费服务器,然后服务器就没这个数据?这不闹着玩儿呢么?

免费的两个ip怎么测速也是在免费池中啊

能行,一会儿我把CLOUDFRONT和GCORE也弄上

@qwerttvv
Copy link
Author

路由器死活装不上jq。。。换了俩源也不对,我擦…

@PikuZheng
Copy link
Contributor

@qwerttvv
Copy link
Author

中午试了一下cloudfront和akamai,因为找不到下载测速,就tcp ping看的话,测出来的结果和上游dns采用阿里腾讯百度字节最后smartdns给的结果差异不大,不值得折腾

也就cf对大陆默认的不太理想,有些实用性

@PikuZheng
Copy link
Contributor

我昨晚试了一下akamai,他法国和香港的ip到我这都巨慢,最快的是韩国的。我认为akamai有必要。cloudfront到我这都挺慢的

@qwerttvv
Copy link
Author

我昨晚试了一下akamai,他法国和香港的ip到我这都巨慢,最快的是韩国的。我认为akamai有必要。cloudfront到我这都挺慢的

我回头回家看看家里网络情况

@qwerttvv
Copy link
Author

qwerttvv commented Feb 22, 2024

XIU2/CloudflareSpeedTest#500

那边作者不做下载测速步骤的ip剔除,这样的话搭配smartdns用,下载测速就没有意义,只ping就好了

因为我这里发现有些ip在tcp ping和下载测速结果不相关,有些ping结果较好的下载测速比较慢,反而ping慢一些的下载速度相对好一些

总之我把在本地的脚本改了,直接加-dd就完了,下载测速不剔除ip的话,这个步骤就毫无意义

改完的贴1楼了

@o0HalfLife0o
Copy link
Contributor

我昨晚试了一下akamai,他法国和香港的ip到我这都巨慢,最快的是韩国的。我认为akamai有必要。cloudfront到我这都挺慢的

cloudfront我这边是新加坡最好,日本ping和cft差不多,但是速度差很多

@qwerttvv
Copy link
Author

我昨晚试了一下akamai,他法国和香港的ip到我这都巨慢,最快的是韩国的。我认为akamai有必要。cloudfront到我这都挺慢的

cloudfront我这边是新加坡最好,日本ping和cft差不多,但是速度差很多

老哥你cloudfront的下载测速地址是哪个呀,找不到能直连的大些的文件

@o0HalfLife0o
Copy link
Contributor

我昨晚试了一下akamai,他法国和香港的ip到我这都巨慢,最快的是韩国的。我认为akamai有必要。cloudfront到我这都挺慢的

cloudfront我这边是新加坡最好,日本ping和cft差不多,但是速度差很多

老哥你cloudfront的下载测速地址是哪个呀,找不到能直连的大些的文件

自己设置cft源地址为别人分享的测速文件,cfst里很多

@qwerttvv
Copy link
Author

我昨晚试了一下akamai,他法国和香港的ip到我这都巨慢,最快的是韩国的。我认为akamai有必要。cloudfront到我这都挺慢的

cloudfront我这边是新加坡最好,日本ping和cft差不多,但是速度差很多

老哥你cloudfront的下载测速地址是哪个呀,找不到能直连的大些的文件

自己设置cft源地址为别人分享的测速文件,cfst里很多

又找了一下,cloudfront的没有看到,cloudflare的倒是一大把

@o0HalfLife0o
Copy link
Contributor

我昨晚试了一下akamai,他法国和香港的ip到我这都巨慢,最快的是韩国的。我认为akamai有必要。cloudfront到我这都挺慢的

cloudfront我这边是新加坡最好,日本ping和cft差不多,但是速度差很多

老哥你cloudfront的下载测速地址是哪个呀,找不到能直连的大些的文件

自己设置cft源地址为别人分享的测速文件,cfst里很多

又找了一下,cloudfront的没有看到,cloudflare的倒是一大把

意思就是自己设置一个cft cdn用来测速,源地址填cf测速地址就可以了

@zmjjack
Copy link

zmjjack commented Feb 25, 2024

不明觉厉

@qwerttvv
Copy link
Author

qwerttvv commented Mar 2, 2024

最近用了一阵子,发现有些ip是用不了的,不知道为什么,似乎也没什么规律

改了一下脚本,现在把这个问题去掉了,还贴在一层吧

@maojianyou
Copy link

#!/bin/sh
set -eo pipefail

# 下载Cloudflare的IP地址列表
wget -O /usr/cfipv4.txt https://www.cloudflare-cn.com/ips-v4/
wget -O /usr/cfipv6.txt https://www.cloudflare-cn.com/ips-v6/

# 运行CDN速度测试,-n 222的线程数根据你设备性能调整
/usr/cdnspeedtest -dd -o /usr/1.cfipv4.txt -f /usr/cfipv4.txt -n 222
/usr/cdnspeedtest -dd -o /usr/1.cfipv6.txt -f /usr/cfipv6.txt -n 222
/usr/cdnspeedtest -dd -o /usr/2.cfipv4.txt -f /usr/cfipv4.txt -n 222
/usr/cdnspeedtest -dd -o /usr/2.cfipv6.txt -f /usr/cfipv6.txt -n 222
/usr/cdnspeedtest -dd -o /usr/3.cfipv4.txt -f /usr/cfipv4.txt -n 222
/usr/cdnspeedtest -dd -o /usr/3.cfipv6.txt -f /usr/cfipv6.txt -n 222
/usr/cdnspeedtest -dd -o /usr/4.cfipv4.txt -f /usr/cfipv4.txt -n 222
/usr/cdnspeedtest -dd -o /usr/4.cfipv6.txt -f /usr/cfipv6.txt -n 222

# 结果合并去重
awk -F, 'FNR > 1 && FNR <= 33 {print $1}' /usr/1.cfipv4.txt /usr/2.cfipv4.txt /usr/3.cfipv4.txt /usr/4.cfipv4.txt | sort -u > /usr/good.cfipv4.txt

awk -F, 'FNR > 1 && FNR <= 33 {print $1}' /usr/1.cfipv6.txt /usr/2.cfipv6.txt /usr/3.cfipv6.txt /usr/4.cfipv6.txt | sort -u > /usr/good.cfipv6.txt

# 对合并去重的结果重新测试
/usr/cdnspeedtest -o /usr/done.cfipv4.txt -f /usr/good.cfipv4.txt -n 100 -url=https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.3/src.tar.gz -sl 0.01 -dn 22
/usr/cdnspeedtest -o /usr/done.cfipv6.txt -f /usr/good.cfipv6.txt -n 100 -url=https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.3/src.tar.gz -sl 0.01 -dn 22

# 从done.cfipv4.txt文件中提取前16个IP地址
ips=$(awk -F, 'NR>1 && NR<18 {print $1}' /usr/done.cfipv4.txt | tr '\n' ',' | sed 's/,$//')

# 检查custom.conf文件中是否存在这两行命令
if grep -q "ip-set -name cloudflare-ipv4 -file /usr/cfipv4.txt" /etc/smartdns/custom.conf && grep -q "ip-rules ip-set:cloudflare-ipv4 -ip-alias" /etc/smartdns/custom.conf; then
    # 如果存在,替换IP地址
    sed -i "/ip-rules ip-set:cloudflare-ipv4 -ip-alias/c\ip-rules ip-set:cloudflare-ipv4 -ip-alias $ips" /etc/smartdns/custom.conf
else
    # 如果不存在,添加命令
	echo "" >> /etc/smartdns/custom.conf
	echo "" >> /etc/smartdns/custom.conf
	echo "#cloudflare ip-alias" >> /etc/smartdns/custom.conf
    echo "ip-set -name cloudflare-ipv4 -file /usr/cfipv4.txt" >> /etc/smartdns/custom.conf
    echo "ip-rules ip-set:cloudflare-ipv4 -ip-alias $ips" >> /etc/smartdns/custom.conf
fi

# 从done.cfipv6.txt文件中提取前16个IP地址
ips=$(awk -F, 'NR>1 && NR<18 {print $1}' /usr/done.cfipv6.txt | tr '\n' ',' | sed 's/,$//')

# 检查custom.conf文件中是否存在这两行命令
if grep -q "ip-set -name cloudflare-ipv6 -file /usr/cfipv6.txt" /etc/smartdns/custom.conf && grep -q "ip-rules ip-set:cloudflare-ipv6 -ip-alias" /etc/smartdns/custom.conf; then
    # 如果存在,替换IP地址
    sed -i "/ip-rules ip-set:cloudflare-ipv6 -ip-alias/c\ip-rules ip-set:cloudflare-ipv6 -ip-alias $ips" /etc/smartdns/custom.conf
else
    # 如果不存在,添加命令
	echo "" >> /etc/smartdns/custom.conf
    echo "ip-set -name cloudflare-ipv6 -file /usr/cfipv6.txt" >> /etc/smartdns/custom.conf
    echo "ip-rules ip-set:cloudflare-ipv6 -ip-alias $ips" >> /etc/smartdns/custom.conf
	echo "" >> /etc/smartdns/custom.conf
fi

# 清理文件
cd /usr/
rm 1.cfipv4.txt 2.cfipv4.txt 3.cfipv4.txt 4.cfipv4.txt 1.cfipv6.txt 2.cfipv6.txt 3.cfipv6.txt 4.cfipv6.txt good.cfipv4.txt good.cfipv6.txt

# 重启smartdns
/etc/init.d/smartdns restart

存成cloudflare.sh到usr目录,从 https://github.com/immortalwrt-collections/openwrt-cdnspeedtest/releases 下载你对应cpu的ipk直接解bin文件到usr目录,或者用原版,改应用程序名字,或者在链接中ipk直接装,改应用的位置。 再去弄个定时任务

50 4 * * * /bin/sh /usr/Cloudflare.sh

行了,每天4点50开始执行,替换20最快的ipv4和ipv6,smartdns开缓存和测速的话默认在20个里面选8个。222线程的话大概半个小时完成全过程

https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.3/src.tar.gz 这个貌似不能下载了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants