基于Cloudflare API的动态DNS(DDNS)Shell脚本
为什么要写这个
家里的网络环境是电信200M光纤,虽然很容易的拿到了公网IP,但是IP的变换速度很不规则。所以需要做DDNS实时把IP解析到自己的域名上。之前一直用DnsPod的免费版,好处是群晖的控制面板可以直接进行配置。最近由于做博客的需求,把NS记录改成了Cloudflare的以方便使用他家提供的CDN。那么问题就来了,群晖NAS本身不支持CF的DDNS服务,再加上网络上许多介绍Cloudflare DDNS脚本的文章没法用或者写的不详细。自己在aipeach/cloudflare-api-v4-ddns的基础上做了一些修改,产生了这篇文章。
更新
2020.5.23更新,修复了由于CloudflareAPI修改导致的脚本提示错误,但实际修改记录成功的bug。
首先,我也不经常写linux脚本,所以对于.sh文件就像看天书一样XD,通过查找很多资料然后添加断点,找出了原因:没有办法正常获取解析记录ID(在官方文档里面叫Record ID),初步感觉应该是脚本过于老旧,但是CloudflareAPI经常更新的缘故。
那么就有两个解决办法,直接手动获取Record ID填进去,或者改脚本。
但是Record ID这东西貌似删除记录然后重新创建就会变动,到时候要重新获取,就很麻烦,所以我采用了一劳永逸的办法。顺便给脚本加入了日志功能,把整个脚本汉化了一遍然后修复了一些小bug。
那么要怎么用呢?
首先下载这个脚本,如果你在linux环境下,且有条件“面对国内网络环境”,可以使用这个命令
使用它的前提是你有安装curl,如何安装curl
1 | curl https://raw.githubusercontent.com/acha666/cloudflare-api-v4-ddns/master/cf-v4-ddns.sh > /usr/local/bin/cf-ddns.sh && chmod +x /usr/local/bin/cf-ddns.sh |
或者通过我的博客下载(可能不会是最新版)
1 | curl https://acha666.cn/contents/cloudflare-api-v4-ddns/cf-v4-ddns.sh > /usr/local/bin/cf-ddns.sh && chmod +x /usr/local/bin/cf-ddns.sh |
在Windows环境下可以去我的项目地址直接下载
然后打开这个脚本,需要手动配置的地方已经使用注释标出
1 | 你的Global API Key, 请见 https://dash.cloudflare.com/profile/api-tokens, |
当然,你也可以选择不使用默认配置,在shell中用参数提供这些信息
1 | 用法: |
配置完成后,运行bash cf-ddns.sh
即可
设置crontab计划任务
十分简单,首先输入crontab -e
然后在文件中添加新的一行
1 | */1 * * * * "/usr/local/bin/cf-ddns.sh" >/dev/null 2>&1 |
这样将会每分钟执行一次这个脚本。把*/1
改成*/10
就是每10分钟执行一次。
如果你改变了cf-ddns.sh
的所在位置,相应的,你也要把/usr/local/bin/cf-ddns.sh
改变成正确的目录。
当然,你也可以在cf-ddns.sh
之后添加相应的参数。
不过,如果你和我一样使用群晖,只需要在控制面板-计划任务中添加新项目,然后设置好时间就行
注意事项
1.不能同时存在两个记录名相同的记录(比如一个example.com的A记录和example.com的MX记录),会发生错误已经修复这个蛋疼的问题,现在有100个也没问题(话说哪里来的100种类型的记录啊= =)
2.脚本只在群晖DSM和Centos环境下测试,不过Ubuntu之类的也应该可以跑吧
3.如果要使用IPv6模式,当然首先你要保证你能够正常访问IPv6网站啦~测试一下吧
4.貌似没有了,因为我能发现的问题都修复完了
要是还是有BUG怎么办?
看下面↓↓↓,给我留言就好,有人回复你时你会收到邮件提醒。或者你也可以选择提交Issue,不过可能没那么快得到回复