skip to content
Logo 三七の小站

CF优选与DDNS

/ 5 min read

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

Terminal window
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

Terminal window
".\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

Terminal window
@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/,然后执行下面命令即可

Terminal window
crontab -e
# 每晚20点执行脚本
0 20 * * * cd /root/cfip && /bin/bash ./cfipddns.sh
crontab -l

Windows

待补充