利用Cloudflare搭建DDNS
声明
本文章转载自:
-
https://aipeach.gitbook.io/blogbackup/cloudflare-da-jian-ddns-jiao-ben-ban
-
https://aipeach.gitbook.io/blogbackup/cloudflare-da-jian-ddnsdocker
仅供学习,方便自己,侵权删。
Cloudflare搭建DDNS(脚本版)
自建DDNS解决动态IP服务器访问问题
- 把域名接入cloudflare
- 获取Global API Key
- 设置用于 DDNS 解析的二级域名,流量不经过CDN(云朵变灰)
- 下载 DDNS 脚本
- 修改 DDNS 脚本并补充相关信息
- 设置定时任务
把域名接入cloudflare
打开cloudflare,登陆账号添加网站按照提示操作
获取Global API Key
访问 https://dash.cloudflare.com/profile在页面下方找到 Global API Key,点击右侧的 View 查看 Key,并保存下来 ,在页面下方找到 Global API Key,点击右侧的 View 查看 Key,并保存下来

设置用于 DDNS 解析的二级域名,流量不经过CDN(云朵变灰)
添加一条A记录,例如:hkt.test.com,Proxy status设置成DNS only

下载 DNNS 脚本
curl https://raw.githubusercontent.com/aipeach/cloudflare-api-v4-ddns/master/cf-v4-ddns.sh > /root/cf-v4-ddns.sh && chmod +x /root/cf-v4-ddns.sh
修改 DDNS 脚本并补充相关信息
vim cf-v4-ddns.sh
# incorrect api-key results in E_UNAUTH error
# 填写 Global API Key
CFKEY=
# Username, eg: user@example.com
# 填写 CloudFlare 登陆邮箱
CFUSER=
# Zone name, eg: example.com
# 填写需要用来 DDNS 的一级域名
CFZONE_NAME=
# Hostname to update, eg: homeserver.example.com
# 填写 DDNS 的二级域名(只需填写前缀)
CFRECORD_NAME=
设置定时任务
首次运行脚本,输出内容会显示当前IP,进入cloudflare查看 确保IP已变更为当前IP
./cf-v4-ddns.sh
定时任务
crontab -e
*/2 * * * * /root/cf-v4-ddns.sh >/dev/null 2>&1
# 如果需要日志,替换上一行代码
*/2 * * * * /root/cf-v4-ddns.sh >> /var/log/cf-ddns.log 2>&1
Cloudflare搭建DDNS(docker)
本文所使用的项目地址https://github.com/oznu/docker-cloudflare-ddns
首先准备一个域名,域名可以去Freenom注册一个免费域名,目前免费域名已经不支持api了。
- 打开cloudflare添加你注册的这个域名
- 根据提示把域名的NS更换成Cloudflare的NS
- 在cloudflare添加一条A记录,IP随便填一个


安装 docker
docker version > /dev/null || curl -fsSL get.docker.com | bash
service docker restart
快速设置:
docker run -d \
-e EMAIL=hello@example.com \
-e API_KEY=xxxxxxx \
-e ZONE=example.com \
-e SUBDOMAIN=subdomain \
--restart=always oznu/cloudflare-ddns
测试
首次测试

重新拨号后测试

环境变量
- -e EMAIL - 你的CloudFlare电子邮件地址,使用范围API令牌时,不得设置此变量。
- -e API_KEY - 您的CloudFlare Global API Key。在此处获取: API密钥获取
- -e ZONE - 你的域名(一级)
- -e SUBDOMAIN - 你设置的二级域名(只用填写前缀),如果未填写,将使用一级。
- -e PROXIED - 设置为true使流量通过CloudFlare CDN。默认为false.
- -e RRTYPE=A - 设置为AAAA使用设置IPv6记录而不是IPv4记录。默认A为IPv4记录.
- -e DELETE_ON_STOP - 设置为true在容器停止时删除dns记录。默认为false
- -e INTERFACE=tun0 - 设置为tun0从名为的网络接口提取IP tun0。如果未提供,则将使用公网IP。需要–network host运行参数。
使用范围API令牌
任何时候都不建议直接使用Global API Key,为了安全建议使用API Tokens
创建CloudFlare API令牌,请访问https://dash.cloudflare.com/profile/api-tokens执行以下步骤: 1. 点击Create Token创建令牌 2. 设置令牌名称,例如 cloudflare-ddns 3. 授予令牌以下权限:
- Zone - Zone Settings - Read
- Zone - Zone - Read
- Zone - DNS - Edit
- 将Zone Resources设置为:
- Include - All zones
- 完成向导并将生成的令牌复制到
API_KEY容器的变量中
- 完成向导并将生成的令牌复制到
如下图所示

Zone Resources可选All zones或Specific zone