#!/bin/bash # Cloudflare Global API Key CFKEY="7bedc9ef8cadf10bd59cf4eb6f5af69fe1189" # Cloudflare 登录邮箱 CFUSER="tutucloud1@outlook.com" # 一级域名 CFZONE_NAME="tutusub.xyz" # 二级域名(只填写前缀) CFRECORD_NAME="aws1" CFRECORD_NAME_V6="aws1-v6" # 获取当前公网 IPv4 和 IPv6 IPV4=$(curl -s http://ipv4.icanhazip.com) IPV6=$(curl -s http://ipv6.icanhazip.com) # 检查 IP 获取是否成功 if [[ -z "$IPV4" && -z "$IPV6" ]]; then echo "无法获取公网 IP,请检查网络连接。" exit 1 fi # 获取 Zone ID ZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$CFZONE_NAME" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" | grep -o '"id":"[^"]*"' | head -n 1 | cut -d'"' -f4) if [[ -z "$ZONE_ID" ]]; then echo "获取 Zone ID 失败,请检查 API Key 和域名配置。" exit 1 fi # 更新 DNS 记录函数 update_dns_record() { local RECORD_TYPE=$1 local IP=$2 local RECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$CFRECORD_NAME.$CFZONE_NAME&type=$RECORD_TYPE" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" | grep -o '"id":"[^"]*"' | head -n 1 | cut -d'"' -f4) if [[ -z "$RECORD_ID" ]]; then echo "获取 $RECORD_TYPE 记录 ID 失败,请检查域名配置。" return 1 fi local UPDATE_RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" \ --data "{\"type\":\"$RECORD_TYPE\",\"name\":\"$CFRECORD_NAME.$CFZONE_NAME\",\"content\":\"$IP\",\"ttl\":120,\"proxied\":false}") if echo "$UPDATE_RESPONSE" | grep -q '"success":true'; then echo "$RECORD_TYPE 记录更新成功:$CFRECORD_NAME.$CFZONE_NAME -> $IP" else echo "$RECORD_TYPE 记录更新失败,请检查配置。" echo "响应:$UPDATE_RESPONSE" fi } # 更新 DNS 记录函数 update_dns_v6_record() { local RECORD_TYPE=$1 local IP=$2 local RECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$CFRECORD_NAME_V6.$CFZONE_NAME&type=$RECORD_TYPE" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" | grep -o '"id":"[^"]*"' | head -n 1 | cut -d'"' -f4) if [[ -z "$RECORD_ID" ]]; then echo "获取 $RECORD_TYPE 记录 ID 失败,请检查域名配置。" return 1 fi local UPDATE_RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" \ --data "{\"type\":\"$RECORD_TYPE\",\"name\":\"$CFRECORD_NAME_V6.$CFZONE_NAME\",\"content\":\"$IP\",\"ttl\":120,\"proxied\":false}") if echo "$UPDATE_RESPONSE" | grep -q '"success":true'; then echo "$RECORD_TYPE 记录更新成功:$CFRECORD_NAME_V6.$CFZONE_NAME -> $IP" else echo "$RECORD_TYPE 记录更新失败,请检查配置。" echo "响应:$UPDATE_RESPONSE" fi } # 更新 A 记录(IPv4) if [[ -n "$IPV4" ]]; then update_dns_record "A" "$IPV4" fi # 更新 AAAA 记录(IPv6) if [[ -n "$IPV6" ]]; then update_dns_v6_record "AAAA" "$IPV6" fi