前面出过一篇文章,关于利用飞牛OS自动优选cloudflare IP的教程,在群里有网友留言让出一期软路由下的优选的。我当时有点纳闷,这个代码在x86平台应该都可以运行呀,在飞牛os,群晖下都可以正常运行,为啥还让出一期软路由的呢。我开始以为是让我出软路由安装的,直到我自己在软路由下跑一下这个代码才发现,这个优选程序在openwrt下跑不起来。原因是openwrt下的BusyBox 的 grep 版本不支持 Perl 兼容的正则表达式。所以我对优选脚本做了一下修改,用jq来解析json,其他无变化。
一、 我的软路由版本:
https://cloud.39.la/s/gWta 下载密码:www.39.la
二、 优选完整脚本包:
https://cloud.39.la/s/Y7F1 下载密码:www.39.la
三、新修改脚本如下(只需要修改红色字体部分):
#!/bin/bash
export LANG=zh_CN.UTF-8
auth_email="admin@39.la" #你的CloudFlare注册账户邮箱
auth_key="8b01b……" #你的CloudFlare账户key,位置在域名概述页面点击右下角获取api key。
zone_name="freejiasu.us.kg" #你的主域名
record_name="cuu" #自动更新的二级域名前缀,例如cloudflare的cdn用cl,gcore的cdn用gcore,后面是数字,程序会自动添加。二级域名需要已经在域名管理网站配置完成。
record_count=5 #二级域名个数,例如配置5个,则域名分别是cl1、cl2、cl3、cl4、cl5. 后面的信息均不需要修改。
echo
echo '你的IP地址是'$(curl 4.ipw.cn)',请确认为本机未经过代理的地址'
echo '起点爱分享:https://www.39.la'
./CloudflareST -url https://speed.cloudflare.com/__down?bytes=500000000 #默认会访问cloudflare的测试下载文件,如果去掉-url后面的默认不测速,只取ping值
record_type="A"
#获取zone_id、record_id
zone_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" \
-H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | jq -r '.result[] | .id')
#echo $zone_identifier
sed -n '2,20p' result.csv | while read line
do
#echo $record_name$record_count'.'$zone_name
record_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name$record_count.$zone_name" \
-H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | jq -r '.result[] | select(.name=="'"$record_name$record_count.$zone_name"'") | .id')
#echo $record_identifier
#更新DNS记录
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" \
-H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" \
--data "{\"type\":\"$record_type\",\"name\":\"$record_name$record_count.$zone_name\",\"content\":\"${line%%,*}\",\"ttl\":60,\"proxied\":false}" | jq '.success')
#反馈更新情况
if [[ "$update" == "true" ]]; then
echo $record_name$record_count'.'$zone_name'更新为:'${line%%,*}'....成功'
else
echo $record_name$record_count'.'$zone_name'更新失败:'$update
fi
record_count=$(($record_count-1)) #二级域名序号递减
echo $record_count
if [ $record_count -eq 0 ]; then
break
fi
done
四、添加计划任务
45 8-23 * * * /root/speed.sh
以上的意思是:每天的8-23点的45分跑/root/speed.sh代码自动优选IP
详细的看视频讲解