前言
Cloudflare 作为国际知名 CDN 大厂,对于在国际互联网自由冲浪的小伙伴应该不陌生,其免费 CDN 服务是加速还是减速在曾一度是热门话题。即使不使用 CDN 服务,其 DNS 服务也是一个非常好的选择,抛开其它的不谈,仅不需要实名认证这一点来说,就比国内的厂商不知道高到哪里去了。博主的域名都是通过 Cloudflare 进行托管解析的,所以 DDNS 也需要使用到 Cloudflare。
安装 Cloudflare DDNS 组件
默认情况下 OpenWrt 中并没有 Cloudflare DDNS 功能,需要在编译时选择相应的组件,其位置在 Network
→IP Addresses and Names
。

不懂编译也没关系,可以通过 OpenWrt 的 Web 管理页面安装相应的软件包。

此外还可以通过 SSH 连接到路由器,使用软件包管理器安装命令进行安装:
opkg update && opkg install ddns-scripts_cloudflare.com-v4
配置 Cloudflare DDNS
Cloudflare 接管域名解析的操作相信看到这篇文章的小伙伴们都应该有所了解,所以这里就不赘述了。
TIPS: 如果是 IPv6 则是 AAAA 记录。不过根据 IPv6 网络设置的不同所需要使用的 DDNS 方案是不同的,是否在路由器中设置还要根据实际情况来决定。除非是没有公网 IPv4 地址,一般都不建议使用 IPv6 。
- 获取 API Key ,复制并保存好。
TIPS: API Key 可以控制整个账号,为了提升安全性可以选择创建一个 API Token ,权限为Zone(区域)-DNS- Edit(编辑)即可。感兴趣的小伙伴可以自行探索,这里点到为止。(Lean 大佬的源码博主提交了相关功能的 PR ,2020 年 10 月 13 日后编译的固件才能支持 Cloudflare API Token )
- 来到 OpenWrt 的 Web 管理页面,找到
动态 DNS
,点击 IPv4 后面的修改
按钮,或者也可以新添加一个。 - DDNS 服务提供商选择
cloudflare.com-v4
,然后填入前面设置的域名和获取到的 API Key 以及 Cloudflare 用户名(如果使用的是 API Token ,则用户名是Bearer
)。这里需要注意的是二级域名要使用@
来分隔(写脚本的人不知道为什么傻逼的用了这个分隔符)。其它设置可以自由发挥,不过一般没什么需要改的。 - 最后
保存&应用
,等待几秒后刷新 Cloudflare 的 DNS 管理页面,应该就可以看到 IP 变更了。
TIPS: OpenWrt DDNS 管理页面中的 IP 显示会有延迟,因为要等到下一次检测时才会刷新,这个时间如果没有修改一般是 10 分钟。
更多 OpenWrt 相关文章点这里
本博客已开设 Telegram 频道,欢迎小伙伴们订阅关注。
本文作者:P3TERX
本文链接:https://p3terx.com/archives/openwrt-cloudflare-ddns.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。
更新一级域名,域名处应该如何填写?
我明白了,那个 @是脚本需要区分区域名(就是 CF 界面的那个大的域名,如 b.com),直接用三级的域名(a.b.com)会报错,无法读取到,填成二级才能更新成功,更新的是二级。如果要更新三级,就得填 a@b.com
直接在域名(不是上面的查询主机名)处填写 a.b.com 就报错: 120708 WARN : Could not detect 'zone id' for domain.tld: 'a.b.com'
改成 a@b.com 则更新成功。
至于 API Token 为什么用户名是 Bearer?这个我暂且蒙在古里。
他们判断代码是这样写,API Token 不需要用户名,你填 Bearer 就是用 API Token 。
现在好像二级域名不用 @分隔了,我测试的是现在用正常形式就可以了。
另外感谢博主的教程
报错 Cloudflare communication require cURL with SSL support. Please install - TERMINATE
删掉 /usr/lib/ddns/update_cloudflare_com_v4.sh 里 [-z "$CURL_SSL"] 这一行就行了
我是 ipv6+cf 的 ddns,简直离谱,开 cdn 一直超时,必须关掉 cdn 等一段时间才能正常访问,当时折腾了超级久
发现有个问题,动态 dns 不能自动启动,一旦断电,就不能解析正确的 ip, 导致在外网无法连接家里
外网请求用 tailscale 就完事了
二级域名要使用 @来分隔!!!
原来这个插件是这么用的!!!以前用这个自带的 DDNS 插件一直无法解析阿里和 dnspod.... 原来我是我没加 @.....
(比如要解析 p3terx.com,就要填:@p3terx.com)
然后我还另外去分别装了阿里和腾讯的 DDNS 插件。。。。
留个言提醒下大家
你好,我按你的设置好后,cloudflare 的 DNS 管理页面的 IP 一直没变,不知道是那里设置错误了
这个你要看日志,一般可能的情况是信息填错或者是网络问题。
想問一下 為啥要關閉 cdn?我用 cf 的 name server 就只為了它的 cdn,有辦法 cdn 和 ddns 一起用嗎
对外开放的端口在 Cloudflare 代理的端口就可以用 CDN ,不过中国大陆地区没办法用,就算能用自己家的网套 CDN 全球绕一圈也没必要。
其实能开 CDN,但这个 DDNS 脚本的逻辑相对简陋,它是通过 nslookup 来比对目标域名的地址和本机地址的,你挂了 CDN,那么每次比对结果都是不吻合,也就是说每次比对它都会强制推一次你的当前 IP 到 cloudflare,不过对结果没啥影响,只是稍微多吃一点路由器的资源。
可以啊 以为 cf 没有 ddns,别人一直再说阿里云好用,但是一直对国内大厂很反感。
我完全没有想到预编译这个包... 一直都是 opkg 安装,不过我也是因为 overlay 空间问题才想到自己编译固件,一直都用官方 OpenWrt。
謝謝 P3TERX 大佬的分享,我的 Openwrt 已成功更新到 CF 的 DDNS.
因為是二級路由,所以也提一下在動態 DNS > 高級設置 > IP 地址来源 [IPv4]> 選取 [URL]
才會更新外網 IP. 給我等小白免參考.
同时也感谢你分享使用经验
如果是使用代理的话最好不要使用 “URL” 作为来源。
比如说我的路由器 ip 是 222.222.222.222 ,代理 ip 是 88.88.88.88
如果勾选了 “URL” ,路由器会检查 checkip.dyndns.com,但这个时候返回的是代理 ip,不是想要的 222.222.222.222
求问,我的 openwrt 也是二级路由,也想通过 url 获得外网 ip,同时也有代理。。。不想折腾光猫桥接,又没有方法避免您说的问题?
设置不代理本机 ip、域名可能吗?
就是我 N1 做旁路由,一个局域网里的其他设备,都可以设 N1 里的 OPENWRT 为网关和 DNS,都正常。唯独 N1 没办法,只能把网关和 DNS 设为主路由,因为 N1 ping 不通 docker 里的 OPENWRT,反过来也一样。
没研究过 docker OpenWrt,我的 N1 现在吃灰中
50 包邮解君愁!
请教下博主,xinnet 域名解析怎么换到 Cloudflare?
改 NS 服务器
N1 折腾完,正好又折腾到 DDNS,然后 GOOGLE 一搜,又到博主这里报道,哈哈哈,很同步的说。顺便请教个问题,N1 ARMBIAN,DOCKER 跑 OPENWRT,然后就有个坑了,现在还没填,先请教下博主。