Cloudflare DDNS Linux bash脚本支持V4和V6定时自动更改


avatar
admin 2025-01-24 84

首先获取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

暂无评论

发表评论

相关阅读