首先,需要安装 curl
和 jq
:
apt install curl jq -y
在Cloudflare官网的 用户API 令牌
界面查看并复制自己的 Global API Key
。添加域名解析,比如:
电信 ct.inli.app / 移动 cmcc.inli.app / 联通 cu.inli.app
然后,使用下面的脚本,可获得对应的域名解析的DNS记录ID:
#!/bin/bash
# 设置 Cloudflare 的 API 凭据
CF_API_EMAIL="Cloudflare账户邮箱"
CF_API_KEY="Global API Key"
CF_ZONE_ID="替换为域名的 Zone ID"
# 获取 DNS 记录列表
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $CF_API_KEY" | jq '.'
然后,通过下面的脚本提取优选IP的联通的 IP 地址、电信的 IP 地址和移动的 IP 地址,并通过 Cloudflare 的 DDNS 接口分别更新对应的 DNS 记录。
#!/bin/bash
# 设置 Cloudflare 的 API 凭据
CF_API_EMAIL="Cloudflare账户邮箱"
CF_API_KEY="Global API Key"
CF_ZONE_ID="替换为域名的 Zone ID"
# 从数据源获取当前的公网 IP 地址(模拟)
API_URL="https://api.345673.xyz/get_data"
API_KEY="o1zrmHAF"
# 创建请求体
REQUEST_BODY=$(jq -n --arg key "$API_KEY" '{key: $key}')
# 发送 POST 请求以获取 IP 地址
RESPONSE=$(curl -s -X POST "$API_URL" -H "Content-Type: application/json" -d "$REQUEST_BODY")
# 提取各个运营商的 IP 地址
IP_CM=$(echo "$RESPONSE" | jq -r '.info.CM[0].ip') # 第一个移动 IP
IP_CT=$(echo "$RESPONSE" | jq -r '.info.CT[0].ip') # 第一个电信 IP
IP_CU=$(echo "$RESPONSE" | jq -r '.info.CU[0].ip') # 第一个联通 IP
# 输出获取到的 IP 地址
echo "获取到的移动 IP 地址: $IP_CM"
echo "获取到的电信 IP 地址: $IP_CT"
echo "获取到的联通 IP 地址: $IP_CU"
# 更新 Cloudflare 的 DNS 记录
update_dns() {
local DOMAIN=$1
local IP_ADDRESS=$2
local RECORD_ID=$3
UPDATE_URL="https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$RECORD_ID"
# 设置请求头
HEADERS=(
-H "Content-Type: application/json"
-H "Authorization: Bearer $CF_API_KEY"
)
# 请求体
DNS_UPDATE_BODY=$(jq -n --arg name "$DOMAIN" --arg content "$IP_ADDRESS" '{
type: "A",
name: $name,
content: $content,
ttl: 300, # TTL设置,单位为秒
proxied: false
}')
# 发送 PUT 请求以更新 DNS 记录
UPDATE_RESPONSE=$(curl -s -X PUT "$UPDATE_URL" "${HEADERS[@]}" -d "$DNS_UPDATE_BODY")
# 检查响应状态
if [[ $(echo "$UPDATE_RESPONSE" | jq -r '.success') == "true" ]]; then
echo "DNS 记录 [$DOMAIN] 已成功更新为: $IP_ADDRESS"
else
echo "更新 DNS 记录 [$DOMAIN] 失败: $(echo "$UPDATE_RESPONSE" | jq -r '.errors[] | .message')"
fi
}
# 使用您在 Cloudflare 中获取的 DNS 记录 ID
RECORD_ID_CM="替换为移动的 DNS 记录 ID"
RECORD_ID_CT="替换为电信的 DNS 记录 ID"
RECORD_ID_CU="替换为联通的 DNS 记录 ID"
# 更新移动、联通和电信的 DNS 记录
update_dns "cmcc.inli.app" "$IP_CM" "$RECORD_ID_CM"
update_dns "ct.inli.app" "$IP_CT" "$RECORD_ID_CT"
update_dns "cu.inli.app" "$IP_CU" "$RECORD_ID_CU"
将该脚本通过crontab计划任务每15分钟执行一次即可。
原创文章,作者:inli,如若转载,请注明出处:https://inli.app/cloudflare-ip-ddns.html