介于 CloudFlare 动态更新 DNS 会比较麻烦,所以很多 VPS 厂商都不会提供教学。网上有不少方案都是建议编写一个脚本来更新,但其实可以通过 ddclient 来进行修改,本文将会以 ubuntu 系统作为示例来展示如何用 ddclient 来实现 ddns。
首先安装 ddclient
sudo apt-get update
sudo apt-get install ddclient
接下来会出现一个 package configuration 的界面,依次选择 other - CloudFlare - 输入 CloudFlare 邮箱 - 输入 CloudFlare 的 API 密钥 - 选 Web-based IP discovery service, (如果是通过电脑直接用网线连 modem 来获得的公网 ip,也可以选择 network interface) - 输入你要动态分配 ip 的子域名
- CloudFlare 的 API 密钥的获得路径:CloudFlare 网站右上角头像按钮 - 我的个人资料 - 左边的 api 令牌 - API 密钥 - Global API Key
注意,此时的设置仍然是未完成的,你需要手动修改 /etc/ddclient.conf 来完成。
vim /etc/ddclient.conf
后在你的<子域名>.<域名>
这一行的前一行增加 zone = <你的域名>
注意这里是不包括子域名的,
最后的设置应该是这两种之一
- 注意,可以通过逗号连接来更新多个子域名域名,如 test1.seleixi.com , test2.seleixi.com
- 如果你是使用 network interface 方式的话,需要用 ip addr 确认一下你的公网 ip (就 IPv4 而言,非 192/172/127 开头的通常就是你的公网 ip 了) 是用什么网络接口的,如笔者此处就是用 enp2s0 接口的。 最后,你可以重启服务,并打印日志确认服务是否启动成功。
sudo systemctl restart ddclient
grep ddclient /var/log/syslog
如果 conf 里面写错了的话,也可能没有报错而只打印了 Update dynamic domain name service entries. ,成功分配的情况下应该会显示:
ddclient[1061]: SUCCESS: updating <your domain>: IPv4 address set to <your dynamic ip addr>
。 注意,有时 log 并不是即时的,可能会出现 CloudFlare 已经更新了但 log 还没打印出来的情况,你可以在 CloudFlare 的 dns 面板确认 ip 是否动态更新了,注意不需要把原本 cf 的 dns 记录改掉,反而要有一条 A 记录才可以进行覆写操作(这个 A 记录指向的 ip 是什么都无所谓)