Linux使用脚本自动更新华为云DNS(DDNS)支持OPENWRT
最近应朋友的需求,研究一个华为云的DDNS解决方式,并且支持OpenWRT和一些主流Linux发行版本。
本教程来源于Github大佬开发的脚本,传送门
并且感谢另外一位大佬修改脚本,使其支持Openwrt网卡获取IP:传送门
此脚本支持IPV4与IPV6双栈,但是需要对脚本做出一些改动,下文会提到。
准备工作
首先将域名解析到华为云上,这里不再赘述。
添加需要ddns的A记录或者AAAA记录。建议将TTL改小。
配置单IPV4或者单IPV6
首先点击链接下载脚本文件(IPV4,IPV6),请下载对应的脚本。
- 首先在脚本开头,修改个人配置
1 | #用户名 |
username与accountname都填你登陆的用户名,password填入密码
domain填入你的顶级域名,hosts填入二级域名,如果想直接用顶级域名,将hosts改成#
- 填写IP获取方式
1 | #从外网api获取ip地址(开启1/关闭0 默认开启) |
如果需要从网卡获取,将Interface改成对应的WAN口网卡。
如果要从外网API获取,请将REMOTE_RESOLVE改成1
- 上传到LINUX,给予权限,运行脚本
- 如果返回没有报错,添加到Crontab中间进行定时获取。
配置双栈
据脚本作者所说:
1 | 本项目存在已知的BUG,由于华为云API采用模糊搜索策略,recordset可能存在多个返回值,这会导致解析记录无法正常更新。 |
并且按照未修改的脚本,AAAA记录会和A记录产生冲突,无法更新某一条记录。
由此我们这里需要对脚本进行手动配置
首先将A记录与AAAA记录同时添加完成。
IPV6脚本从上面的链接下载以后按照原来的脚本配置好,不需要改动,我们主要改动IPV4脚本。(改动哪个脚本都行,哪个脚本报错改哪个。)
首先,我们进入华为云DNS界面,并且对一个记录点击修改
在这里不要动任何东西。
在Chrome浏览器中,按F12
,切换到Network选项卡,清除所有记录
此时在华为dns界面点击确定,此时右边会出现一些返回数据。
在控制台中按CTRL + F
,搜索recordset
,找到如下图所示的值,打开response选项卡,复制所有数据到一个记事本中,方便分析。
仔细阅读记事本,首先找到你需要修改的记录。
找到Zone_ID和Recordset_ID,每一条记录都会如下图所示
记住Recordset_ID和Zone_ID,打开脚本
在最后
1 | curl -X PUT -L -k -s \ |
中间的$RECORDSET_ID
和$Zone_ID
替换成记事本中对应的值
修改完成后上传Linux进行测试。