获取Cloudflare优选IP并定时更新到DNS解析

简单的更新Cloudflare优选IP的工具,配合定时任务实现电信、移动和联通的三网优选IP DNS解析自动更新。

首先,需要安装 curljq

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

inliinli
上一篇 2024年8月7日 上午1:10
下一篇 2023年8月7日 上午12:36

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注