CF-DDNS脚本
# 说明
环境:debian
通过脚本和定时任务,定时更新ip
# 脚本
#!/bin/bash
# 配置
auth_token="xxxxxx" # 头像(右上角)->我的个人资料-API令牌->创建令牌->编辑dns
zone_name="example.com" #域名
record_name="sub.example.com" #子域名
# 文件路径
ip_file=~/.cf/ip.txt
id_file=~/.cf/cloudflare.ids
if [ ! -d ~/.cf ]; then
echo "创建文件夹"
mkdir ~/.cf
fi
# ip判断
new_ip=$(curl -s https://ipv4.maktub.cn)
if [ -f $ip_file ]; then
old_ip=$(cat $ip_file)
if [ $new_ip == $old_ip ]; then
echo "IP has not changed."
exit 0
fi
fi
# 获取配置
if [ -f $id_file ] && [ $(wc -l $id_file | cut -d " " -f 1) == 2 ]; then
zone_identifier=$(head -1 $id_file)
record_identifier=$(tail -1 $id_file)
else
zone_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" -H "Authorization: Bearer $auth_token" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1 )
record_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name" -H "Authorization: Bearer $auth_token" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*')
echo "$zone_identifier" > $id_file
echo "$record_identifier" >> $id_file
fi
# 更新ip
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "Authorization: Bearer $auth_token" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$new_ip\"}")
if [[ $update == *"\"success\":false"* ]]; then
message="API UPDATE FAILED. DUMPING RESULTS:\n$update"
echo -e "$message"
exit 1
else
message="IP changed to: $new_ip"
echo "$new_ip" > $ip_file
echo "$message"
fi
# 创建定时任务
命令行:
crontab -e
# 每分钟执行一次
* * * * * bash /root/.tool/cf-ddns.sh > /dev/null 2>&1
上次更新: 2025/03/22, 03:52:10