2020.11.20更新:使用docker
使用docker配置cf的ddns更加方便,原项目地址如下
https://github.com/oznu/docker-cloudflare-ddns
使用官方脚本一键安装docker
curl -fsSL https://get.docker.com -o get-docker.sh && bash get-docker.sh
创建api令牌
https://dash.cloudflare.com/profile/api-tokens
权限配置如图中所示,截图里没有的默认即可
然后我们复制下来生成的key
配置docker
首先下载docker镜像
docker pull oznu/cloudflare-ddns
接着我们回到服务器上执行命令创建docker
key就写刚才复制的
zone写根域名
subdomain写ddns域名(只写二级的部分不写根域名的部分)
docker run \
-e API_KEY=xxxxxxx \
-e ZONE=example.com \
-e SUBDOMAIN=subdomain \
--restart=always \
oznu/cloudflare-ddns
注意这里ddns并不会后台运行,所以我们用nohup启动
nohup docker run -e API_KEY=xxxxxxx -e ZONE=example.com -e SUBDOMAIN=subdomain --restart=always oznu/cloudflare-ddns &
-------------------------------------------以下为原文---------------------------------------------------------
概述
如果买了动态 IP 的 VPS 或服务器,IP 会经常改变。这时,就可以通过 DDNS 来获取动态 IP。部分商家可能不提供 DDNS,需要自己搭建。假设你已经有了一个域名 zhaozhuji.net,想要设置域名 ddns.zhaozhu.net 获取最新的动态 IP。
添加域名
如果域名没有使用 CloudFlare 的 DNS 解析服务,首先要在 CloudFlare 按提示添加域名 zhaozhuji.net,把域名的 DNS 服务器改为 CloudFlare,增加对应域名的 A 记录 ddns.zhaozhuji.net。TTL 可设为 2 分钟或自动。注意,DDNS 使用的域名不要开启 CloudFlare 的 CDN,只用 CF 的 DNS 解析功能,也就是 status 一列对应域名的图标要是灰色的。
生成api
添加好域名解析后,前往https://www.cloudflare.com/a/profile获取 Global API,把 API 一长串字符复制保存下来。注意,这串 API 不要泄露给其他人。
配置脚本
下载脚本
curl https://gist.githubusercontent.com/benkulbertis/fff10759c2391b6618dd/raw > /usr/local/bin/cf-ddns.sh && chmod +x /usr/local/bin/cf-ddns.sh
一般系统都会带有 curl,但如果出错,就需要先安装 curl,具体安装方法可以谷歌或百度一下。 注意一定给脚本执行权限,不然定时任务不会自动运行。
vi /usr/local/bin/cf-ddns.sh
auth_email="[email protected]"
auth_key="c2547eb745079dac9320b638f5e225cf483cc5cfdda41" # found in cloudflare account settings
zone_name="example.com"
record_name="www.example.com"
其中,在 auth_email 中填入 CloudFlare 账号的邮箱,在 auth_key 输入前面获取的 API,zone_name 填入域名 zhaozhuji.net,record_name 填入 DDNS 的域名 ddns.zhaozhuji.net。
修改完后,保存退出。输入bash /usr/local/bin/cf-ddns.sh
运行脚本,如果提示IP changed to: X.X.X.X
,表明配置成功。
设置定时任务
脚本配置成功后,需要让它定时运行。这里设置每 10 分钟运行一次 cf-ddns.sh 脚本。
输入crontab -e
,然后会弹出 vi 编辑界面,在里面添加一行:
*/10 * * * * /usr/local/bin/cf-ddns.sh >/dev/null 2>&1
保存并退出。输入service crond status
,可以看到 contab 的运行状态。如果 contab 服务没有打开,建议参考http://man.linuxde.net/crontab教程,它涵盖了 crontab 服务状态的启动、重启、查看、简单配置等内容。另外也可以看看http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html和http://www.runoob.com/linux/linux-comm-crontab.html。
问题排除
脚本获取 IP 更改 CloudFlare 的 DNS 记录后,会在目录中生成 ip.txt、cloudflare.ids 和 cloudflare.log 三个文件。ip.txt 记录的是本机的 IP。脚本自动获取到 IP 后,会先与 ip.txt 中的 IP 进行比较,当不一致时(检测到 IP 发生变化),才会更新 CloudFlare 的 DNS 记录,并且把新 IP 写入 ip.txt 文件中。如果 IP 没变化,运行脚本会提示IP has not changed
。如果要强制运行脚本更新 DNS 记录,可以rm /usr/local/bin/ip.txt
删除掉 ip.txt。
如果运行忽然出问题,可以试试rm /usr/local/bin/cloudflare.ids
把 cloudflare.ids 文件和 ip.txt 文件删除掉,再重新运行脚本。