首先获取CF的API_TOKEN,获取方式如下:

注:添加时只能选择需要修改的域名,而不能同一个token修改多个域名,因为每个域名的ZONE_ID值不同
#!/bin/bash
# 配置区域
API_TOKEN="GVa2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxu_" # 你的 Cloudflare API 令牌
DNS_RECORD_NAME="xx.xxxxxx.xxx" # 需要更新的域名记录
IP_TYPE="AAAA" # 解析类型 A-IPV4 AAAA-IPV6
if [[ "$IP_PROVIDER" == "A" ]]; then
IP_PROVIDER="https://ipinfo.io/ip"
else
IP_PROVIDER="https://api64.ipify.org/"
fi
# 获取当前公网 IP
CURRENT_IP=$(curl -s $IP_PROVIDER)
echo "本地公网IP为:$CURRENT_IP"
if [ -z "$CURRENT_IP" ]; then
echo "获取公网IP失败!请检查网络连接。"
exit 1
fi
# 获取 Cloudflare 上的现有 IP
ZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" | jq -r '.result[0].id')
echo "ZONE_ID为:$ZONE_ID"
# 获取 Cloudflare 上的现有 IP
CLOUDFLARE_RECORD=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$DNS_RECORD_NAME&type=$IP_TYPE" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" | jq -r '.result[0]')
CLOUDFLARE_IP=$(echo "$CLOUDFLARE_RECORD" | jq -r '.content')
DNS_RECORD_ID=$(echo "$CLOUDFLARE_RECORD" | jq -r '.id')
echo "目前解析记录的IP为:$CLOUDFLARE_IP"
if [ "$CURRENT_IP" == "$CLOUDFLARE_IP" ]; then
echo "IP 未发生变化,无需更新。"
exit 0
fi
# 更新 Cloudflare 的 DNS 记录
UPDATE_RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"$IP_TYPE\",\"name\":\"$DNS_RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":60,\"proxied\":false}")
# 检查更新是否成功
if echo "$UPDATE_RESPONSE" | grep -q "\"success\":true"; then
echo "DNS 记录更新成功!新解析记录IP为:$CURRENT_IP"
else
echo "DNS 记录更新失败!"
echo "响应:$UPDATE_RESPONSE"
exit 1
fi




最新评论