二、準備工作:API Token 與域名接入

2.1 將域名接入 Cloudflare

  1. 注冊或登錄 Cloudflare 控制臺
  2. 添加你已有的域名,例如 example.com
  3. 更換域名 DNS 到 Cloudflare 提供的 NS(在域名注冊商后臺操作)

2.2 創(chuàng)建 API Token

  1. 打開 Cloudflare 控制臺 → Profile → API Tokens
  2. 點擊 “Create Token” → 使用 “Edit zone DNS” 模板
  3. 設(shè)置權(quán)限:

  4. 限制 Token 的作用域為某個指定域名
  5. 生成后復(fù)制保存 CF_API_TOKEN

> 長尾關(guān)鍵詞:Cloudflare API Token 最小權(quán)限、Cloudflare DNS 權(quán)限配置


三、獲取 Zone ID 與 DNS Record ID

在 Cloudflare 的 API 調(diào)用中,管理 DNS 記錄需要兩個重要參數(shù):

獲取 Zone ID:

curl -X GET "https://api.cloudflare.com/client/v4/zones?name=example.com" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json"

獲取 DNS Record ID:

curl -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records?name=sub.example.com" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json"

> 相關(guān)關(guān)鍵詞:Cloudflare DNS record ID 獲取、zone id 查詢方式


四、Bash 腳本:自動更新 DNS A 記錄

以下 Bash 腳本支持自動檢測公網(wǎng) IP 并更新 DNS A 記錄,適合用于 DDNS 或開發(fā)測試環(huán)境的動態(tài)綁定。

#!/bin/bash

CF_API_TOKEN="your_api_token"
ZONE_ID="your_zone_id"
RECORD_NAME="home.example.com"
RECORD_TYPE="A"

# 獲取當前公網(wǎng) IP
IP=$(curl -s https://api.ipify.org)

# 獲取 record ID
RECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type=$RECORD_TYPE&name=$RECORD_NAME" \
  -H "Authorization: Bearer $CF_API_TOKEN" | jq -r '.result[0].id')

# 獲取記錄當前值
OLD_IP=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
  -H "Authorization: Bearer $CF_API_TOKEN" | jq -r '.result.content')

# 判斷是否需要更新
if [ "$IP" != "$OLD_IP" ]; then
  echo "Updating $RECORD_NAME: $OLD_IP → $IP"
  curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
    -H "Authorization: Bearer $CF_API_TOKEN" \
    -H "Content-Type: application/json" \
    --data "{\"type\":\"$RECORD_TYPE\",\"name\":\"$RECORD_NAME\",\"content\":\"$IP\",\"ttl\":120}"
else
  echo "IP address unchanged."
fi

> 長尾關(guān)鍵詞:Cloudflare DDNS 腳本、動態(tài) A 記錄更新、Shell 自動同步 DNS


五、Python 實現(xiàn):更適合復(fù)雜業(yè)務(wù)邏輯

如果需要更好的結(jié)構(gòu)與異常處理,可以使用 Python 腳本:

import os, requests

API_TOKEN = os.getenv("CF_API_TOKEN")
ZONE_ID = os.getenv("CF_ZONE_ID")
RECORD_NAME = "dev.example.com"

def get_public_ip():
    return requests.get("https://api.ipify.org").text.strip()

def get_record_id():
    url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records?name={RECORD_NAME}"
    headers = {"Authorization": f"Bearer {API_TOKEN}"}
    response = requests.get(url, headers=headers).json()
    return response["result"][0]["id"], response["result"][0]["content"]

def update_record(record_id, new_ip):
    url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records/{record_id}"
    data = {
        "type": "A",
        "name": RECORD_NAME,
        "content": new_ip,
        "ttl": 120
    }
    headers = {
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json"
    }
    response = requests.put(url, headers=headers, json=data)
    return response.json()

if __name__ == "__main__":
    ip = get_public_ip()
    record_id, old_ip = get_record_id()
    if ip != old_ip:
        print(f"IP changed: {old_ip} → {ip}")
        update_record(record_id, ip)
    else:
        print("No IP change.")

> 關(guān)鍵詞擴展:Python 自動化 DNS 管理、Cloudflare Python API 示例、動態(tài) DNS 實現(xiàn)方式


六、CI/CD 集成:用 GitHub Actions 自動同步 DNS 記錄

結(jié)合 GitOps 與 Infrastructure as Code,我們可以在代碼變更時自動修改 DNS 配置:

name: Update Cloudflare DNS
on:
  push:
    branches:
      - main

jobs:
  update_dns:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Update DNS record
        run: |
          curl -X PUT "https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE_ID }}/dns_records/${{ secrets.CF_RECORD_ID }}" \
          -H "Authorization: Bearer ${{ secrets.CF_API_TOKEN }}" \
          -H "Content-Type: application/json" \
          --data '{"type":"A","name":"prod.example.com","content":"1.2.3.4","ttl":120}'

> 長尾關(guān)鍵詞:GitHub Actions 自動修改 DNS、Cloudflare CI 自動化、DNS 記錄 GitOps 管理


七、結(jié)合 Terraform 實現(xiàn)全面 DNS 自動化

Terraform 支持 Cloudflare Provider,推薦用于管理多個域名與環(huán)境的 DNS 配置:

provider "cloudflare" {
  api_token = var.cf_api_token
}

resource "cloudflare_record" "dev_a" {
  zone_id = var.zone_id
  name    = "dev"
  value   = var.ip
  type    = "A"
  ttl     = 120
}

執(zhí)行:

terraform init
terraform apply

> 擴展關(guān)鍵詞:Terraform Cloudflare DNS 配置、IaC 自動化 DNS 管理、Cloudflare DevOps 工具集成


八、常見問題與排查建議

問題 解決方式
403 Forbidden,API 無權(quán)限 檢查 Token 權(quán)限是否包含 DNS Edit
API 調(diào)用成功但記錄未更新 檢查是否使用了正確的 record_id
TTL 設(shè)置后無效 最低 120 秒,無法設(shè)置為 0
多記錄沖突 指定唯一的 nametype
動態(tài) IP 變更后未同步 腳本未設(shè)置定時任務(wù),請結(jié)合 cron 或 systemd 定時運行

九、進階應(yīng)用場景


十、總結(jié)與推薦實踐

通過本文你已掌握:

?? 推薦實踐:

原文引自YouTube視頻:

上一篇:

通過 Cloudflare DNS API 實現(xiàn) DDNS 動態(tài)域名解析

下一篇:

如何通過 Amazon Seller Central API 實現(xiàn)自動化營銷
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費