
18種最佳 RAG 技術
example.com
設置權限:
CF_API_TOKEN
長尾關鍵詞:Cloudflare API Token 最小權限、Cloudflare DNS 權限配置
在 Cloudflare 的 API 調用中,管理 DNS 記錄需要兩個重要參數:
zone_id
:你的域名在 Cloudflare 的唯一標識record_id
:DNS 記錄的唯一 IDcurl -X GET "https://api.cloudflare.com/client/v4/zones?name=example.com" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json"
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"
相關關鍵詞:Cloudflare DNS record ID 獲取、zone id 查詢方式
以下 Bash 腳本支持自動檢測公網 IP 并更新 DNS A 記錄,適合用于 DDNS 或開發測試環境的動態綁定。
#!/bin/bash
CF_API_TOKEN="your_api_token"
ZONE_ID="your_zone_id"
RECORD_NAME="home.example.com"
RECORD_TYPE="A"
# 獲取當前公網 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
長尾關鍵詞:Cloudflare DDNS 腳本、動態 A 記錄更新、Shell 自動同步 DNS
如果需要更好的結構與異常處理,可以使用 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.")
關鍵詞擴展:Python 自動化 DNS 管理、Cloudflare Python API 示例、動態 DNS 實現方式
結合 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}'
長尾關鍵詞:GitHub Actions 自動修改 DNS、Cloudflare CI 自動化、DNS 記錄 GitOps 管理
Terraform 支持 Cloudflare Provider,推薦用于管理多個域名與環境的 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
}
執行:
terraform init
terraform apply
擴展關鍵詞:Terraform Cloudflare DNS 配置、IaC 自動化 DNS 管理、Cloudflare DevOps 工具集成
問題 | 解決方式 |
---|---|
403 Forbidden,API 無權限 | 檢查 Token 權限是否包含 DNS Edit |
API 調用成功但記錄未更新 | 檢查是否使用了正確的 record_id |
TTL 設置后無效 | 最低 120 秒,無法設置為 0 |
多記錄沖突 | 指定唯一的 name 和 type |
動態 IP 變更后未同步 | 腳本未設置定時任務,請結合 cron 或 systemd 定時運行 |
通過本文你已掌握:
?? 推薦實踐:
原文引自YouTube視頻: