网上找到个脚本在树莓派上使用正常,但路由上更新失败。改进之后可以直接在路由上跑,顺便用更安全的API Token方式取代原来的全局API进行更新。

yulewang的脚本已经写得很好,但由于我的路由上grep的版本过旧,不支持-P参数故获取id失败造成无法更新。用兼容性更好的-E实现。
另外原脚本用的是全局API,权限太多了,故改为更安全的可定制权限的API Token方式,也省去了一个-u的参数。

在路由器上部署

获取API Token

可在cloudflare的个人账户处创建Token,这个脚本需要Zone.Zone的读权限和Zone.DNS的写权限。

下载脚本

1
curl https://raw.githubusercontent.com/mjysci/cloudflare-api-ddns/master/cf-ddns.sh > /root/cf-ddns.sh && chmod +x /root/cf-ddns.sh

这里直接将脚本放在$HOME目录,由于路由系统的特性,放其他目录可能重启后会被删。

设定定时任务

通过crontab -e添加定时任务。

1
*/5 * * * * /root/cf-ddns.sh -k cloudflare-api-token -h host.example.com -z example.com -t A >/dev/null 2>&1

通过Docker部署

1
2
3
4
5
6
docker run -d --name cloudflare-api-ddns --restart=always \
-e CFTOKEN=cloudflare-api-token \
-e CFZONE_NAME=example.com \
-e CFRECORD_NAME=host.example.com \
-e CFRECORD_TYPE=A \
mjysci/cloudflare-api-ddns:latest