0. 参考资料

https://www.youtube.com/watch?v=3y57YVt-PuQ

1. 获取cf账号信息

登录cf, 记录下面三条信息:

  1. 登录 Cloudflare 控制台,找到域名对应的 Zone ID。(域名 -> 概述右下角 -> 区域ID)
  2. 我的个人资料 ->API令牌 -> 全局 API Key
  3. cf账号的邮箱

2. 添加5条A记录

在cf控制台DNS中,随便添加条A记录如 yx1 到 yx5

IP随便乱填

3. 获取域名对应的ID

在运行下面代码,获取对应域名的ID保存到 a2.txt, json格式化后找到域名对应的ID

更改:

  1. 区域ID
  2. 邮箱
  3. API KEY

Linux

curl -X GET "https://api.cloudflare.com/client/v4/zones/区域_ID/dns_records?page=1&per_page=20&order=type&direction=asc" \
     -H "X-Auth-Email: xxxxxxxx@gmail.com" \
     -H "X-Auth-Key: 全局_API_Key" \
     -H "Content-Type: application/json" > a2.txt

Windows

先下载curl.exe

".\curl.exe" -X GET "https://api.cloudflare.com/client/v4/zones/区域_ID/dns_records?page=1&per_page=20&order=type&direction=asc" -H "X-Auth-Email: xxxxxxxx@gmail.com" -H "X-Auth-Key: 全局_API_Key" -H "Content-Type: application/json" > a2.txt

4. 将 区域ID,域名ID,邮箱,API_Key,自己的域名,替换下面脚本中的内容

Linux

#!/bin/bash

# 初始化计数器
n=0

# 运行 CloudflareST -p 0 不输出到控制台
./CloudflareST -p 0

# 读取 result.csv 并取每行的第一个字段(IPv4 地址)
while IFS=, read -r ip _  # IFS=, 设置分隔符为逗号,read -r ip 读取第一个字段(IPv4地址)
do
    n=$((n+1))

    if [ "$n" -eq 2 ]; then
        echo "$ip"
        curl -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" \
            -H "X-Auth-Email: xxxxx@gmail.com" \
            -H "X-Auth-Key: cloudflare的API KEY" \
            -H "Content-Type: application/json" \
            --data "{\"type\":\"A\",\"name\":\"yx1.自己的域名\",\"content\":\"$ip\",\"ttl\":60,\"proxied\":false}"
    fi

    if [ "$n" -eq 3 ]; then
        echo "$ip"
        curl -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" \
            -H "X-Auth-Email: xxxxx@gmail.com" \
            -H "X-Auth-Key: cloudflare的API KEY" \
            -H "Content-Type: application/json" \
            --data "{\"type\":\"A\",\"name\":\"yx2.自己的域名\",\"content\":\"$ip\",\"ttl\":60,\"proxied\":false}"
    fi

    if [ "$n" -eq 4 ]; then
        echo "$ip"
        curl -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" \
            -H "X-Auth-Email: xxxxx@gmail.com" \
            -H "X-Auth-Key: cloudflare的API KEY" \
            -H "Content-Type: application/json" \
            --data "{\"type\":\"A\",\"name\":\"yx3.自己的域名\",\"content\":\"$ip\",\"ttl\":60,\"proxied\":false}"
    fi

    if [ "$n" -eq 5 ]; then
        echo "$ip"
        curl -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" \
            -H "X-Auth-Email: xxxxx@gmail.com" \
            -H "X-Auth-Key: cloudflare的API KEY" \
            -H "Content-Type: application/json" \
            --data "{\"type\":\"A\",\"name\":\"yx4.自己的域名\",\"content\":\"$ip\",\"ttl\":60,\"proxied\":false}"
    fi

    if [ "$n" -eq 6 ]; then
        echo "$ip"
        curl -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" \
            -H "X-Auth-Email: xxxxx@gmail.com" \
            -H "X-Auth-Key: cloudflare的API KEY" \
            -H "Content-Type: application/json" \
            --data "{\"type\":\"A\",\"name\":\"yx5.自己的域名\",\"content\":\"$ip\",\"ttl\":60,\"proxied\":false}"
    fi
done < result.csv  # 从 result.csv 读取内容

Windows

@echo off
Setlocal Enabledelayedexpansion
CloudflareST.exe -p 0

for /f "tokens=1 delims=," %%i in (result.csv) do (
    set /a n+=1 
    If !n!==2 (
        echo %%i
        .\curl\bin\curl.exe -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" ^
                -H "X-Auth-Email: xxxxx@gmail.com" ^
	-H "X-Auth-Key: cloudflare的API KEY" ^
	-H "Content-Type: application/json" ^
                --data "{\"type\":\"A\",\"name\":\"yx1.自己的域名\",\"content\":\"%%i\",\"ttl\":60,\"proxied\":false}"
		)
	If !n!==3 (
        echo %%i
        .\curl\bin\curl.exe -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" ^
                -H "X-Auth-Email: xxxxx@gmail.com" ^
	-H "X-Auth-Key: cloudflare的API KEY" ^
	-H "Content-Type: application/json" ^
                --data "{\"type\":\"A\",\"name\":\"yx2.自己的域名\",\"content\":\"%%i\",\"ttl\":60,\"proxied\":false}"
		)	
	If !n!==4 (
        echo %%i
        .\curl\bin\curl.exe -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" ^
                -H "X-Auth-Email: xxxxx@gmail.com" ^
	-H "X-Auth-Key: cloudflare的API KEY" ^
	-H "Content-Type: application/json" ^
                --data "{\"type\":\"A\",\"name\":\"yx3.自己的域名\",\"content\":\"%%i\",\"ttl\":60,\"proxied\":false}"
		)
	If !n!==5 (
        echo %%i
        .\curl\bin\curl.exe -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" ^
                -H "X-Auth-Email: xxxxx@gmail.com" ^
	-H "X-Auth-Key: cloudflare的API KEY" ^
	-H "Content-Type: application/json" ^
                --data "{\"type\":\"A\",\"name\":\"yx4.自己的域名\",\"content\":\"%%i\",\"ttl\":60,\"proxied\":false}"
		)
	If !n!==6 (
        echo %%i
        .\curl\bin\curl.exe -X PUT "https://api.cloudflare.com/client/v4/zones/自己域名的zoneID/dns_records/二级域名对应的ID" ^
                -H "X-Auth-Email: xxxxx@gmail.com" ^
	-H "X-Auth-Key: cloudflare的API KEY" ^
	-H "Content-Type: application/json" ^
                --data "{\"type\":\"A\",\"name\":\"yx5.自己的域名\",\"content\":\"%%i\",\"ttl\":60,\"proxied\":false}"
		)
)		

5. 设置自动运行

Linux

将 cfipddns.sh脚本 和 CloudflareST可执行文件放到同一个文件夹下/root/cfip/,然后执行下面命令即可

crontab -e

# 每晚20点执行脚本
0 20 * * * cd /root/cfip && /bin/bash ./cfipddns.sh

crontab -l

Windows

待补充