smartdns icon indicating copy to clipboard operation
smartdns copied to clipboard

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

Open qwerttvv opened this issue 4 months ago • 27 comments

#!/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 avatar Feb 21 '24 02:02 qwerttvv