DDNS 教學:用腳本更新解析記錄
先在控制台建立網域,再透過 API 隨時把記錄更新到最新 IP——動態 IP 情境的最佳搭檔。
這只是 DDNS 一部分 —— 完整 API 文件 涵蓋網域新增、解析增刪改、泛網域憑證 DNS-01 等全部操作。
第 1 步 · 建立網域
登入控制台,在「網域」頁新增您的網域(例如 example.com),然後到註冊商處把 NS 改成平台分配的網域名稱伺服器。
第 2 步 · 建立 API 權杖
在「API 權杖」頁建立權杖,至少勾選 records:write 權限。權杖永遠只能操作您自己名下的網域。
第 3 步 · 一條命令更新記錄
DDNS 端點按「主機名 + 類型」覆蓋式更新:記錄不存在就建立,值變了就替換,沒變就不動——適合排程任務反覆呼叫。
curl -X POST https://dns.us.wr.rs/api/v1/ddns \
-H "Authorization: Bearer dcp_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"zone":"example.com","name":"home","type":"A","value":"203.0.113.7","ttl":60}'
請求參數
| 參數 | 說明 |
|---|---|
zone | 網域(可選)。缺省時按 name 裡的完整主機名自動定位所屬網域。 |
name | 要更新的主機名:「home」(區內)、「home.example.com」(完整)或「@」(根網域)。 |
type | 記錄類型:A、AAAA、CNAME 或 TXT。 |
value | 新值(IPv4/IPv6 位址、目標主機或文字)。 |
ttl | 可選,TTL 秒數(最小 30),預設 300。 |
回傳的 action 為 created(新建)/ updated(已替換)/ unchanged(無變化);record 為目前生效的記錄。
自動更新:Linux(cron)
下面的腳本從平台取得本機公網 IPv4 並呼叫 API;配合 cron 每 5 分鐘跑一次即可。
#!/bin/sh
# DDNS update: keep home.example.com pointed at this machine's IPv4.
TOKEN="dcp_xxxxxxxxxxxxxxxx" # API token with records:write
NAME="home.example.com" # full hostname to update
IP=$(curl -s https://dns.us.wr.rs/api/v1/ddns/ip | sed 's/.*"ip":"\([^"]*\)".*/\1/')
if [ -n "$IP" ]; then
curl -s -X POST https://dns.us.wr.rs/api/v1/ddns \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"name\":\"$NAME\",\"type\":\"A\",\"value\":\"$IP\",\"ttl\":60}"
fi
crontab -e */5 * * * * /usr/local/bin/ddns-update.sh >/dev/null 2>&1
Windows(排程任務 + PowerShell)
# DDNS update (Windows Task Scheduler, every 5 minutes)
$token = "dcp_xxxxxxxxxxxxxxxx"
$name = "home.example.com"
$api = "https://dns.us.wr.rs"
$ip = (Invoke-RestMethod "$api/api/v1/ddns/ip").ip
Invoke-RestMethod -Method Post -Uri "$api/api/v1/ddns" `
-Headers @{ Authorization = "Bearer $token" } `
-ContentType "application/json" `
-Body (@{ name = $name; type = "A"; value = $ip; ttl = 60 } | ConvertTo-Json)
驗證
更新完成後,用 dig 檢查權威應答:
dig +short home.example.com @ns1.qn.cx
小技巧:DDNS 記錄的 TTL 建議 60–300 秒,IP 變化後全世界能更快切到新位址。