【PS:本文后半段主要解决插件正常运行后路由器断电重启后配置还在但不会自动更新ip的问题。一般常见于路由器无插入外置U盘或硬盘,定时脚本记录在RAM里,重启就失效了的问题。且后续会自动检测IP变动并更新至CloudFlare】

正文

首先得有公网ip,一般找运营商提一下要求就改了。
梅林固件自带的DDNS服务里面没有Cloudflare,但是可以在koolshare软件中心的cfddns插件来实现动态域名的需求,这样可以方便连接家中nas路由器远程桌面等各类服务。

简介:

CloudFlare DDNS是基于 CloudFlare API 实现的个人 DDNS 工具。
项目地址https://github.com/geek5nan/koolshare-cfddns
似乎打不开了,可以去github找别人Fork的,或者一些固件的ssh工具箱可以直接安装插件。

CloudFlare参数列表

参数名 示例 备注
API Key c2784bcc3db4b1266819a71c0b885ce866eef Global API Key   
Email [email protected] 账户邮箱
Zone Id  625be5e7f1f5125bb08090ee28da0b58   域名ID  
Record ID e8897532572bbbf443ff78787da3ef25   DNS记录ID        

使用 cURL 获取 Zone ID

curl -X GET “https://api.cloudflare.com/client/v4/zones” \-H “Content-Type: application/json” \-H “X-Auth-Key: $API_KEY” \ -H “X-Auth-Email: $EMAIL”

响应中的 id 即为 Zone ID

{“result”: [{“id”: “625be5e7f1f5125bb08090ee28da0b58”, //Zone ID }], //……}

Zone ID就是在cloudflare中点域名后概述界面的右侧API-区域ID

使用 cURL 获取 DNS Record ID

curl -X GET “https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records” \ -H “Content-Type: application/json” \ -H “X-Auth-Key:$API_KEY” \ -H “X-Auth-Email:$EMAIL”

在响应中找到目标域名对应的 id

{ “result”: [{ “id”: “$RECORD_ID1”, “zone_id”: “$ZONE_ID”, “zone_name”: “$example.com”, “name”: “test1.example.com”, // 具体域名1
“type”: “A”, //……
}, { “id”: “$RECORD_ID2”, “zone_id”: “$ZONE_ID”, “zone_name”: “$example.com”, “name”: “test2.example.com”, // 具体域名2
“type”: “A”,
}] //…… }

以上就是该插件作者的使用说明。
已知问题是路由器重启以后必须进软件中心把插件关闭再打开才能更新新的地址,现问题来源及解决思路如下:
在配置页面设置了15分钟自动更新一次后,在保存后通过日志检查自动更新命令允许正常,能够按照预设的周期看到如下Log:

[precode]Nov 23 10:20:00 crond[699]: USER admin pid 1890 cmd /koolshare/scripts/cfddns_update.sh

解决重启无效问题

但是路由器断电及重启后,CloudFlare DDNS定时更新并没有正确执行,看网上也有其他人遇到类似的问题。经过翻阅各类帮助文档,原来CloudFlare DDNS是通过crontab将定时脚本记录在了/tmp/var/spool/cron/crontabs/admin中来执行,而这个位置是记录在RAM里的,重启就失效了,建议将脚本保存在jffs分区,并通过init-start脚本实现开机再次写入。由于我是路由器拨号,所以我之前还设置了一个脚本检测通网后再执行cfddns运行,如果需要可以按我下面操作设置,通过vi /jffs/scripts/ping-ip.sh 创建一个新脚本,填入以下内容,其意义是判断路由器的WAN是否连接上并获取到ip了,联网成功再执行cfddns。

#!/bin/sh

while true
do
sleep 1;
ping -c 1 114.114.114.114 > /dev/null #判断路由器的WAN是否连接上了

if [ $? -eq 0 ]; then
continue
fi
/jffs/.koolshare/scripts/cfddns_update.sh

再通过vi /jffs/scripts/init-start 创建一个新文本,填入以下内容,其意义是每次重启会自动同步一次,然后每隔60分钟(一小时)再自动同步一次。

#!/bin/sh
/jffs/scripts/ping-ip.sh #先运行检查联网那个脚本
echo “*/60 * * * * /jffs/.koolshare/scripts/cfddns_update.sh #cfddns_update#” >> /tmp/var/spool/cron/crontabs/admin #每60分钟重新运行一次cffdns脚本

记得将两个文件赋予执行权限:

chmod a+rx /jffs/scripts/ping-ip.sh
chmod a+rx /jffs/scripts/init-start

可以根据自己需求设置以上脚本内容,到此cfddns脚本自动检测并更新任务就设置完成了现在可以重启一下试试了。