
如何使用 DeepSeek 構建 AI Agent:終極指南
yourdomain.com
)前往 API Tokens 頁面:
權限配置:
yourdomain.com
)API_TOKEN
,妥善保管> ?? 避免使用全局 API Key,限制權限更安全
使用 DDNS 前,我們需要了解 3 個基本參數:
參數名 | 說明 |
---|---|
Zone ID | Cloudflare 分配給域名的唯一標識 |
Record ID | 子域名(A 記錄)在 Cloudflare 中的 ID |
API Token | 授權調用 DNS 接口的密鑰 |
你可以通過如下 API 獲取這些信息:
curl -X GET "https://api.cloudflare.com/client/v4/zones?name=yourdomain.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?type=A&name=sub.yourdomain.com" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json"
以下腳本實現:
#!/bin/bash
CF_API_TOKEN="你的API密鑰"
ZONE_ID="你的Zone ID"
RECORD_ID="你的DNS記錄ID"
RECORD_NAME="sub.yourdomain.com"
# 獲取當前公網 IP
CURRENT_IP=$(curl -s https://api.ipify.org)
# 獲取現有 A 記錄 IP
DNS_IP=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json" | jq -r '.result.content')
# 若 IP 變化,更新記錄
if [ "$CURRENT_IP" != "$DNS_IP" ]; then
echo "IP changed: $DNS_IP → $CURRENT_IP. Updating..."
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\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":120}"
else
echo "IP unchanged: $CURRENT_IP"
fi
> ? 支持設置為 cron 定時任務,每 5 分鐘運行一次,持續保持域名可達
Python 實現更加靈活,適合日志處理、異常重試、Webhook 推送等場景:
import requests
import os
API_TOKEN = os.getenv("CF_API_TOKEN")
ZONE_ID = os.getenv("CF_ZONE_ID")
RECORD_ID = os.getenv("CF_RECORD_ID")
RECORD_NAME = "sub.yourdomain.com"
def get_public_ip():
return requests.get("https://api.ipify.org").text.strip()
def get_dns_ip():
url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records/{RECORD_ID}"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
res = requests.get(url, headers=headers).json()
return res["result"]["content"]
def update_dns(ip):
url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records/{RECORD_ID}"
headers = {"Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json"}
data = {
"type": "A",
"name": RECORD_NAME,
"content": ip,
"ttl": 120
}
res = requests.put(url, headers=headers, json=data)
return res.json()
if __name__ == "__main__":
current_ip = get_public_ip()
dns_ip = get_dns_ip()
if current_ip != dns_ip:
print(f"IP changed: {dns_ip} → {current_ip}")
update_dns(current_ip)
else:
print("IP unchanged.")
crontab -e
添加如下條目:
*/5 * * * * /home/user/ddns_update.sh > > /var/log/ddns.log 2 > &1
可將 DDNS 腳本打包為 Docker 鏡像,部署在樹莓派、NAS、路由器、云主機等環境中:
FROM python:3.10
COPY ddns.py /app/
WORKDIR /app
RUN pip install requests
CMD ["python", "ddns.py"]
在 Uptime Kuma、OpenWRT、Home Assistant 中均有集成方式
問題 | 排查建議 |
---|---|
A 記錄未更新 | 確保 API Token 權限為 Zone.DNS Edit |
Record ID 獲取失敗 |
檢查 type=A 與 name=sub.domain.com 參數是否正確 |
IP 檢測始終為空或錯誤 | 更換 IP 獲取接口,如 https://ifconfig.me |
更新太頻繁被限流(429) | 設置合適的運行間隔(建議 ≥ 300 秒) |
DNS 更新但訪問失敗 | 檢查 ISP 是否封鎖 80/443 端口,或設置端口轉發 |
通過 Cloudflare DNS API,我們可以輕松構建一個 高可用、零費用、可定制的 DDNS 動態域名解析服務。適用于家庭寬帶、辦公服務器、自建站點、IoT 設備遠程管理等場景。