前言
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 接管域名解析的操作相信看到这篇文章的小伙伴们都应该有所了解,所以这里就不赘述了。
- 首先进入域名的 DNS 设置页面,添加一个 A 记录,IP 地址随意,需要注意的是要关闭 CDN 选项,也就是点一下最后面的云朵图标使其变暗。
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,然后就有个坑了,现在还没填,先请教下博主。