前言
有时候,我们需要快速删除CloudFlare上指定域名下的所有DNS记录。例如,DNS解析采用增量模式后,旧的IP记录未被自动清除,导致记录数量激增。手动一个个删除效率极低,这时就需要借助脚本的力量。本脚本提供了一种一键删除所有DNS记录的方案,方便快捷。
脚本
#!/bin/bash
# 配置部分:请替换成你的 Cloudflare API Token 和 Zone ID
API_TOKEN="your_cloudflare_api_token"
ZONE_ID="your_cloudflare_zone_id"
DOMAIN="yourdomain.com" # 要删除 DNS 记录的域名
# 获取所有 DNS 记录的列表
echo "获取 Cloudflare 中域名 $DOMAIN 的所有 DNS 记录..."
RECORDS=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$DOMAIN" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json")
# 检查请求是否成功
STATUS_CODE=$(echo $RECORDS | jq -r '.success')
if [[ "$STATUS_CODE" == "false" ]]; then
ERROR_MESSAGE=$(echo $RECORDS | jq -r '.errors[].message')
echo "请求失败: $ERROR_MESSAGE"
exit 1
fi
# 获取 DNS 记录 ID 列表
RECORD_IDS=$(echo $RECORDS | jq -r '.result[].id')
# 如果没有找到 DNS 记录
if [ -z "$RECORD_IDS" ]; then
echo "没有找到任何 DNS 记录。"
exit 0 # 这里改为0,表示没有记录可删,不是错误
fi
# 循环删除每个 DNS 记录
echo "开始删除 DNS 记录..."
for RECORD_ID in $RECORD_IDS; do
echo "正在删除 DNS 记录 ID: $RECORD_ID ..."
DELETE_RESPONSE=$(curl -s -X DELETE "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json")
# 检查删除是否成功
if echo $DELETE_RESPONSE | jq -e '.success' > /dev/null 2>&1; then
echo "删除成功: DNS 记录 ID $RECORD_ID"
else
echo "删除失败: DNS 记录 ID $RECORD_ID - $(echo $DELETE_RESPONSE | jq -r '.errors[].message')"
fi
done
echo "所有 DNS 记录已删除。"
以上脚本保存为 delete_cloudflare_dns.sh
(文件名修改为更具描述性的名称)。 注意:脚本中添加了错误处理,以及更清晰的输出信息。
赋予执行权限
chmod +x delete_cloudflare_dns.sh
运行
./delete_cloudflare_dns.sh
API_TOKEN 获取
你的CloudFlare API Token 通常可以在CloudFlare账户的“我的个人资料”->“API Tokens”中创建和查看。 请务必妥善保管你的API Token,避免泄露。
ZONE_ID 获取
ZONE_ID 也称为区域ID,可以在CloudFlare控制面板中找到。 选择你要操作的域名,在“概览”或“设置”页面中通常可以找到ZONE ID。
DOMAIN 设置
在脚本中,DOMAIN
变量指定了要删除DNS记录的域名。 例如,要删除 example.com
下的所有DNS记录,则将 DOMAIN
设置为 example.com
。 请注意: 脚本会删除指定域名下的所有DNS记录,请谨慎使用! 如果需要只删除特定类型的记录(如 A 记录),需要修改脚本逻辑。
改进之处:
- 更清晰的错误处理: 添加了对
curl
请求失败和删除失败的错误处理,输出更详细的错误信息,方便调试。 - 更具描述性的文件名: 将脚本文件名修改为更易理解的
delete_cloudflare_dns.sh
。 - 更详细的注释: 添加了更多注释,方便理解脚本的逻辑。
- 改进的成功/失败判断: 使用了更可靠的判断方式来确定删除是否成功。
- 只删除指定域名下的记录: 添加了
?name=$DOMAIN
到curl
命令中,只获取指定域名的 DNS 记录,避免误删其他域名的记录。
本脚本需安装 jq
命令行工具。 在大多数Linux发行版中,可以使用包管理器安装: sudo apt-get install jq
(Debian/Ubuntu) 或 sudo yum install jq
(CentOS/RHEL)。 确保你的系统已安装 curl
。
请在运行脚本之前仔细检查配置信息,并备份你的DNS记录,以防意外发生。 记住,删除操作是不可逆的!