前言

有时候,我们需要快速删除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=$DOMAINcurl 命令中,只获取指定域名的 DNS 记录,避免误删其他域名的记录。

本脚本需安装 jq 命令行工具。 在大多数Linux发行版中,可以使用包管理器安装: sudo apt-get install jq (Debian/Ubuntu) 或 sudo yum install jq (CentOS/RHEL)。 确保你的系统已安装 curl

请在运行脚本之前仔细检查配置信息,并备份你的DNS记录,以防意外发生。 记住,删除操作是不可逆的!

最后修改:2024 年 12 月 06 日
如果觉得我的文章对你有用,请随意赞赏