前面出过一篇文章,关于利用飞牛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

详细的看视频讲解

By qidian

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注