用 cURL 自動更新 Cloudflare IP 地址實現 DDNS #
授權 #
這種涉及賬戶的請求肯定需要授權,首先登錄自己的 Cloudflare 帳號,然後在「My Profile」創建一個「API Token」(不是底下的 API Key 哦),並且加入 Zone.Zone, Zone.DNS 的權限。
然後就有 -H “Authorization: Bearer xxxxxxxx” 這個的用法了,下面只需要使用這個就好了。
獲得 ZoneID 和 Record ID #
先拿到自己的所有的 Zones,找到自己對應域名的 Zone ID:
curl -X GET "https://api.cloudflare.com/client/v4/zones" -H "Authorization: Bearer xxxxxxxx" -H "Content-Type:application/json"
然後找到對應的 Record 的 ID:
curl -X GET "https://api.cloudflare.com/client/v4/zones/<域名的 ZoneID>/dns\_records" -H "Authorization: Bearer xxxxxxx" -H "Content-Type:application/json"
修改 Record 解析 #
然後就可以通過如下來修改自己的 DNS 解析了,比如我希望修改 home.nova.moe 的解析爲 1.2.3.4,那麼可以這麼寫:
curl -X PUT "https://api.cloudflare.com/client/v4/zones/<域名的 ZoneID>/dns\_records/<Record 的 ZoneID>" \\
-H "Authorization: Bearer xxxxxxx" \\
-H "Content-Type: application/json" \\
--data '{"type":"A","name":"home.nova.moe","content":"1.2.3.4","ttl":120,"proxied":false}'
連貫起來自動獲取公網 IP 並設置就是:
home\_ip=$(curl ip.sb)
curl -X PUT "https://api.cloudflare.com/client/v4/zones/<域名的 ZoneID>/dns\_records/<Record 的 ZoneID>" \\
-H "Authorization: Bearer xxxxxxx" \\
-H "Content-Type: application/json" \\
--data '{"type":"A","name":"home.nova.moe","content":"'$home\_ip'","ttl":120,"proxied":false}'
注意上面 cURL 中的 $home_ip 是用 ‘(單引號)包裹的。
Cloudflare 對於 API 請求的限制如下:
The Cloudflare API sets a maximum of 1,200 requests in a five minute period.
好,搞個 crontab 開跑,免費的 DDNS 成了。