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 并调用接口;配合 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 变化后全世界能更快切到新地址。